<?xml version="1.0" encoding="UTF-8"?>
<!--
  Hand-maintained. There is no build step, so a new top-level page is only
  discoverable by Google if it is added here by hand - adding it to
  js/util/engines.js and the footer is not enough.

  Only real documents belong here. Every engine's sub-page (#leaderboard,
  #ticker/NVDA, ...) is a fragment, which is never a distinct URL to a crawler,
  so this list is the site's entire indexable surface.

  /stocks-free is GONE as of 2026-07-21, along with the free tier it served.
  Nothing gated it - there are no accounts and no paywall - so it only ever
  rendered a delayed, truncated copy of /stocks. Keeping it out of this file was
  never enough protection either: a sitemap is a hint, not a gate, and the page
  carried a self-referential canonical tag under `robots.txt: Allow: /`, so it
  was fully indexable as a competing thin-content duplicate.
  /stocks-free and /public now both 301 to /stocks (see vercel.json).
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://getbradscore.com/</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://getbradscore.com/stocks</loc>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://getbradscore.com/sbs</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://getbradscore.com/directional</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://getbradscore.com/crypto</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://getbradscore.com/contact</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
</urlset>
