Skip to content

docs(seo): restore readable titles and improve site metadata - #598

Merged
SantiagoDePolonia merged 5 commits into
mainfrom
docs/seo-metadata
Jul 27, 2026
Merged

SantiagoDePolonia merged 5 commits into
mainfrom
docs/seo-metadata

Conversation

@SantiagoDePolonia

@SantiagoDePolonia SantiagoDePolonia commented Jul 27, 2026 •

Copy link
Copy Markdown
Contributor

What

Reverts 567aa814 docs(seo): improve page metadata and improves docs SEO through metadata readers never see, leaving navigation labels alone.

Why the revert

That commit rewrote the frontmatter of 57 pages into templated titles. Mintlify already appends the site name to the title tag, so the GoModel … prefix rendered on the live site as:

GoModel Cost tracking: AI Gateway Configuration Guide - GoModel

The brand appeared twice in the title tag and once in every sidebar and tab label. It also appended boilerplate to every description ("Review implementation guidance for reliable production AI workloads") and overwrote the curated keywords on budgets, rate-limits, and failover with a generic ["GoModel", "AI gateway", "<page>"] triple.

Titles are restored byte-identical to the pre-commit state — verified with git diff 567aa814^ -- 'docs/**/*.mdx' | grep '^[+-]title:' returning nothing.

SEO improvements

None of these touch a nav label.

docs.json

  • Site-level description — used for SERP and AI indexing; was missing.
  • seo.organization — schema.org publisher entity with sameAs links. legalName omitted, as I couldn't verify one.
  • metadata.timestamp — renders a last-modified date, feeding dateModified in structured data.
  • The existing canonical was checked against the deployed site before touching anything: Mintlify appends each page's path, so /docs/features/cost-tracking already gets its own correct canonical. Left as-is.

Keywords — only 3 of 57 pages had any; all 57 now do, with specific terms ("circuit breaker", "DashScope", "prompt cache") rather than brand repetition. Verified against the deployed site: Mintlify renders these into the app payload backing internal docs search and AI/MCP retrieval, not into a keywords meta tag or structured data. (Google ignores meta keywords regardless, so the value here is site search and AI answer quality, not ranking.)

Descriptions — the 11 thinnest (53–77 chars) extended to 134–151, drawn from each page's own content. Google renders ~155, so those pages were using half the available line. The other 46 were already good and are untouched.

Cost-tracking caveats

Simplified, after verifying each claim against the source:

  • The warning said costs are computed "from catalog pricing". Both halves were imprecise: CalculateUsageCost prefers provider-reported exact costs for OpenRouter and xAI (internal/usage/cost.go:429-437), and pricing resolves overrides → config.yaml → catalog, contradicting the page's own "Where pricing comes from" section. Reworded to cover the exact-cost case.
  • Dropped the unverifiable list of billing-difference causes (currency conversion, plan discounts).
  • The cached-token <Note> and recalculation <Warning> both check out (cost.go:175-178; empty CostResult when pricing == nil at cost.go:139-141 → NULL cost) — kept, tightened.
  • The advice to treat the provider's dashboard as the source of truth predates the SEO commit (docs(usage): add cost tracking guide #442) and stays, but it previously forbade using GoModel figures for invoicing or reconciliation outright. That was stricter than intended, so it is now a verify-first condition: the figures are usable for those purposes once checked against the provider's own billing.

User-visible impact

Sidebar, tabs, and page headings return to the short human-readable names. Title tags go from GoModel Cost tracking: AI Gateway Configuration Guide - GoModel to Cost tracking - GoModel.

One deliberate visible addition: metadata.timestamp puts a last-modified date on every page. Easy to drop if unwanted — it's one line in docs.json.

Verified against the Mintlify preview

