From bd76ff5b13d88f50327b8c0d2f1f9194adda5a09 Mon Sep 17 00:00:00 2001
From: Flotapponnier <160007691+Flotapponnier@users.noreply.github.com>
Date: Sun, 26 Jul 2026 07:02:09 +0200
Subject: [PATCH] seo P2 batch: CSP+twitter:site+grammar+hyperliquid
Dataset+feed.json (#1490)
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.
Co-authored-by: Florent Tapponnier
---
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