Skip to content

Improve page metadata: titles, descriptions, and social tags - #1054

Merged
jptaylor merged 5 commits into
mainfrom
docs/metadata-overhaul
Aug 6, 2026
Merged

Improve page metadata: titles, descriptions, and social tags#1054
jptaylor merged 5 commits into
mainfrom
docs/metadata-overhaul

Conversation

@jptaylor

@jptaylor jptaylor commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Improves how docs pages appear in search results, link unfurls, and AI tools that index the docs (llms.txt consumers, Context Hub, Kapa).

  • Give every page a unique, readable title; resolve duplicate titles (Cartesia ×2, Quickstart ×3, etc.) and normalize naming across services, transports, and SDK reference pages. Sidebar labels are preserved via sidebarTitle.
  • Rewrite page descriptions to say what each page actually covers, including the classes it documents.
  • Unfurl fixes: remove the site-wide og:description/twitter:* overrides from docs.json so each page unfurls with its own title and description; add per-page og:title where short titles repeat across SDKs.
  • Serve a structured llms.txt (generated by scripts/gen-llms-txt.mjs), grouped by section with per-page descriptions.
  • Add a metadata lint (scripts/docs-meta-lint.mjs + CI workflow) enforcing the invariants: every page has a title and description, descriptions are unique, and unfurl titles are unique.
  • Switch page eyebrows to full breadcrumbs (styling.eyebrows) and set the social thumbnail font to Geist.
  • No URL changes; all existing redirects untouched. Adds one page (/enterprise-support).
  • Add an index page for the API Reference tab.

…age social tags, lint gate

Why: every page's frontmatter title feeds the <title> tag, H1, sidebar
label, OG image, llms.txt entry, and the citation label in AI tools
(Kapa, Pipecat Context Hub). 42 duplicate titles across 97 pages made
those surfaces ambiguous, docs.json pinned one generic og:description
site-wide so all pages unfurled identically, and half the descriptions
were too thin to disambiguate anything.

Titles: short, readable, H1-friendly. Services use vendor + category
names (Cartesia Text-to-Speech, Twilio Frame Serializer, Silero VAD);
server class-reference pages keep class names (TransportParams,
AudioBufferProcessor); SDK/Flows/Cloud reference pages use short names
with a disambiguating page-level og:title (Daily WebRTC Transport +
og:title 'Daily WebRTC Transport - iOS SDK'); landings are natural
phrases (Pipecat Server API Overview, iOS SDK Reference); CLI pages are
the literal command (pipecat cloud deploy). Six duplicate title groups
(21 pages, cross-SDK transports and Types/Exceptions) are deliberate:
each member carries a distinct og:title. Eyebrows switch to breadcrumbs
site-wide (styling.eyebrows) so deep pages show their full path.

Descriptions: all 455 rewritten or verified - 50-160 chars, carrying
the class names and modality acronyms (STT/TTS/LLM/VAD) each page
documents; claims grep-verified against page bodies.

docs.json: removed site-wide og:description, twitter:description,
og:url, twitter:url from seo.metatags (Mintlify derives them per-page);
corrected og:image:height to 630. No slugs changed anywhere; all 452
redirects untouched; one new page (enterprise-support).

Tooling: scripts/docs-meta-lint.mjs runs in CI (metadata-lint.yml),
comparing each PR against its merge-base. Enforced: description
uniqueness and effective unfurl-title (og:title||title) uniqueness -
the RAG identity invariants. Raw title duplicates warn only.
scripts/gen-llms-txt.mjs generates the checked-in structured llms.txt
(the auto-generated fallback would sit at 95% of its 100k truncation
cap); staleness fails CI. CLAUDE.md documents the conventions and is
noindexed.

Metrics vs main: duplicate titles 42 -> 6 accepted groups, duplicate
descriptions 4 -> 0, descriptions under 70 chars 231 -> 0, description
mean 71 -> 111 chars, og:titles 0 -> 58, sidebar labels deliberately
changed on 42 API reference pages (vendor-only labels in vendor
groups).
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

🔍 Mintlify preview for this branch: https://daily-docs-metadata-overhaul.mintlify.site

Comment thread CLAUDE.md
### MDX frontmatter

Every page needs a `title` and optional `description`:
Every page needs a `title` and a `description`. The frontmatter `title` becomes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for adding this 🙏

Comment thread llms.txt
@@ -0,0 +1,782 @@
# Pipecat

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup, much better than the default that Mintlify scrapes together.

@markbackman markbackman left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ship it when you're ready! Thanks for taking a pass on this.

Landing page at /api-reference with a card for each reference surface:
the server framework, each client SDK with docs and GitHub links,
Pipecat Flows, the Pipecat Cloud REST API and Python SDK, the CLI, and
the Context Hub. Nav walkers in the lint and llms.txt generator learn
group root and tab-level pages.
---
title: "Callbacks and Events"
description: "Handle bot events and state changes with callbacks and event listeners in the Pipecat JavaScript client"
"og:title": "Callbacks and Events - JavaScript SDK"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jptaylor why is this one og:title ?

@@ -1,7 +1,7 @@
---
title: "iOS SDK Overview"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jptaylor here's an example of a doc without og:title should they all have og:title ?

@jamsea

jamsea commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@jptaylor my only question is what's the difference between title and og:title and why do some pages have one and not the other?

@jamsea
jamsea marked this pull request as ready for review August 4, 2026 03:11

@mattieruth mattieruth left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

…overhaul

# Conflicts:
#	.gitignore
#	CLAUDE.md
@jptaylor
jptaylor merged commit 002dd4a into main Aug 6, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants