<?xml version="1.0" encoding="UTF-8"?>
<!--
  Rewritten for the standalone Hidden Springs site (HID-548).

  THIS FILE IS SERVED TO CRAWLERS BYTE FOR BYTE, COMMENTS INCLUDED. Vite copies
  public/ into dist/ unmodified — measured: `diff public/sitemap.xml
  dist/sitemap.xml` is empty. So everything written here is PUBLISHED, and this
  comment is a page of this site as far as a crawler is concerned. That is why
  the two retired gym paths below are described rather than spelled out: counsel
  asked the business to stop using that word, and a comment naming the paths
  published it on this domain five times over (HID-608). Where the exact strings
  are genuinely needed they live in code that is NOT published —
  src/lib/fitness.ts and src/lib/moved-routes.ts, both of which carry the full
  reasoning at length. Do not paste them back in here.

  The platform repo's sitemap advertised SEVEN URLs, three of which this site
  does not serve:
    the gym's retired fitness path  - O2 Oasis, moved to o2oasisashland.com.
                                      The 301 source; see src/lib/fitness.ts.
    the gym's circuit path          - O2 Oasis; see src/lib/moved-routes.ts.
    /membership/select              - booking app, never a marketing route

  Copying it verbatim would have published three URLs that resolve to a soft 404
  (the SPA catch-all rewrite answers 200 with the shell, so they would NOT have
  failed loudly).

  /skylight-room-rental IS served here and stays listed — the page ships as a
  static page (its booking form is deferred to M2, the page is not).

  The service-detail and practitioner pages are listed here and were not listed
  before. They are real, indexable content pages with their own copy, and they
  were previously reachable only by crawling nav links.

  /practitioners (the directory index, HID-210) is listed for the same reason.
  It is NOT a duplicate of /services: /services carries the modality copy and
  the bio excerpts, the directory carries the contact routes. Both are linked
  from the footer, so neither depends on this file to be found.

  /fitness (HID-597) IS listed, and that is a recorded decision rather than a
  default. It explains that the fitness center is now O2Oasis and carries the
  member sign-in link, so someone searching "hidden springs fitness center
  ashland" must be able to find it — a signpost nobody can find is not a
  signpost. The page sets no `noindex` and canonicalises to ITSELF on
  hiddenspringswellness.com; it must never canonicalise to o2oasisashland.com,
  which would hand this site's own page to the other domain.

  The retired fitness path stays OFF this list, and its line above still stands:
  this site does not serve it. What changed in HID-597 is that it is no longer a
  soft 404 either — vercel.json now answers it with a 301 to /fitness, because
  the URL is live and indexed today under the platform repo and keeps its
  inbound links, search results and member bookmarks after the domain moves. A
  redirected URL does not belong in a sitemap; its replacement does, and /fitness
  is listed below.

  The gym's circuit path is also absent, and the reason CHANGED — this paragraph
  used to say it "still has NO redirect... is NOT solved here... do not read its
  absence as handled", which was true when HID-597 wrote it and stopped being
  true when HID-601 landed. It is now SERVED, as one of the twelve signpost pages
  in src/lib/moved-routes.ts, and it is `noindex` in both layers: `useSeo` emits
  the meta tag and vercel.json sends `X-Robots-Tag: noindex` for both slash
  spellings. So its absence here is now correct for the SAME reason
  /cancel-booking's is, immediately below — not because it is unfinished. It
  still has no redirect, and that is the design rather than a gap: the operator's
  2026-09-06 decision was a signpost page rather than an automatic bounce.

  /cancel-booking is DELIBERATELY ABSENT (HID-568). The absence is the decision,
  not an oversight. It is a transitional courtesy page for members holding old
  cancel links in already-sent email — a signpost, not content — and it is
  served noindex twice over: `useSeo({ noindex: true })` in the page, and an
  `X-Robots-Tag: noindex` header in vercel.json. Listing a noindex URL in a
  sitemap asks Google to index a page you are simultaneously telling it not to,
  which Search Console reports as an error. Do not add it.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://hiddenspringswellness.com/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url>
  <url><loc>https://hiddenspringswellness.com/services</loc><changefreq>monthly</changefreq><priority>0.9</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/fitness</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/skylight-room-rental</loc><changefreq>monthly</changefreq><priority>0.7</priority></url>
  <url><loc>https://hiddenspringswellness.com/contact</loc><changefreq>monthly</changefreq><priority>0.7</priority></url>

  <url><loc>https://hiddenspringswellness.com/services/massage</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/services/integrated-medicine</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/services/colon-hydrotherapy</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/services/ketamine-assisted-psych</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/services/ayurveda</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/services/acupuncture</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>
  <url><loc>https://hiddenspringswellness.com/services/tcm</loc><changefreq>monthly</changefreq><priority>0.8</priority></url>

  <url><loc>https://hiddenspringswellness.com/practitioners/ann-conners</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners/trishah-neikirk</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners/thomas-garbarino</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners/ian-luepker</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners/tom-messinger</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners/kimberly-hall</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
  <url><loc>https://hiddenspringswellness.com/practitioners/shannon-mccall</loc><changefreq>monthly</changefreq><priority>0.6</priority></url>
</urlset>
