Skip to content

cherry-pick seo hygiene P0 → main - #1474

Merged
Flotapponnier merged 1 commit into
mainfrom
cherry/seo-hygiene-p0-main
Jul 26, 2026
Merged

cherry-pick seo hygiene P0 → main#1474
Flotapponnier merged 1 commit into
mainfrom
cherry/seo-hygiene-p0-main

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Cherry-pick of #1473 (merged to dev). Same 4 verified P0 fixes: cache headers on sitemap+/api/citable, single robots meta on /404, case-normalising 308 in middleware, single og:image on chain-variant benches. See #1473 body for details.

…age (#1473)

Four verified crawl / SEO issues confirmed on prod (2026-07-26):

1. Sitemap + /api/citable served no s-maxage, every crawl re-ran the
   loader chain (x-vercel-cache: MISS observed). Add explicit
   Cache-Control on both via next.config.ts headers().

2. /404 emitted two identical <meta name="robots" content="noindex">
   tags because not-found.tsx set { index: false } and Next merged
   instead of replacing the layout's robots shape. Give not-found the
   full IS_STAGING-style shape so Next replaces.

3. Mixed-case URLs served 200 instead of 308-lowercase
   (/products/Alchemy, /Benchmarks/foo). Add case-normalising 308 at
   the top of middleware; broaden matcher to cover every HTML route.

4. Bench pages with chain variants (aggregator-head-lag, perp-fees)
   emitted 4-5 <meta property="og:image"> tags via generateImageMetadata
   fanning out per-chain entries. Social scrapers picked
   nondeterministically. Chain-scoped OG cards were never rendered on
   the actual /[chain] pages anyway (they inherit the site-wide OG),
   so the fan-out gave no upside. Return only the default entry.

Co-authored-by: Florent Tapponnier <contact@mobula.io>
@Flotapponnier
Flotapponnier merged commit e070216 into main Jul 26, 2026
1 check failed
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