<?xml version="1.0" encoding="UTF-8"?>
<!--
  Sitemap for understandball.com.

  ONE URL, ON PURPOSE. This is a state-driven SPA: App.jsx switches between the
  builder, the leaderboards, the history library, the sport tabs and everything
  else with React state (`mode`, `sportId`, `datasetId`) and never touches the
  URL — there is no router, no pushState, no hash route for a panel. So `/` is
  the only crawlable page the site has.

  The only other server-visible path is `/s/<code>`, the per-trade share shim.
  It is deliberately absent: the code space is unbounded, every one of those
  URLs redirects into this same page, and each already declares this page as its
  canonical. Listing them would be asking Google to index infinite duplicates.

  No <lastmod>, <changefreq>, or <priority>. Google ignores the latter two
  outright, and a <lastmod> that nobody remembers to bump is a date that lies —
  worse than no date, because a consistently-stale lastmod teaches crawlers to
  distrust the field. Add it back only alongside something that keeps it true.

  If the canonical host ever changes, this file, public/robots.txt and the
  <link rel="canonical"> in index.html must all move together. There is a test
  that fails if they drift: frontend/src/seo/siteOrigin.test.js.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://understandball.com/</loc>
  </url>
</urlset>
