Repository navigation
seo: stop counting benches that 410 on product pages, and 404 the thin compare tail - #2618
Merged
Merged
Conversation
… and the thin compare tail 404s instead of living forever as noindex Majors 1 and 2 of the 2026-09-22 site audit. Product pages had one link gate, built from isExpiredRpcPage, which covers chain RPC pages and nothing else; the file never knew about REMOVED_BENCH_SLUGS or isDevOnlyBench. Live on /products/mobula: two outgoing links to /benchmarks/indexing-freshness and /benchmarks/portfolio-chain-coverage, both 410, their ranks printed inside the first 300 words, and both counted in "8 live benchmarks". An answer engine quoting that page quoted a rank on a cohort the site had retired. One helper now filters appearances for generateMetadata and the body alike, so the metadata lead, the visible count and the list agree and none of them names a page that 410s. The degraded-read tripwire keeps reading the raw list: it is about the store being healthy, not about display. The compare tail answered 200 with noindex, the one combination a crawler never drops. Search Console recorded impressions on 383 compare URLs against 151 in the sitemap, so 232 pages were live, crawled and deindexed, and the property carries 3,356 noindex exclusions, about four times the indexable site. An ad hoc pair with fewer than two live shared benches now 404s, in generateMetadata and the body both, next to the notFound() the file already does for a pair sharing zero benches. Curated COMPARE_PAIRS stay indexable on a single live bench, unchanged: compare is the best-converting section (6,332 impressions, 92 clicks) and the curation is what earns that. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D
Flotapponnier
added a commit
that referenced
this pull request
Sep 22, 2026
…from 404ing the best converting page, retire the second dead answer (#2625) Third audit. Two of these are mine. #2620 moved the registry one-liner in front of the measured lead in the product description. Registry descriptions run to a median of 166 characters against a 155 cap, so capSnippet dropped the lead entirely and every one of the 220 product snippets lost its numbers: /products/invo went from "Invo ranks #7 of 104 on trading builder fees collected at $12.8K, #8 of 11 on Crypto trading app iOS App Store ratings at 4.23x (p50, 24h)." to a vendor blurb with nothing measured in it. The vendor's own SERP result already says what the product is; the ranks are the only thing ours carries that theirs does not. A one-liner under 80 characters still leads; a longer one follows the ranks, trimmed to its first clause. #2618 turned the compare thin gate from noindex into notFound. That is right for a pair that structurally has nothing to compare and wrong for one whose data dipped for a render window: /compare/fomo-vs-invo sits at exactly two live shared benches and earns 36 of the site's 289 clicks, so one flapping bench would have 404ed the best converting URL on the property. The 404 now keys on the number of SHARED benches, which is stable, and a live-count dip goes back to noindex, which recovers. The sitemap's 3/4 buffer in adhoc-pairs.ts stays exactly as written: it exists for this flap and its comment says so. The audit proposed lowering it to match the render floor; that would have removed the buffer precisely when crossing it became expensive. And the same retired-bench class as yesterday, second instance: /answers/polymarket-vs-kalshi-fees references pm-fee-comparison too, 404s too, and was advertised by the same hub. The filter added yesterday works; the slug was missing from the set. Its YAML also hand-types "flat 2%", "roughly $0.07" and a "$0.20 / $0.80" crossover, so it must not be revived as written. Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Majors 1 and 2 of the 2026-09-22 site audit.
Product pages counted, linked and quoted benches that return 410
The only link gate was built from
isExpiredRpcPage, which covers chain RPC pages and nothing else; the file never knew aboutREMOVED_BENCH_SLUGSorisDevOnlyBench.Live on
/products/mobula: two outgoing links to/benchmarks/indexing-freshnessand/benchmarks/portfolio-chain-coverage, both 410, their ranks printed inside the first 300 words, and both counted in "8 live benchmarks". An answer engine quoting that page quoted a rank on a cohort the site had retired.One helper now filters appearances for
generateMetadataand the body alike, so the metadata lead, the visible count and the list agree and none of them names a page that 410s. The degraded-read tripwire keeps reading the raw list — it is about the store being healthy, not about what is displayed.The compare tail lived forever as 200 + noindex
That is the one combination a crawler never drops. Search Console recorded impressions on 383 compare URLs against 151 in the sitemap, so 232 pages were live, crawled and deindexed, and the property carries 3,356 noindex exclusions, about four times the indexable site.
An ad hoc pair with fewer than two live shared benches now 404s, in
generateMetadataand the body both, right next to thenotFound()the file already does for a pair sharing zero benches. A 404 leaves the index in weeks; a 200 with noindex is recrawled indefinitely.Curated
COMPARE_PAIRSstay indexable on a single live shared bench, unchanged. Compare is the best-converting section (6,332 impressions, 92 clicks) and the curation is what earns that.pnpm typecheckclean,pnpm lint0 errors,pnpm test301 pass,pnpm validate231 specs.🤖 Generated with Claude Code
https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D