Skip to content

feat(seo): index blog tag and author archive routes (#197) - #200

Open
Escelit wants to merge 1 commit into
wraith-protocol:developfrom
Escelit:feat/blog-archive-seo-197
Open

Escelit wants to merge 1 commit into
wraith-protocol:developfrom
Escelit:feat/blog-archive-seo-197

Conversation

@Escelit

@Escelit Escelit commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Closes #197

/blog/tag/* and /blog/author/* were served by the app but rejected by isIndexableRoute, so they had no sitemap entries and no metadata.
The root cause was that blogSlugFrom matched any /blog/, swallowing tag and author paths before they could be handled.

Policy

Route family Indexable? Condition
/blog/tag/:slug ✅ slug maps to a tag in blog-manifest.json
/blog/author/:id ✅ author has optIn: true and is not opted out
unknown tag slug ❌ returns null / not in sitemap
opted-out / unknown author ❌ returns null / not in sitemap

Changes

  • og-metadata.ts — blogSlugFrom narrowed to single-segment paths; new tag/author helpers; isIndexableRoute, resolveRouteMetadata,
    ogImageSlugFor, listOgImageJobs all updated
  • blog-manifest.json — tags field added; gen-blog-manifest.mjs emits it going forward
  • en/es/pt.json — ogContent extended for all 7 known tags and the lena-vogt author archive

Tests — 23 new tests; all 105 og-metadata and 67 middleware tests pass. Build generates 99 OG images across 33 routes.

)

- blogSlugFrom now matches only single-segment /blog/<slug> paths,
  so /blog/tag/* and /blog/author/* no longer fall into the post branch
- isIndexableRoute accepts known tag slugs (derived from blog-manifest
  tags) and opted-in authors; rejects everything else
- resolveRouteMetadata resolves tag/author archives with ogType website
  and i18n-backed copy; unknown slugs still return null
- ogImageSlugFor emits blog-tag-<slug> and blog-author-<id> slugs
- listOgImageJobs generates one image job per known tag and opted-in
  author per locale
- blog-manifest.json gains a tags field; gen-blog-manifest.mjs emits
  it for new posts automatically
- ogContent in en/es/pt i18n files extended with entries for all 7
  known tags and the lena-vogt author archive
- Tests: two new describe blocks (tag archives, author archives) with
  23 new tests; stale bypass assertions updated in middleware tests
@drips-wave

drips-wave Bot commented Oct 16, 2026

Copy link
Copy Markdown

@Escelit Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@vercel

vercel Bot commented Oct 16, 2026

Copy link
Copy Markdown

@Escelit is attempting to deploy a commit to the truthixify's projects Team on Vercel.

A member of the Team first needs to authorize it.

@truthixify truthixify 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.

The non-indexed tag policy is not fully emitted in the rendered page. In src/pages/Blog.tsx:479, the unknown-tag branch sets only the title; unlike the unknown/opted-out author branch, it does not add <meta name="robots" content="noindex" />. The middleware deliberately bypasses /blog/tag/nonexistent-tag, so the base HTML also has no noindex directive. This leaves an unknown tag archive without the robots policy required by #197.

Please add the noindex directive to the unknown-tag state and cover the rendered unknown tag route in a test. Known tag metadata, sitemap entries, OG generation, and the focused build all passed locally.

This branch has not been deployed

No deployments
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.

[Wave 10][Carryover] Align blog archive routes with SEO metadata policy

2 participants