<?xml version="1.0" encoding="UTF-8"?>
<!--
  Sitemap for https://scholarshipscafe.com (SCafe-v2). Referenced by public/robots.txt.

  HAND-MAINTAINED, and it has to be: this is a client-rendered SPA, so there is no server that
  could enumerate routes at request time, and the route table lives in src/router.tsx as JSX. When
  a PUBLIC route is added there, add it here — nothing in CI can tell that this list went stale.

  What CI DOES check (src/lib/robots.test.ts): no URL listed below is blocked by a rule in
  robots.txt. Those rules are prefixes, so adding a page here whose path starts with a gated route
  (`Disallow: /cover` vs /cover-letters) would hand Search Console a "blocked by robots.txt" error
  on our own sitemap entry. That test fails instead.

  WHAT IS IN IT: every public route a cold visitor can reach without Auth0, which is exactly the
  PUBLIC_ROUTES list in src/data/landing/links.test.ts minus the exclusions below.

  WHAT IS DELIBERATELY OUT:
    * /accelerator-program — it sets `<meta name="robots" content="noindex">` while the programme
      is pre-launch (see the TO GO LIVE note in pages/AcceleratorProgram.tsx). Listing a page here
      and telling crawlers to ignore it in the same breath is a contradiction, not belt-and-braces.
    * /login — a sign-in form has nothing to rank for, and it is the destination of every auth CTA
      on the site, so it is reachable without being advertised.
    * /blog-detail/:slug — dynamic, one URL per migrated post. These need a GENERATED sitemap built
      from public.blogs (the API already lists them at GET /blogs); a hand-typed list would be
      stale on the first new post. Tracked as follow-up work, not an omission by accident.
    * /admission-support, /blog, /about, /about-us — redirects. A sitemap should carry the
      destination, which it does, not the hop.
    * Everything under ProtectedRoute, which robots.txt also disallows.

  NO <lastmod>, <changefreq> OR <priority>. A <lastmod> that is not maintained is worse than none —
  crawlers down-weight a feed whose dates do not move with the content — and Google has stated it
  ignores the other two outright. Add <lastmod> when it can be generated at build time.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- Landing -->
  <url><loc>https://scholarshipscafe.com/</loc></url>

  <!-- Services hub + the four ported detail pages. /admission-support redirects here. -->
  <url><loc>https://scholarshipscafe.com/services</loc></url>
  <url><loc>https://scholarshipscafe.com/university-admission-counselling</loc></url>
  <url><loc>https://scholarshipscafe.com/graduate-admissions-consulting</loc></url>
  <url><loc>https://scholarshipscafe.com/essay-writing-help</loc></url>
  <url><loc>https://scholarshipscafe.com/research-and-training-experience</loc></url>

  <!-- Resources hub + the six writing guides -->
  <url><loc>https://scholarshipscafe.com/resources</loc></url>
  <url><loc>https://scholarshipscafe.com/academic-resumes</loc></url>
  <url><loc>https://scholarshipscafe.com/statement-of-purpose</loc></url>
  <url><loc>https://scholarshipscafe.com/cover-letters</loc></url>
  <url><loc>https://scholarshipscafe.com/letter-of-recommendations</loc></url>
  <url><loc>https://scholarshipscafe.com/diversity-statement</loc></url>
  <url><loc>https://scholarshipscafe.com/teaching-statement</loc></url>

  <!-- Blog index. The individual posts are not listed — see the note above. -->
  <url><loc>https://scholarshipscafe.com/blogs</loc></url>

  <!-- Company -->
  <url><loc>https://scholarshipscafe.com/who-we-are</loc></url>
  <url><loc>https://scholarshipscafe.com/testimonials</loc></url>
  <url><loc>https://scholarshipscafe.com/speak-with-an-advisor</loc></url>
  <url><loc>https://scholarshipscafe.com/contact-us</loc></url>

  <!-- Legal. `term-and-conditions` is the legacy path, kept so indexed URLs keep resolving. -->
  <url><loc>https://scholarshipscafe.com/privacy-policy</loc></url>
  <url><loc>https://scholarshipscafe.com/term-and-conditions</loc></url>
</urlset>
