<?xml version="1.0" encoding="UTF-8"?>
<!--
  EternitySong sitemap — created 2026-08-25.

  INDEXABLE PUBLIC PAGES ONLY. Deliberately excluded:
    /checkout, /checkout/pay, /thank-you  — transactional, no search value, and
                                            indexing a thank-you page is how
                                            conversion tracking gets polluted.
    /song/*, /q/*, /v/*                   — private customer songs. They already
                                            send noindex,nofollow; listing them
                                            here would be the exact opposite of
                                            the intent.
    /order/*                              — per-customer.
    /keepsakes                            — post-purchase upsell surface; only
                                            meaningful once you own a song.
    /keepforever, /collage                — legacy, superseded by /keepsakes and
                                            slated for removal (see App.tsx).
    /admin/*                              — also disallowed in robots.txt.

  Every page is declared with its EN/ES pair via xhtml:link alternates. This is
  the correct way to tell Google the two locales are translations of one page
  rather than duplicate content — index.html only carries hreflang tags for the
  homepage, so without this the other five pairs were undeclared.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <!-- Homepage -->
  <url>
    <loc>https://eternitysong.com/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/es</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>

  <!-- Start the song (the quiz — main funnel entry) -->
  <url>
    <loc>https://eternitysong.com/create</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/create"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/create"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/create"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/es/create</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/create"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/create"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/create"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>

  <!-- NOTE: /faq is deliberately absent. The route still exists but only
       redirects to /#faq (a client-side React Router redirect, NOT an HTTP 301
       or 302 — the host serves the same SPA shell for every path). The FAQ is a
       homepage section and the FAQPage structured data lives on the homepage,
       so there is no distinct page here to index. Listing a redirect in a
       sitemap points Google at a URL that immediately sends it elsewhere.

       If /faq ever needs to be a real page again, it needs its own FAQPage
       schema and questions the homepage does NOT have — otherwise it is
       duplicate content, which is exactly what it was before 2026-08-25. -->

  <!-- Contact -->
  <url>
    <loc>https://eternitysong.com/contact</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/contact"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/contact"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/contact"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/es/contact</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/contact"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/contact"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/contact"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.4</priority>
  </url>

  <!-- Legal — low priority, but ad reviewers and Google both check they exist -->
  <url>
    <loc>https://eternitysong.com/terms</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/terms"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/terms"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/terms"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/es/terms</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/terms"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/terms"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/terms"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/privacy</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/privacy"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/privacy"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/privacy"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/es/privacy</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/privacy"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/privacy"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/privacy"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/refund-policy</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/refund-policy"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/refund-policy"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/refund-policy"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://eternitysong.com/es/refund-policy</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://eternitysong.com/refund-policy"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://eternitysong.com/es/refund-policy"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://eternitysong.com/refund-policy"/>
    <lastmod>2026-08-25</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
  </url>

</urlset>
