<?xml version="1.0" encoding="UTF-8"?>
<!-- ⚠️ List CANONICAL, 200-returning urls ONLY. Cloudflare Pages 308s /foo.html -> /foo, so the
     .html forms are REDIRECTS and must never appear here (a sitemap of redirects is a documented
     error). Declaring /terms.html is exactly how Google ended up indexing BOTH /terms and
     /terms.html as separate pages. The .html urls stay working via the 308 for the external
     references (Chrome Web Store listing, Stripe checkout) — they just aren't canonical. See #667.
     ⚠️ No hand-written lastmod dates here: deploy.sh §1a stamps them into the STAGED copy from
     each page's git commit date. A hand-added date would go stale and teach Google to distrust
     it — and a literal lastmod TAG in this comment would break §1a's stamped-count assertion. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://jobshifu.com/</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url><loc>https://jobshifu.com/about</loc>
    <lastmod>2026-09-14</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url>
  <!-- Tier-A content pages. These carry the long-tail question queries the
       one-pager cannot: one page can only win one query. -->
  <url>
    <loc>https://jobshifu.com/calibration</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/autofill</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <!-- /fresh is the Tier-A page for the fresh / employer-direct / "is this posting real"
       cluster (docs/marketing-fresh-jobs-direction.md). Unlike /tailoring it has no organic
       sibling, so it is indexed and doubles as the future Campaign E landing page. -->
  <url>
    <loc>https://jobshifu.com/fresh</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/is-this-job-still-open</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/resume-tailoring</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- ⚠️ /tailoring (LP-B) is deliberately ABSENT. It is a paid-ad landing page for Google
       Search Campaign B and argues the same query cluster as /resume-tailoring, so it ships
       `noindex, follow` rather than competing with the Tier-A page for one query. /ats-truth
       below is the opposite case: it is the flagship Tier-A asset of that build and is meant
       to keep earning after the ad spend stops. Since 2026-09-03 it is the "Why you're not
       hearing back" pain page and absorbed its ads twin /ats-check (now a 301 here).
       ⚠️ /fit-score is deliberately ABSENT since the same change: the Fit beat was folded
       into /fresh as its second section and the url 301s there. -->
  <url>
    <loc>https://jobshifu.com/ats-truth</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/cover-letters</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/interview-prep</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/job-tracker</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/visa-sponsorship</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/extension</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- Comparison pages (blog program Play A). Prices on them rot: each carries an
       "as of" date in copy and gets a quarterly re-verify. -->
  <url>
    <loc>https://jobshifu.com/jobshifu-vs-hiringcafe</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/jobshifu-vs-jobright</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/faq</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/pricing</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/privacy</loc>
    <lastmod>2026-09-10</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/terms</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- /fraudulent-postings is a POLICY page, listed for the same reason /privacy and /terms
       are: it has to be findable, and it is linked from the footer of every page rather than
       being a sitemap-only orphan. Ontario's ESA requires the policy and its reporting
       mechanism to be posted where users are likely to see them; the footer slot is that,
       and this entry is how a crawler finds the page. -->
  <url>
    <loc>https://jobshifu.com/fraudulent-postings</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- ⚠️ /bot is deliberately ABSENT, removed 2026-08-07. It is the crawler-information
       page for JobShifuBot, and its audience is a webmaster reading their own access log —
       who arrives via the `+https://jobshifu.com/bot` in FEED_UA (packages/crawler-providers/
       src/util.ts), not via a search result. Listing it here made it a sitemap-only ORPHAN:
       255 words, zero inbound links from any page on the site, which is precisely the shape
       Google leaves in "Discovered - currently not indexed" forever (it sat there from
       2026-08-05). The page stays live and crawlable — robots.txt still allows it and it
       still 200s; it just stops asking for index budget it was never going to win.
       ⛔ Do not "fix" the GSC report by re-adding it. Re-adding recreates the orphan.
       ⚠️ Removing a url is safe for deploy.sh §1a only because its count assertion is
       DERIVED by grepping this file, not hardcoded. Verified by replaying §1a against
       this file: stamped=16 prestamped=5 locs=21 mods=21, assertion passes.
       ⛔ THE COMMENT ITSELF IS PARSED. §1a counts loc and lastmod tags with grep, which
       does not know what a comment is — so spelling either tag literally in prose here
       ABORTS EVERY DEPLOY. The existing warning at the top of this file says that about
       lastmod; it is equally true of loc, and this comment tripped exactly that while
       being written (a loc tag quoted inside a code span pushed the count 21 -> 22 and
       §1a aborted). Describe the tags in words; never spell them. -->
  <!-- ⚠️ /admin is likewise absent and must stay absent: it is held out of the index by
       X-Robots-Tag + a meta robots tag (see robots.txt), which a sitemap entry would fight. -->
  <!-- BEGIN research (generated by scripts/research/build.ts: do not hand-edit) -->
  <url>
    <loc>https://jobshifu.com/research</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/research/relisting</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/research/how-long-jobs-stay-open</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/research/experience-required</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/research/pay-disclosure</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/research/visa-sponsorship</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <!-- END research -->
  <!-- BEGIN blog (generated by scripts/build-blog.mjs: do not hand-edit) -->
  <url>
    <loc>https://jobshifu.com/blog</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/is-a-three-week-old-job-worth-applying-to</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/claude-resume-tailoring</loc>
    <lastmod>2026-09-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/one-click-resume-tailoring</loc>
    <lastmod>2026-08-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/resume-tailoring-tools-benchmark</loc>
    <lastmod>2026-08-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/tailor-resume-to-job-description-by-hand</loc>
    <lastmod>2026-08-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/tailor-resume-to-job-description-with-ai-free</loc>
    <lastmod>2026-08-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/we-analyzed-500000-job-descriptions</loc>
    <lastmod>2026-08-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/h1b-sponsors-hiring-now</loc>
    <lastmod>2026-08-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/is-jobshifu-legit</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/is-jobshifu-worth-it</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jobshifu.com/blog/first-48-hours</loc>
    <lastmod>2026-08-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <!-- END blog -->
</urlset>
