<?xml version="1.0" encoding="UTF-8"?>
<!--
  Sitemap for smartmigrate.eu — served from the site root as /sitemap.xml
  (files in public/ are copied to the build root by Vite, so nginx serves this
  as a real file and the SPA fallback never sees it).

  ONLY the public pages belong here. The exam material — /chapters, /practice,
  /vocabulary, /search — is behind the login, so listing it would ask Google to
  crawl pages that answer with the login screen: a set of duplicate, empty
  results that dilute the pages that do have content. /login itself is a form,
  not a destination, and /admin/ is the operator dashboard.

  lastmod is a real editorial date, not a build timestamp: it should be updated
  when the page's copy actually changes, and left alone otherwise. A file that
  claims every page changed today on every deploy teaches the crawler to ignore
  the field.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!-- About us — the front door. What this is and who runs it. -->
  <url>
    <loc>https://smartmigrate.eu/</loc>
    <lastmod>2026-08-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>

  <!-- About the exam — what the cultural knowledge exam involves. -->
  <url>
    <loc>https://smartmigrate.eu/exam</loc>
    <lastmod>2026-08-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>

  <!-- Permanent residency guide — the procedure, step by step. -->
  <url>
    <loc>https://smartmigrate.eu/residency</loc>
    <lastmod>2026-08-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>

  <!-- Image and content credits. Public because the CC licences require the
       attribution to be reachable. -->
  <url>
    <loc>https://smartmigrate.eu/sources</loc>
    <lastmod>2026-08-06</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>

</urlset>
