<?xml version="1.0" encoding="UTF-8"?>
<!--
  Sitemap for www.sceneryaudio.com.

  WHAT BELONGS HERE, AND WHAT NEVER DOES.

  A sitemap is an active request to index. It lists only URLs that are (a)
  reachable, (b) crawlable, and (c) cleared for publication. Today that is the
  ten static marketing pages below plus /discover and /en/discover.

  /listen and /en/listen joined the set on 2026-08-13. They are the durable
  replacement for the `/share/<token>` CTAs described below: a static document
  each, naming one featured recording and playing it through
  functions/listen/audio.js with no account, no token and no expiry. Unlike a
  share URL they are safe to submit for indexing, which is the whole point —
  every "listen without an account" CTA on the site now points at them.

  Deliberately absent, and each for its own reason:

    * The fifteen legal documents (/privacy, /terms, /delete-account and their
      ja, ko, zh-Hans and zh-Hant variants). Every one still carries the
      unreviewed-draft callout and a `<meta name="robots" content="noindex">`.
      They are added here in the same change that clears a document's callout
      and deletes its noindex tag — test/platform/web_robots_sitemap_test.dart
      fails on any other combination.

    * Every Flutter app route EXCEPT /discover. They serve the contentless
      CanvasKit shell and carry `X-Robots-Tag: noindex` from web/_headers.

      /discover and /en/discover are the exception, and they are listed below.
      Since 2026-08-13 they are not contentless: `functions/discover.js`
      server-renders the published catalogue into the document at the edge, so
      the bytes a crawler receives carry every track's title, place, duration,
      formats and cover art. They are the only app routes with crawlable text,
      the only ones without a `noindex`, and the pages this site most wants to
      rank.

      They have no file in `web/`, which every other entry here does. That is
      not an oversight — a Pages Function has no source document, it decorates
      the shell at request time. `test/platform/web_robots_sitemap_test.dart`
      models them as their own set for exactly that reason, and asserts their
      canonical and hreflang tags against the Function's source instead of
      against a file.

    * /share/* . The URL *is* the capability; share pages are noindex by design
      in functions/share/[token].js. They are linked from the marketing pages as
      CTAs, which is intended, but they must never be submitted for indexing.

    * / and /404. `/` is the app shell until the marketing homepage takes it
      over; /404 is the error document.

  NO `lastmod`, AND NONE SHOULD BE INVENTED. File timestamps in this repository
  are checkout times, not edit times, and a wrong lastmod corrupts crawl
  scheduling. If one is wanted, take it from a real revision line in the
  document.

  URLS ARE EXTENSIONLESS. Cloudflare Pages resolves real static files ahead of
  the web/_redirects rules and serves them without the extension — verified
  live: /privacy returns the static legal page, not the app shell.

  THE HOMEPAGE IS `/`. It moved there from /home on 2026-08-12, when the Flutter
  shell moved to /app; /home now 301s here. The document itself is web/home.html,
  which the deploy scripts rename to index.html after the build — `index.html` in
  the repository is the Flutter build template and cannot be used for it.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <url>
    <loc>https://www.sceneryaudio.com/</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/features</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/features"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/features"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/features"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/pricing</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/pricing"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/pricing"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/about</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/about"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/about"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/about"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/listen</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/listen"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/listen"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/listen"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/discover</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/discover"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/discover"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/discover"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/en/</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/en/features</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/features"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/features"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/features"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/en/pricing</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/pricing"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/pricing"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/en/about</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/about"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/about"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/about"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/en/listen</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/listen"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/listen"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/listen"/>
  </url>

  <url>
    <loc>https://www.sceneryaudio.com/en/discover</loc>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.sceneryaudio.com/discover"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.sceneryaudio.com/en/discover"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.sceneryaudio.com/discover"/>
  </url>

</urlset>
