<?xml version="1.0" encoding="UTF-8"?>
<!--
  SITEMAP. Only URLs that render meaningful content to a SIGNED-OUT crawler
  belong here; anything that answers with gate copy registers as a soft 404.

  Measured signed out on production 2026-07-30 (element count under #root,
  body text length, h1) before this list was edited:
    /            272 el  2127 ch  "Rent or Buy? Now you'll know."
    /why         264 el  3119 ch  "The biggest financial decision of your life..."
    /pricing     223 el  1929 ch  "Simple, transparent pricing."
    /customers   272 el  3251 ch  "From lease confusion to confident ownership."
    /comparison  365 el  3151 ch  "Renting vs. buying: the real math."
    /upload       93 el  1245 ch  "Upload Your Lease"            <- ADDED
    /signup       76 el   746 ch  "Create your account"
    /contact     105 el   943 ch  "Get in touch."
    /privacy     134 el  7147 ch  "Privacy Policy"
    /terms       130 el  8623 ch  "Terms of Service"
    /strategy     48 el   640 ch  "Add a lease to see your housing strategy"  <- REMOVED, gate copy

  REMOVED 2026-07-30: /strategy only. 640 characters of gate copy is a soft 404
  to a crawler.

  /comparison: REMOVED AND RESTORED THE SAME DAY, kept on the record because
  the round trip is the useful part. It was removed on the belief that it
  rendered gate copy; measurement showed the opposite and the owner reversed
  the call. The conflation worth remembering: the /comparison ROUTE is not the
  personalised comparison. ComparisonPage is a MarketingPageFrame built on
  static illustrative data (a hardcoded 325,000 / 2,000 scenario), a public
  explainer that out-measures /why on element count and sits between /why and
  /customers on text. The PERSONALISED comparison renders inside /strategy,
  which is why that route gates and this one does not. Re-measured signed out
  on restore: HTTP 200, robots "index, follow", self-referential canonical
  https://leaselens.us/comparison. A page that declares itself indexable and
  canonical to itself, then is withheld from the sitemap, is an internally
  inconsistent instruction to a crawler.

  WHEN THE ZIP LANDING PAGES SHIP: the generator must append every generated
  page to this file. See the generator's row in docs/OPEN-ITEMS.md. Google
  Search Console re-reads this URL on its own schedule and picked it up today,
  so appended entries need no resubmission.

  GENERATION MECHANISM (2026-08-12, converged with ZIP pages Phase A): this
  static file serves /sitemap.xml only until the ZIP generation has run;
  zipPageRoutes then serves the GENERATED sitemap, whose renderSitemap
  carries the full base route set (superset of this file's SPA entries -
  keep the two lists in step), guide URLs via enumerateGuidePaths(build/),
  the city hubs, and the ZIP pages. scripts/generateGuides.mjs additionally
  appends guide URLs to the BUILT copy of this file at build time so the
  pre-generation regime lists them too. /guides enters only once the first
  post exists (an empty index in the sitemap reads as a soft 404).

  ADDED 2026-08-12: /concierge - public marketing page, measured signed out
  by the seoBaseline gate (renders real content, index-follow, self
  canonical); it previously had no sitemap entry and no unique title.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://leaselens.us/concierge</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://leaselens.us/</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://leaselens.us/why</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://leaselens.us/pricing</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://leaselens.us/comparison</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://leaselens.us/upload</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://leaselens.us/signup</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://leaselens.us/customers</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://leaselens.us/contact</loc>
    <changefreq>yearly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://leaselens.us/privacy</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://leaselens.us/terms</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url><loc>https://leaselens.us/guides</loc></url>
  <url><loc>https://leaselens.us/guides/roommate-qualification-math</loc></url>
  <url><loc>https://leaselens.us/guides/crossover-year</loc></url>
  <url><loc>https://leaselens.us/guides/cash-to-close</loc></url>
  <url><loc>https://leaselens.us/guides/introducing-leaselens</loc></url>
</urlset>
