<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!-- ── App Root ── -->
  <url>
    <loc>https://grammarxp.com/</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
    <lastmod>2026-05-19</lastmod>
  </url>

  <!-- ── Blog ── -->
  <url>
    <loc>https://grammarxp.com/blog/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
    <lastmod>2026-05-19</lastmod>
  </url>
  <url>
    <loc>https://grammarxp.com/blog/present-perfect-simple-past/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <lastmod>2026-04-11</lastmod>
  </url>
  <url>
    <loc>https://grammarxp.com/blog/if-saetze-typ-1-2-3/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <lastmod>2026-04-11</lastmod>
  </url>

  <!-- ── Legal ── -->
  <url>
    <loc>https://grammarxp.com/impressum/</loc>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
    <lastmod>2026-05-19</lastmod>
  </url>
  <url>
    <loc>https://grammarxp.com/datenschutz/</loc>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
    <lastmod>2026-05-19</lastmod>
  </url>
  <url>
    <loc>https://grammarxp.com/agb/</loc>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
    <lastmod>2026-05-19</lastmod>
  </url>

  <!--
    NOTE: Hash-mode SPA routes (#/phase/..., #/exercise/...) are intentionally
    NOT listed here. Google strips URL fragments before crawling, so all hash
    routes resolve to https://grammarxp.com/ from Google's perspective.
    The app is indexed as a single JS-rendered page. Static blog posts above
    are the primary SEO surface for long-tail grammar keywords.
  -->

</urlset>
