<?xml version="1.0" encoding="UTF-8"?>
<!-- A sitemap INDEX, not a sitemap. The three files it points at are regenerated nightly by
     livekick.seo.tasks.generate_sitemap into s3://livekick-sitemap/sitemaps/ and served at
     /sitemaps/* through CloudFront E35OT3DLLOIP9S.

     NO DOUBLE HYPHEN ANYWHERE IN THIS COMMENT. XML 1.0 section 2.5 forbids the two-hyphen
     sequence inside a comment, and a conforming parser rejects the whole document. This file
     carried one from 2026-10-26 until 2026-10-27 and was served, HTTP 200, unparseable, so the
     index named no sitemaps at all to anything that actually parses XML. The house style of
     setting a clause off with two hyphens is correct everywhere else in this repo and is illegal
     here; use a comma, a semicolon or parentheses instead.

     This file is committed rather than generated, on purpose: the set of filenames changes
     essentially never, so generating it nightly would buy nothing and would need a second write
     path into the web bucket. It ships through the same dist-root mechanism as robots.txt
     (#1490) and is invalidated on deploy.

     It previously held five hand-written static URLs. Those are now covered by the nightly
     static-pages.xml below, so nothing is lost.

     recordings.xml was REMOVED 2026-10-26 (GI #422). It was submitting 2,453 individual dated
     recordings (95% of the whole sitemap) and Google was deduplicating them: "Duplicate, Google
     chose different canonical than user" went from 0 to ~120 in three days, every example an
     /en/ondemand/ date-form URL. The cause is recurring classes. The same class on different
     dates produces pages with IDENTICAL title, description and h1 and about 125 words each
     (measured: dianne-bondy slow-your-roll 2020-09-08 vs 2020-09-22, and jeffrey-williams
     happy-spine 2022-03-12 vs 2022-08-24). Those 2,453 URLs returned 9 clicks and 226 impressions
     in 28 days, and 8 of the 9 clicks went to a URL form this sitemap does not even submit.
     Series pages replace them later, introduced a chunk at a time.

     courses.xml was REMOVED 2026-10-27 (GI #422), on Yarden's instruction: "Courses you can
     remove, we don't support courses at the moment. We're going to rebuild it later in the future
     as series, but right now courses can be removed." A product decision, not a cleanup: the 30
     pages it submitted are alive and render (645 words and one h1 on /p/rhythmflow). All 30 were
     locale-less at /p/{slug}, and GSC returned 0 clicks and 0 impressions for a ~/p/ filter,
     measured 2026-10-27. Expected back as series pages. The orphaned S3 object is left in place,
     exactly as recordings.xml is; both get an empty urlset in a separate change.

     dj.xml was REMOVED 2026-10-27 (GI #422), on Yarden's ruling, same treatment as courses. It
     submitted 9 URLs, all locale-less at /dj/{slug}, which after the courses removal made it the
     last locale-less surface in this sitemap. GSC, page filter containing /dj/, 2026-07-26 to
     2026-10-25: 0 clicks, 49 impressions, average position 15.4. Zero clicks over a quarter.

     47 of those 49 impressions went to /en/dj/{slug} URLs carrying a utm query string, and only
     2 to the /dj/{slug} form this index submitted. The utm parameters are our own: the homepage
     DJ components attach them to the internal routerLink, so Google indexed the tagged variants.
     The DJ pages stay live for members; they stop being submitted and serve noindex, follow.

     The class sitemap was REMOVED 2026-10-31 (GI #422). It submitted 82 URLs, every one of the
     form /en/c/{slug} with a ?class= query parameter on it, across only six teacher bases
     (embodiedspirityoga 24, lizarch 22, marybethlarue 20, amplifiedyoga 9, myrahpenaloza 4,
     marcholzman 3). That was 82 of the 103 URLs this index submitted.

     Since the coach page began declaring its own canonical, each of those 82 serves a canonical
     pointing at the clean teacher URL, because the query is stripped. Submitting a URL whose own
     page asks Google to index a different one is a contradiction, and the sitemap is the half
     that goes. GSC Performance, page filter containing the class parameter, 90 days to
     2026-10-31: 0 clicks, 5 impressions, average position 17.6; and as with the DJ pages, those
     impressions landed on URLs carrying utm parameters on top, a form this index never submitted.

     Nothing is lost: every one of those teacher pages is still submitted in its clean form below.

     Runbook: ops/runbooks/CLOUDFRONT_SITEMAP_BEHAVIOUR.md -->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap><loc>https://www.livekick.com/sitemaps/static-pages.xml</loc></sitemap>
  <sitemap><loc>https://www.livekick.com/sitemaps/trainers.xml</loc></sitemap>
</sitemapindex>
