From 3be49a8b4a4bab116e001cf12f29d0b694e6863d Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Sun, 26 Jul 2026 07:01:42 +0200 Subject: [PATCH] seo P2 batch: CSP+twitter:site+grammar+hyperliquid Dataset+feed.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Five P2 fixes from the SEO deep audit (2026-07-26): 1. CSP: allowlist analytics.ahrefs.com in script-src + connect-src. Ahrefs script was silently violating CSP on every visitor. 2. products/[slug]: add twitter:site (was only card+title+description before, every other route type ships it). 3. chains/[slug]: pluralize 'N measurement' vs 'N measurements' ('1 measurements' on Polkadot hub reads broken). 4. hyperliquid/[slug]: add Dataset JSON-LD (only had BreadcrumbList, GSC treats content-heavy pages with only breadcrumbs as 'no structured data'). Dataset carries revenue+volume variableMeasured pointing at /api/stat/hyperliquid-frontends. 5. Add /feed.json (JSON Feed 1.1) as a companion to /rss.xml. Modern readers + AI agent tooling (Perplexity crawler, LangChain document loaders, MCP clients) prefer JSON over XML. added in layout for auto-discovery. Skipped items from the audit: - SITE.github Flotapponnier: false positive, ChainBench URL works. - robots.txt User-Agent casing: both forms are spec-compliant. - /ai.txt: no formal spec exists; llms.txt already covers. - JSON-LD body→head migration: refactor cost > payoff. - MCP directory registration: external, requires Anthropic account. --- next.config.ts | 11 +++- src/app/chains/[slug]/page.tsx | 2 +- src/app/feed.json/route.ts | 92 +++++++++++++++++++++++++++++ src/app/hyperliquid/[slug]/page.tsx | 50 +++++++++++++++- src/app/layout.tsx | 9 +++ src/app/products/[slug]/page.tsx | 2 +- 6 files changed, 160 insertions(+), 6 deletions(-) create mode 100644 src/app/feed.json/route.ts diff --git a/next.config.ts b/next.config.ts index a68ed197..0b0f6e15 100644 --- a/next.config.ts +++ b/next.config.ts @@ -12,19 +12,24 @@ const RELAY_WS = "wss://stream.openchainbench.com"; // modal's