<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://beatverse.io/</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://beatverse.io/?lang=en"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://beatverse.io/?lang=ru"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://beatverse.io/?lang=de"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://beatverse.io/?lang=fr"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://beatverse.io/?lang=es"/>
    <xhtml:link rel="alternate" hreflang="uk" href="https://beatverse.io/?lang=uk"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://beatverse.io/"/>
  </url>
  <url>
    <loc>https://beatverse.io/register</loc>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://beatverse.io/login</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://beatverse.io/forgot-password</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://beatverse.io/ideas</loc>
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
  </url>
  <!--
    Detail pages (/track/:id, /album/:id, /user/:slug, /event/:id, /podcast/:id,
    /education/school/:id, /education/course/:id) sit behind AuthGuard, so they
    are not crawlable directly. Social-media crawlers (Facebook, Twitter,
    Telegram) use the backend OG handler at /share/{track,profile,album,playlist}/:id
    instead — those URLs are linked from BvShareDialog and indexed transitively.

    To expand the sitemap with dynamic IDs, add a backend /sitemap.xml endpoint
    that enumerates published tracks/albums/profiles, then list it from a
    sitemap index here.
  -->
</urlset>
