<?xml version="1.0" encoding="UTF-8"?>
<!--
  Static rather than generated: the public surface of this site is a fixed set
  of pages that changes only when a route is added. A build-time generator
  would be more machinery than the problem needs, and Vercel serves files from
  public/ ahead of the catch-all rewrite in vercel.json.

  ⚠ THIS FILE IS THE ONE THAT IS ACTUALLY SERVED.
  There is ALSO a route at src/routes/sitemap[.]xml.ts that builds a sitemap in
  code. Because public/ wins on Vercel (and in vite dev), that route never
  reaches a crawler — editing it alone changes nothing. Keep the two in step, or
  delete the route; what must not happen is somebody adding a page there and
  believing it was submitted.

  Only indexable pages belong here. Admin, portal, and tokenised customer URLs
  are excluded — listing a page in the sitemap while disallowing it in
  robots.txt sends Google a contradiction and is reported as an error in
  Search Console.

  When adding a route: add it here AND confirm its head() uses seo() from
  lib/seo.ts, or it will be crawled with no canonical and no social preview.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <url>
    <loc>https://binasendiri.com.my/</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>

  <!-- The conversion page. Highest priority after the homepage because it is
       the one that should rank for transactional queries.

       Note for anyone auditing this against robots.txt: "Disallow: /apply?*"
       used to sit in robots.txt and was removed, because it was keeping Google
       off the single page carrying this site's money keyword. The duplicate-URL
       problem it was aimed at is now solved in the page's own head() — the
       funnel-step variants carry noindex, the bare /apply does not. -->
  <url>
    <loc>https://binasendiri.com.my/apply</loc>
    <lastmod>2026-08-28</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>

  <!-- The two sample documents.
       These sit at funnel priority, not brochure priority, because they are the
       only pages where a visitor can SEE the deliverable before paying — which
       is the objection that costs this site the most sales. Neither renders a
       real customer (see lib/contoh-sample.ts), which is exactly why they may
       be indexed while /r/ and /s/ never can be. -->
  <url>
    <loc>https://binasendiri.com.my/contoh/laporan</loc>
    <lastmod>2026-08-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>

  <url>
    <loc>https://binasendiri.com.my/contoh/ringkasan</loc>
    <lastmod>2026-08-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>

  <!-- Geographic landing page. Lower national volume than /apply but far
       higher intent, and close to uncontested. -->
  <url>
    <loc>https://binasendiri.com.my/kelantan</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>

  <!-- The house-plan catalogue. Listed from 2026-08-28, when the route's
       `beforeLoad` redirect and the nav entry's `locked` flag were both lifted.
       All three move together: a URL listed here that redirects back to "/"
       burns crawl budget and reports as a soft-404 in Search Console. -->
  <url>
    <loc>https://binasendiri.com.my/rumah</loc>
    <lastmod>2026-08-28</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>

  <url>
    <loc>https://binasendiri.com.my/panel</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>

  <url>
    <loc>https://binasendiri.com.my/about</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>

  <url>
    <loc>https://binasendiri.com.my/register</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.4</priority>
  </url>

  <!-- Policy pages carry little ranking value on their own but their absence
       is a trust signal Google reads negatively for anything taking payment. -->
  <url>
    <loc>https://binasendiri.com.my/privacy</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>

  <url>
    <loc>https://binasendiri.com.my/terms</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>

  <url>
    <loc>https://binasendiri.com.my/refund</loc>
    <lastmod>2026-08-12</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>

</urlset>
