<?xml version="1.0" encoding="UTF-8"?>
<!--
  HAND-WRITTEN SITEMAP — keep in sync with src/pages/ by hand.

  This file exists because @astrojs/sitemap is disabled in astro.config.mjs
  (v3 crashes `astro build` on Astro 4; the fix is blocked behind the Astro 5
  upgrade). When that upgrade lands and the integration is re-enabled, DELETE
  this file and restore the generated /sitemap-index.xml — shipping both means
  two competing sitemaps and a robots.txt that can only point at one.

  CONTENTS: only pages that should rank. Deliberately excluded —
    /404                      the not-found page (noindex,nofollow)
    /coaches/                 "Coming soon." stub (noindex,nofollow)
    /about-gotta-tennis/      legacy-URL redirect stub (noindex + meta refresh)
    /contact-us/              legacy-URL redirect stub (noindex + meta refresh)
    /high-performance-junior/ legacy-URL redirect stub (noindex + meta refresh)
    /pro-tour-players/        legacy-URL redirect stub (noindex + meta refresh)
    /junior/                  parked-route redirect stub (noindex + meta refresh)
    /pro/                     parked-route redirect stub (noindex + meta refresh)
    /juniors/                 legacy-URL redirect stub (noindex + meta refresh)
    /junior-services-old/     legacy-URL redirect stub (noindex + meta refresh)
    /junior-services-test/    legacy-URL redirect stub (noindex + meta refresh)
    /ao/                      legacy-URL redirect stub (noindex + meta refresh)
    /academy/                 off-site redirect stub -> hub.gottatennis.com/start
    /parents/                 off-site redirect stub -> hub.gottatennis.com/start
    /roadmap/                 off-site redirect stub -> hub.gottatennis.com/start
    /playerdev/               off-site redirect stub -> hub.gottatennis.com/start

  The four off-site stubs canonicalise to hub.gottatennis.com, a host this
  sitemap does not speak for; listing them would be a cross-domain claim.

  NOT LISTED AND NOT REDIRECTED: /services-terms/ (the live WordPress Junior
  Services T&Cs) has no rule at all — it is a distinct legal document from
  /terms and is awaiting Josh's decision. Deliberate 404s after the cutover:
  /blog/ /hello-world/ /category/uncategorized/
  /author/productgottatennis-com/ /site-maintenance/ /tbarm/

  URL FORM: trailing slash, matching each page's <link rel="canonical">.
  A sitemap that disagrees with the canonical tag sends a mixed signal.

  LASTMOD: the real git commit date of each page's own content files (its
  .astro page plus its page-specific components), NOT the date this file was
  written and NOT the shared chrome (BaseLayout/NavBar/Footer/FooterCTA) —
  a site-wide layout tweak is not a change to the page's content.

  changefreq/priority are omitted on purpose: Google has stated it ignores
  both, and stale values are just noise to maintain.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://gottatennis.com/</loc>
    <lastmod>2026-08-15</lastmod>
  </url>
  <url>
    <loc>https://gottatennis.com/about/</loc>
    <lastmod>2026-08-14</lastmod>
  </url>
  <url>
    <loc>https://gottatennis.com/clubs/</loc>
    <lastmod>2026-08-15</lastmod>
  </url>
  <url>
    <loc>https://gottatennis.com/contact/</loc>
    <lastmod>2026-08-14</lastmod>
  </url>
  <url>
    <loc>https://gottatennis.com/privacy/</loc>
    <lastmod>2026-08-13</lastmod>
  </url>
  <url>
    <loc>https://gottatennis.com/terms/</loc>
    <lastmod>2026-08-13</lastmod>
  </url>
</urlset>
