Esports Odds API — SEO Campaign Design
Date: 2026-06-11 Status: Approved (design), in implementation Author: Markus + ClaudeGoal
Rank page 1 of Google for the esports-odds keyword cluster, capitalising on the 2026-06-10 platform upgrade that took esports coverage from ~70 to 550+ upcoming matches across 15 titles, added ~1s live scores, and added live scores/status over WebSocket. We currently have zero dedicated esports pages despite esports now being our strongest coverage — this is the gap.Keyword strategy (pillar + cluster)
Bare “esports api” is contested and intent-mismatched — the incumbents (PandaScore, Abios/Sportradar, GRID) sell match/stats data, not odds. We target the intent-matched cluster instead, where competition is weak and our product fits:| Page | Primary KW | Secondary KWs |
|---|---|---|
/esports-odds-api (pillar) | esports odds api | esports api, esports betting api, live esports odds api, esports data api |
/esports/[game] (×15) | {game} odds api | {game} betting odds api, {game} betting data |
Architecture
Three page types, all reusing existing patterns — no new CMS, MDX, or redesign.1. Pillar page — src/app/esports-odds-api/page.tsx (+ layout.tsx)
Modeled on the existing /sports-betting-api landing page (client component +
layout.tsx for metadata). Richest page; main rank target for “esports odds api”.
Sections: hero (550+ matches / 15 titles / ~1s scores / WebSocket), differentiators
(8x coverage jump, second-level live scores, WS scores+status — moats the
stats-data incumbents lack), 15-title grid linking to per-title pages, markets &
live data (incl. new period keys ft/ot/ap), code example, use cases, FAQ.
JSON-LD: SoftwareApplication + FAQPage + BreadcrumbSchema.
2. Programmatic per-title pages — src/app/esports/[game]/page.tsx
Mirrors the /sports/[sport] template exactly (generateStaticParams,
generateMetadata, JSON-LD). Driven by a new src/utils/esportsData.ts with an
EsportsTitle interface (same shape as SportData plus pandascoreSlug).
15 titles, SEO URL slug ≠ PandaScore slug:
| Title | urlSlug | pandascoreSlug | Top leagues |
|---|---|---|---|
| Counter-Strike (CS2) | cs2 | cs-go | BLAST, ESL Pro League, IEM |
| Dota 2 | dota-2 | dota-2 | The International, Majors, PGL |
| League of Legends | league-of-legends | league-of-legends | LCK, LPL, LCS |
| Valorant | valorant | valorant | VCT |
| Rainbow Six Siege | rainbow-six | r6-siege | Six Invitational, Pro League |
| StarCraft 2 | starcraft-2 | starcraft-2 | GSL, DH Masters |
| Rocket League | rocket-league | rl | RLCS |
| LoL Wild Rift | wild-rift | lol-wild-rift | Wild Rift League |
| Mobile Legends | mobile-legends | mlbb | M-World Championship, MPL |
| King of Glory | king-of-glory | kog | King Pro League |
| EA Sports FC | ea-sports-fc | fifa | FIFAe World Cup |
| PUBG | pubg | pubg | PGS, Global Invitational |
| Overwatch | overwatch | ow | OWL, World Cup |
| StarCraft: Brood War | starcraft-brood-war | starcraft-brood-war | ASL |
| Call of Duty | call-of-duty | cod-mw | CDL, Challengers |
/videogames endpoint
on 2026-06-10.)
3. Blog cluster — 4 Sanity posts
Informational long-tail, each linking up to the pillar:- How to Build an Esports Betting App with a Real-Time Odds API
- The 15 Biggest Esports for Betting in 2026 (with API coverage)
- Live Esports Scores & Status over WebSocket: a Developer Guide
- Esports Betting Markets Explained: Maps, Handicaps & Live Odds
docs/blog-drafts/ for manual Sanity import
(blog content lives in Sanity CMS, not the repo).
Glue
next-sitemap.config.js:/esports-odds-apiand/esports/*at priority 0.9 / daily.- Homepage footer (
src/app/page.tsx) +BlogFooter.tsx: add Esports API link. - Pillar ↔ per-title cross-links; per-title pages link to the pillar and to each other.
Out of scope (YAGNI)
No new CMS, no MDX migration, no redesign, no/v3/ API changes (so the
CLAUDE.md endpoint-doc workflow does not apply). Remaining-4-titles extension and
live event-count wiring deferred.
Success criteria
- All 16 pages build via
next buildand render with valid metadata + JSON-LD. - Pages appear in
sitemap.xmlat priority 0.9. - Internal links resolve (pillar ↔ titles ↔ homepage/footer).