The preview deploy (gomodel-docs-seo-metadata.mintlify.site) confirms:

  • Title tag is now Cost tracking - GoModel, down from GoModel Cost tracking: AI Gateway Configuration Guide - GoModel.
  • Canonical stays the production URL (https://gomodel.enterpilot.io/docs/features/cost-tracking), so previews can't compete for indexing.
  • metadata.timestamp renders ("Last modified on July 27").
  • The Beta pill is gone from the five API pages.
  • The configured Organization logo (/docs/logo.svg) returns 200 image/svg+xml.

One caveat: preview deploys emit only a reduced WebSite JSON-LD block, whereas production emits the full @graph (Organization, WebSite, WebPage, BreadcrumbList). So seo.organization is present and parsed in the shipped config, but its effect on the Organization entity can only be confirmed once this is on production. Today production derives that entity as name GoModel; after merge it becomes Enterpilot with a sameAs link to the GitHub repo.

Testing

mint validate passes via pre-commit, covering docs.json and all 57 pages' frontmatter. No Go code is touched.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Refreshed page metadata (titles, descriptions, keywords, and icons) across About, Advanced, Features, Getting Started, Guides, Providers, and MCP-related docs to improve navigation and search.
    • Updated documentation text for clearer cost-tracking warnings, cached-token discount rules, and cost reconciliation behavior.
    • Removed outdated Beta tagging on selected API pages and adjusted related descriptions.
    • Enhanced site-wide docs metadata with improved top-level descriptions, organization details, social links, and enabled page timestamps.

Revert "docs(seo): improve page metadata" (567aa81), which rewrote the
frontmatter of 57 pages into templated, keyword-stuffed titles. Because
Mintlify already appends the site name to the title tag, the "GoModel ..."
prefix rendered as "GoModel Cost tracking: AI Gateway Configuration Guide -
GoModel" and pushed the brand into every sidebar and tab label. That commit
also appended boilerplate to every description and overwrote the curated
keywords on budgets, rate-limits, and failover with a generic
["GoModel", "AI gateway", "<page>"] triple.

Titles are restored byte-identical to the pre-commit state, so navigation
reads the way it did before. SEO is improved instead through metadata that
readers never see:

- docs.json: add the site-level description, seo.organization (schema.org
  publisher entity with sameAs links), and metadata.timestamp so pages carry
  a dateModified freshness signal. The existing canonical was verified
  against the deployed site first - Mintlify appends each page's path, so it
  already emits correct per-page canonicals and is left alone.
- keywords: only 3 of 57 pages had any. All 57 now carry specific terms
  feeding Mintlify's internal search, the meta tag, and structured data.
- descriptions: extend the 11 thinnest (53-77 chars) to 134-151, drawn from
  each page's own content. Google renders ~155, so those pages were using
  half the available line. The other 46 were already good and are untouched.

Also simplify the cost-tracking caveats, after verifying each claim against
the source. The warning said costs come "from catalog pricing", but
CalculateUsageCost prefers provider-reported exact costs for OpenRouter and
xAI (internal/usage/cost.go:429-437), and pricing resolves overrides ->
config.yaml -> catalog, contradicting the page's own "Where pricing comes
from" section. Reword to cover the exact-cost case and drop the
unverifiable list of billing-difference causes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 27, 2026 13:06

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Jul 27, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@SantiagoDePolonia, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 34 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c61682b4-cd32-4f68-a214-0706b62958bc

📥 Commits

Reviewing files that changed from the base of the PR and between 63809e6 and d663eee.

📒 Files selected for processing (1)
  • docs/docs.json
📝 Walkthrough

Walkthrough

The PR refreshes documentation metadata across about, advanced, feature, guide, MCP proxy, and provider pages. It also expands site SEO metadata and clarifies cost-estimation, cached-token pricing, and recalculation documentation.

Changes

Documentation refresh

Layer / File(s) Summary
Site metadata configuration
docs/docs.json
Adds a fuller site description, organization SEO data, social links, and timestamp metadata.
General documentation metadata
docs/about/*, docs/advanced/*, docs/features/*, docs/getting-started/*, docs/guides/*, docs/mcp-proxy/*
Updates page titles, descriptions, keywords, icons, and selected beta tags across general documentation pages.
Provider documentation metadata
docs/providers/*
Refreshes provider page metadata with shorter titles and provider-specific descriptions and keywords.
Cost-tracking explanations
docs/features/cost-tracking.mdx
Clarifies estimated versus provider-reported costs, cached-token discounts, and stored-cost recalculation behavior.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: copilot

Poem

I’m a rabbit hopping through docs in a row,
Trimming old titles wherever they go.
Keywords now sparkle, SEO takes flight,
Costs and cached tokens read clearer tonight.
Binky! The metadata garden is bright.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately summarizes the main change: restoring readable SEO titles and improving site metadata.
Description check ✅ Passed The description clearly explains what changed and why, and it includes testing/verification details even though it doesn't match the template headings exactly.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/seo-metadata

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mintlify

mintlify Bot commented Jul 27, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
gomodel 🟢 Ready View Preview Jul 27, 2026, 1:07 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

The caveat forbade using GoModel figures for invoicing or reconciliation
outright. That is stricter than intended: the figures are usable for those
purposes, they just need to be checked against the provider's own billing
first, since they are estimates whenever a provider does not report an exact
cost. Reword from a prohibition to a verify-first condition.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 27, 2026 13:07

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Remove tag: "Beta" from the Anthropic Messages, Responses, Responses
compatibility, Conversations, and Audio API pages. The passthrough API keeps
its pill, since that page still describes beta-scoped behavior in its body.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 27, 2026 13:08

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

sameAs is meant for profiles that identify the organization itself, and an
invite link is not one. The Discord navigation anchor is unaffected.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 27, 2026 13:27

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

enterpilot.io publishes its own Organization block naming the company
"enterpilot, Inc.", so the registered name can now be stated. Keep name as the
common display name and put the registered name in legalName, which is the
split schema.org intends.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 27, 2026 13:31

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@SantiagoDePolonia
SantiagoDePolonia merged commit 6a7b4c0 into main Jul 27, 2026
19 checks passed

This branch was successfully deployed

1 active deployment
staging - docs — d663eee2 Deployed Jul 27, 2026 by mintlify[bot]
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.

3 participants