<?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, 45-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>

  <!--
    /profiles and /onboarding were listed here until 2026-08-13, and
    /about until 2026-10-15. All three 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 URLs
    once listed 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 / that is at least a bet worth keeping: it is the host's entity
    surface, someone can plausibly search the brand and want the app
    itself, and it becomes real the day this app gains SSR. /about made
    the same bet and lost it. The 2026-08-25 index review found it an
    81-word page that Google had not indexed, and Search Console still
    filed it as an alternate of / on 2026-10-15; www.kani-math.com/aboutus
    is the about page Google has indexed. /profiles and /onboarding never
    had a case: 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 45 locales. Re-add any of these only alongside SSR.
  -->
</urlset>
