<?xml version="1.0" encoding="UTF-8"?>
<!--
  CGSports sitemap (gap G55, 2026-10-16). A STATIC file on purpose: public/_routes.json excludes /*.xml from the Functions worker, so a
  function at /sitemap.xml is never invoked (proved on `wrangler pages dev`: with functions/sitemap.xml.ts present, GET /sitemap.xml still
  returned the SPA shell). Until this file existed the URL answered 200 text/html (the SPA shell).
  What is listed: every page that has its own crawlable URL: the home page, one server-rendered page per sport (functions/[sport]/index.ts,
  every id in sports/index.mjs ALL_SPORTS), the Terms, the Privacy Policy and the Contact form (functions/contact.ts, 2026-10-20: the footer's
  "Give feedback" link on every server-rendered page points at it). NOT listed: the Receipts page and the other SPA views (they live
  behind the "#/" fragment, which is not a URL a crawler can request), /exit, /admin and /api/ (robots.txt disallows them).
  platform/render/web-hygiene.test.mjs fails when this list and ALL_SPORTS disagree: add a <url> here when a sport is added.
  The origin is the canonical one (platform/render/render.mjs SITE_ORIGIN); change it here and there together when the custom domain arrives.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://cgsports.pages.dev/</loc></url>
  <url><loc>https://cgsports.pages.dev/nfl/</loc></url>
  <url><loc>https://cgsports.pages.dev/mlb/</loc></url>
  <url><loc>https://cgsports.pages.dev/nhl/</loc></url>
  <url><loc>https://cgsports.pages.dev/nba/</loc></url>
  <url><loc>https://cgsports.pages.dev/ncaaf/</loc></url>
  <url><loc>https://cgsports.pages.dev/ncaab/</loc></url>
  <url><loc>https://cgsports.pages.dev/terms</loc></url>
  <url><loc>https://cgsports.pages.dev/privacy</loc></url>
  <url><loc>https://cgsports.pages.dev/contact</loc></url>
</urlset>
