<?xml version="1.0" encoding="UTF-8"?>
<!--
  Every page a stranger is meant to find, and nothing else.

  This file exists because /sitemap.xml was answering 200 with the app's
  index.html: there is no file at that path, so the single-page fallback served
  the HTML shell, and a crawler asking for XML would have been handed a web
  page that says it is a sitemap by virtue of its address alone.

  Not listed, on purpose: /signin and /signup, which are doors rather than
  reading; /ops and /ops/quote, which answer 404 to everyone but the operator;
  and every address with an id in it (/v, /t, /o, /c, /capture), because those
  are somebody's proceeding and a search result is the last place they belong.

  Also not listed: /testers, which is a door and an unlisted one. robots.txt
  disallows it outright, because its whole guard is that the address is not
  published.

  robots.txt disallowed everything until 2026-08-07, while the product was in
  private testing, so submitting this to Search Console was a launch-day step.
  `CS_CRAWLABLE=1` brought that forward: the sign-up gate is still on, the crawl
  rules are the launched ones, and this file is live. See server/index.ts.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://captionwire.com/</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://captionwire.com/pricing</loc>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <!-- One address per guide since 2026-08-04, when the seven fold-outs on
       /guides became seven pages. This is the half of that change a crawler can
       see: before it, "how do I send Case CATalyst realtime to a website" had
       nothing to match but an index. The slugs are in
       web/src/pages/guides/registry.tsx and must not drift from these. -->
  <url>
    <loc>https://captionwire.com/guides/case-catalyst</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/digitalcat</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/eclipse</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/job-templates</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/relief-writers</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/offline-mode</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/live-stream</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://captionwire.com/guides/zoom</loc>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <!-- Added 2026-08-03. The desktop app had a page, a build to download and no
       way in: not the app bar, not the home footer, not this file. Somebody
       searching for offline captioning software is the reader it is for, and
       they could not have found it. -->
  <url>
    <loc>https://captionwire.com/download</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://captionwire.com/privacy</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://captionwire.com/terms</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
</urlset>
