<?xml version="1.0" encoding="UTF-8"?>
<!-- The legal routes were left out of here until 29 Aug 2026, for a reason
     that has since been fixed rather than merely reconsidered.

     They are SPA routes: the not_found_handling fallback serves index.html for
     all three, and nothing was rewriting the document's <head>, so each one
     returned a page whose <link rel="canonical"> pointed at "/". Listing them
     asked Google to index three pages that each declared they were really the
     home page -- a sitemap contradicting a canonical, which Google resolves by
     believing the canonical and ignoring the sitemap entry.

     renderLegal() now sets the title and the canonical per page, so each route
     declares itself. The sitemap and the pages finally agree about what they
     are, and the Impressum is discoverable rather than merely reachable, which
     is the better answer to § 5 DDG.

     Keep lastmod honest: one that moves without the content moving is a signal
     Google learns to discount, and then it is worth nothing on the day the
     page really does change. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://gradematch.org/</loc>
    <lastmod>2026-08-29</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <!-- A real static page with its own <head> and a canonical pointing at
       itself. Unchanged since 10 Aug, so its lastmod has not moved. -->
  <url>
    <loc>https://gradematch.org/how-it-works/</loc>
    <lastmod>2026-08-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- The three legal routes. Low priority and rarely changing: they are here
       to be findable, not to compete for attention with the product. The
       29 Aug lastmod is real -- the privacy policy gained a section on signing
       in with a Google account and the terms clarified who the no-training
       promise binds. /nutzungsbedingungen is an alias for /agb and is
       deliberately absent, since /agb is the canonical of the pair. -->
  <url>
    <loc>https://gradematch.org/impressum</loc>
    <lastmod>2026-08-09</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://gradematch.org/datenschutz</loc>
    <lastmod>2026-08-29</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://gradematch.org/agb</loc>
    <lastmod>2026-08-29</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- /team/ was listed here until 17 Aug 2026. It is withdrawn rather than
       finished, and its source is in drafts/team/ -- so the entry comes out
       with it. A sitemap that advertises a URL returning 404 is worse than one
       that omits a page: it is the one signal Search Console reads as the site
       being broken rather than merely incomplete. Put both back together. -->
</urlset>
