seo: purge thin compare pages + benchmark-first title on products & compare (#908) - #909
Merged
Merged
Conversation
…ompare (#908) * seo: purge thin compare pages + benchmark-first title on products & compare Bing WMT audit 2026-07-05: only 2 of 5093 sitemap URLs indexed. Root cause: 4938 ad-hoc /compare/ pages emitted at ≥1 shared bench threshold, producing near-duplicate templates that starved crawl budget and hurt domain trust. Changes: - sitemap: hybrid threshold. Brand-whitelist pairs emit at ≥1 shared, others at ≥3. Drops from 4938 → ~226 ad-hoc + 21 curated = ~247 URLs. Preserves every commercial X vs Y pair users actually search for (helius-vs-mobula, alchemy-vs-moralis, chain-vs-chain, perp-vs-perp). - compare-pairs: remove jupiter-vs-raydium (raydium has 0 bench appearances so /compare/jupiter-vs-raydium 404s at render). - products/[slug]: title now leads with 'Benchmark {year}' + head-term match on '<provider> benchmark' queries. Meta description ends with 'As of YYYY-MM-DD' for LLM citation extractability (LLM-mediated discovery drives ~80% of Bing query traffic). - compare/[slug]: title now leads with '{a} vs {b} Benchmark {year}'. Meta description is unique per pair (shared bench count + date) killing the identical duplicate signal that had Bing skipping pages. * seo: prose summary above the fold on /compare + /products Replaces the identical templated intro paragraph on both pages with a data-driven prose summary derived from live measurements. Kills the last piece of duplicate above-the-fold text so Bing sees genuinely unique substantive content per URL. /compare/[slug]: Before: 'Side by side OpenChainBench measurements. Identical layout, no editorial verdict...' (same on 247 pages) After: 'Codex leads on 2 of 4 shared benchmarks, Mobula on 2. Codex wins on aggregator-head-lag (128ms vs 195ms), wallet-labels- coverage (42.8% vs 38.1%). Mobula wins on metadata-coverage (96.9% vs 89.1%), network-coverage (80 vs 42 chains).' /products/[slug]: Before: 'Moralis performance benchmarks, live across 2 categories. Reproducible measurements, open methodology.' (same on 104 pages) After: 'Moralis is measured across 2 live OpenChainBench benchmarks, with 1 #1 finish: NFT collection metadata (ranks #1, 96.9% p50), Wallet labels coverage (ranks #2 of 5, 42.4% p50).' Falls back to a neutral sentence when the provider's p50 data is missing (cold ISR, harness restart) so cold pages don't render a lie. * chore(lint): exclude standalone sub-apps from main frontend lint infrastructure/monitoring-ui and infrastructure/prom-admin are independently deployed Next.js apps (own package.json + Railway config, own build/lint/typecheck pipeline). Scanning them from the main frontend's lint pass caused every unrelated PR to fail on their pre-existing warnings that the sub-app maintainers can fix in their own dedicated PRs. worker/ is the materialize worker (own package.json + Railway config), same reasoning. Unblocks PR #908 (SEO purge) and any subsequent PR touching only src/*. --------- Co-authored-by: Florent Tapponnier <contact@mobula.io>
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Cherry-pick of #908 (already merged and validated on staging).
Summary
Bing WMT audit 2026-07-05 showed only 2 of 5093 sitemap URLs indexed. Root cause: 4938 ad-hoc
/compare/*pages emitted at ≥1 shared bench threshold produced near-duplicate templates.Changes
sitemap.ts+ newbrand-whitelist.ts): brand pairs ≥1, others ≥3. Preserves helius-vs-mobula, alchemy-vs-moralis, chain-vs-chain, perp-vs-perp.jupiter-vs-raydium(raydium has 0 bench appearances).{Provider} Benchmark {year}, metaAs of DATE, data-driven prose above the fold.{a} vs {b} Benchmark {year}, meta unique per pair, data-driven prose showing winner per bench.infrastructure/**,worker/**) from main frontend lint pass.Staging validation (dev.openchainbench.com)
/compare/*URLs (target ≈250, better)/products/moralistitle:Moralis Benchmark 2026 — Live Performance Data · OpenChainBench✓/products/moralisprose: "Moralis is measured across 2 live OpenChainBench benchmarks, with 1 drop journal framing #1 finish: Best NFT collection metadata (ranks drop journal framing #1, 97.1% p50)…" ✓/compare/codex-vs-mobulatitle:Codex vs Mobula Benchmark 2026 · OpenChainBench✓/compare/codex-vs-mobulaprose: "Codex leads on 1 of 4 shared benchmarks, Mobula on 3. Codex wins on Crypto data API with most blockchains supported (121 vs 79). Mobula wins on Fastest crypto price API (0.6 s vs 1.0 s)…" ✓