<?xml version="1.0" encoding="UTF-8"?>
<!--
  sitemap.xml for app.kani-math.com — the Kani Math student app.

  Lists only routes that are reachable WITHOUT a profile / onboarding
  cookie. Authenticated routes (home dashboard, level map, drills,
  versus, leaderboard, etc.) are intentionally omitted: their content
  depends on a per-student session and they redirect anonymous
  visitors to /onboarding.

  Routes that live INSIDE the onboarding-gated shell (/placement,
  /subscribe, /support, /virtual-abacus, /shop, /badges, etc.) are
  not listed either — bots get a 302 to /onboarding, which is a
  soft-404 from Google's perspective. The marketing site federates
  the placement component at www.kani-math.com/placement; that
  is the canonical indexable placement URL.

  The in-app blog (/blog/**) is deliberately NOT listed: its posts
  duplicate the same articles on www.kani-math.com/blog, which is the
  canonical, 12-locale, prerendered home for that content. The app
  copies exist for signed-in readers; advertising them to crawlers
  just splits ranking signals across subdomains. (Removed 2026-08-04;
  a per-route rel=canonical to www is the fuller fix if the app ever
  gains SSR.)

  Share-token routes (/h/<token>, /a/<token>, /teacher-arena/**)
  are excluded by robots.txt and are not listed here either — they
  point at content scoped to a single student or class.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://app.kani-math.com/</loc>
    <lastmod>2026-08-04</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>

  <url>
    <loc>https://app.kani-math.com/about</loc>
    <lastmod>2026-08-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>

  <!--
    /profiles and /onboarding were listed here until 2026-08-13 and have
    been removed.

    This app is client-rendered with no SSR, so every URL on this host
    serves a zero-word JS shell to a crawler — a fetch of all four listed
    URLs returned words=0 for each. Google treats an indexable URL with no
    server-rendered content as a soft-404, and submitting one is a request
    to be judged on an empty page.

    For / and /about that is at least a bet worth keeping: they are the
    host's entity surfaces, someone can plausibly search the brand and
    want the app itself, and they become real the day this app gains SSR.
    /profiles and /onboarding are neither — they are functional screens
    behind a device-local profile, they answer no query anyone types, and
    /onboarding in particular is the redirect TARGET for anonymous
    visitors, which makes it the least useful URL on the host to have
    competing in search.

    The informational queries all belong to www.kani-math.com, which is
    prerendered in 16 locales. Re-add these two only alongside SSR.
  -->
</urlset>
