Skip to content

Fix residual blog metadata from Ahrefs audit#7894

Open
lawrencecchen wants to merge 9 commits into
feat-seo-site-auditfrom
feat-seo-blog-audit
Open

Fix residual blog metadata from Ahrefs audit#7894
lawrencecchen wants to merge 9 commits into
feat-seo-site-auditfrom
feat-seo-blog-audit

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Stacked on #7888.

Selects complete, route-specific metadata for 11 blog families, /nightly, and /guides across published locales. HTML, Open Graph, Twitter, and article schema use the same selected copy. English-only cmux-omo and gpl URLs now canonicalize instead of publishing fallback duplicates.

Tests: bun test (591 passed, 91 skipped), bun run typecheck, changed-file ESLint.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Note

Low Risk
Marketing-site SEO, i18n routing, and sitemap/middleware only; no auth or data paths, with broad test coverage for alternates and canonicalization.

Overview
Addresses Ahrefs-style metadata gaps by routing 11 audited blog posts plus /nightly and /guides through shared blogPostSeoCopy / landingPageSeoCopy helpers so titles and descriptions are built from plain post copy (not raw metaDescription + seoDescription alone). Blog pages use title: { absolute: ... }, and BlogSchema accepts seoKey so article JSON-LD matches HTML, Open Graph, and Twitter.

/blog/cmux-omo and /blog/gpl are treated as English-only: englishFallbackContentLocales, per-route fallbackContentRoutes, blogPostsForLocale (index + pager), sitemap/agent-page lists, buildAlternates, and middleware now 301 localized URLs to canonical English paths and emit hreflang only for en.

Tests expand audited SEO coverage (including plainSeoMessageLookup guards) and assert blog discovery and canonical behavior for those posts.

Reviewed by Cursor Bugbot for commit 0fa332e. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Fixes residual blog metadata from the SEO audit. Switches 11 audited posts and /nightly + /guides to plain‑text, canonical SEO, and hides English‑only posts from localized blog lists.

  • Bug Fixes
    • Route audited blog pages through blogPostSeoCopy; set title: { absolute: ... } and pass seoKey to BlogSchema so JSON‑LD uses the same copy.
    • Use landingPageSeoCopy for /nightly and /guides with complete prose and site context.
    • Treat /blog/cmux-omo and /blog/gpl as English‑only: buildAlternates, Link headers, and sitemap emit only en; middleware respects route‑specific locales, chooses the preferred available locale, and 301s non‑canonical locale paths.
    • Hide English‑only posts from non‑English pages: blog index and pager use blogPostsForLocale; agent‑page lists and sitemap align.
    • Enforce plain‑text metadata (reject rich messages and list lead‑ins); small i18n copy tweaks; expanded tests for audited routes, alternates, and canonicalization; stabilized navigation mocks.

Written for commit 0fa332e. Summary will update on new commits.

Review in cubic

@vercel

vercel Bot commented Jul 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Building Building Preview, Comment Jul 11, 2026 4:47pm
cmux-staging Building Building Preview, Comment Jul 11, 2026 4:47pm

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: ccdd342a-a4c2-4541-8a60-39840755e6c9

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-seo-blog-audit

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.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 210b427. Configure here.

Comment thread web/app/[locale]/(landing)/blog/cmux-omo/page.tsx
@greptile-apps

greptile-apps Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR aligns metadata and locale handling for audited marketing pages. The main changes are:

  • Selects route-specific SEO copy for 11 blog posts, /nightly, and /guides.
  • Reuses the selected copy across HTML, Open Graph, Twitter, and article schema metadata.
  • Canonicalizes two English-only blog posts and removes their unsupported localized variants.
  • Filters blog navigation, agent-readable pages, and sitemap entries by available locale.
  • Expands tests for metadata selection, alternate links, and locale routing.

Confidence Score: 5/5

This looks safe to merge.

  • The latest changes apply locale availability consistently across routing, navigation, sitemap, and agent-readable pages.
  • Metadata and article schema now use the same route-specific copy.
  • No blocking issue was found in the changed code.

Important Files Changed

Filename Overview
web/i18n/audited-seo.ts Adds shared selectors for audited blog and landing-page metadata.
web/i18n/locale-availability.ts Introduces per-route locale availability, including English-only blog routes.
web/proxy.ts Uses route-specific locales for negotiation, redirects, rewrites, and alternate Link headers.
web/app/[locale]/(landing)/blog/blog-schema.tsx Uses the selected audited copy in article JSON-LD.
web/app/[locale]/components/blog-posts.ts Filters blog entries by the locales in which each post is published.
web/app/sitemap.ts Limits sitemap entries and alternates for English-only posts.
web/app/lib/agent-page-paths.ts Limits agent-readable variants for English-only posts.

Reviews (7): Last reviewed commit: "Remove localized discovery for English-o..." | Re-trigger Greptile

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 210b427261

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread web/i18n/locale-availability.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7018acc2ca

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread web/i18n/locale-availability.ts
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

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.

1 participant