<?xml version="1.0" encoding="UTF-8"?>
<!--
  Sitemap index. Five sub-sitemaps:

  1. sitemap-static.xml       — truly-static URLs (homepage, legal,
                                 about, pricing, campaigns). Hand-edited;
                                 lastmod values reflect when the routes'
                                 content actually changed.
  2. sitemap-editorial.xml    — every published editorial article + the
                                 /editorial index. Dynamic; lastmod from
                                 editorial_articles.updated_at.
  3. sitemap-styles.xml       — every published style landing page + the
                                 /styles index and the 5 engine category
                                 roll-ups. Dynamic; lastmod from
                                 prompt_variants.updated_at. Self-updates
                                 as styles are added/edited via the
                                 admin.
  4. sitemap-masterworks.xml  — the /masterworks gallery, its era pages,
                                 and every published artwork PDP (with
                                 image entries). Dynamic; lastmod from
                                 artworks.updated_at.
  5. sitemap-campaigns.xml    — every active landing-campaign page
                                 (/pets, /weddings, /fathers-day, ...).
                                 Dynamic; lastmod from
                                 landing_campaigns.updated_at. Excludes
                                 slugs that canonicalize to style leaves.

  ALL FIVE ARE REAL FILES IN public/ — do not point this index at a path
  that does not exist.

  Entries 2-5 used to be served by an SSR proxy that rewrote each
  same-host path to its Supabase edge function. That proxy
  (cloudflare-worker/fable-ssr-router.ts, later ported to
  vercel-proxy/middleware.ts) was never deployed: fable.surrealium.world
  is served by Lovable off a GoDaddy A record. So for as long as this
  index has existed, four of its five entries answered 404 — a permanent
  "Couldn't fetch" in Search Console, with the ~1050 style / artwork /
  editorial / campaign URLs behind them reachable only through the
  cross-host `Sitemap:` lines in robots.txt.

  They are now SNAPSHOTS, written into public/ by

      node scripts/generate-sitemaps.mjs

  which fetches each edge function and validates the XML before writing.
  Re-run it and commit the result whenever styles, artworks, articles or
  campaigns have changed; the script refuses to write a malformed,
  empty, or suspiciously-shrunken file.

  Snapshot staleness is NOT covered by anything else. robots.txt used to
  also list the four cross-host function URLs as a live fallback; they were
  removed because they never worked. The Supabase edge gateway rewrites
  Content-Type on GET, so a crawler fetching one receives text/plain with
  nosniff — HEAD returns the intended application/xml, which is why this hid
  for so long. Google reads a text/plain sitemap as one bare URL per line, so
  every line of XML was an invalid entry.

  These five files are therefore the whole discovery mechanism, and they are
  same-host, so Search Console can finally report coverage on a property we
  own.

  If vercel-proxy IS deployed, these paths can go back to being live
  rewrites — but only because the proxy rewrites the Content-Type on the way
  through (its deploy notes list `content-type: text/html NOT text/plain` as a
  launch gate for exactly the gateway behaviour described above). Verify that
  a GET, not a HEAD, returns application/xml before deleting any snapshot.
-->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://fable.surrealium.world/sitemap-static.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://fable.surrealium.world/sitemap-editorial.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://fable.surrealium.world/sitemap-styles.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://fable.surrealium.world/sitemap-masterworks.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://fable.surrealium.world/sitemap-campaigns.xml</loc>
  </sitemap>
</sitemapindex>
