<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">

  <!-- ─── Core public pages ────────────────────────────────── -->
  <url>
    <loc>https://ocentoken.com/</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/pricing</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/explorer</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/live-data</loc>
    <lastmod>2026-09-01</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://ocentoken.com/community</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/academy</loc>
    <lastmod>2026-06-09</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <!-- Starter-article deep-links so search engines can land directly on the
       expanded article (each <details> uses `id` for anchor navigation). -->
  <url>
    <loc>https://ocentoken.com/academy#how-spl-tokens-work</loc>
    <lastmod>2026-06-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/academy#authority-revocation</loc>
    <lastmod>2026-06-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/academy#security-basics</loc>
    <lastmod>2026-06-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>

  <!-- ─── Discovery / leaderboards ─────────────────────────── -->
  <url>
    <loc>https://ocentoken.com/upcoming-launches</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/leaderboard</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
  </url>

  <!-- ─── AI tools (public) ────────────────────────────────── -->

  <url>
    <loc>https://ocentoken.com/wallet-check</loc>
    <lastmod>2026-07-04</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/time-machine</loc>
    <lastmod>2026-07-04</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>

  <url>
    <loc>https://ocentoken.com/contract-analyzer</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/text-analyzer</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/ai-status</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/ai-track-record</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>

  <!-- ─── Ocen Trust suite (public) ────────────────────────── -->
  <!-- Seven routes were listed here and removed on 2026-09-03:
       /graduation-intelligence, /ocengenome, /ocenrank, /alerts, /vault,
       /ocenproof and /ocenbond.

       All seven are wrapped in App.tsx's `gated(...)` helper, which renders
       <FeatureUnavailable> unless the `deferredFeatures` flag is on. That flag
       is `default: false` (src/config/featureFlags.ts:73) and is not set in
       production, and FeatureUnavailable emits <meta name="robots"
       content="noindex">. So the sitemap was asking crawlers to index seven
       pages that then tell those same crawlers not to index them —
       contradicting ourselves in the two files search engines read first.

       /ocenpulse stays: it is a real public page, routed ungated.

       Re-add a URL here when its feature actually ships (flip the flag and the
       page stops being noindex). The durable fix is generating this file from
       the same flag state the router reads, which needs the route manifest. -->
  <url>
    <loc>https://ocentoken.com/ocenpulse</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.6</priority>
  </url>

  <!-- ─── Other tools (public) ─────────────────────────────── -->
  <url>
    <loc>https://ocentoken.com/social-analytics</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>

  <url>
    <loc>https://ocentoken.com/memoforge</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>

  <!-- ─── Security & trust ─────────────────────────────────── -->
  <url>
    <loc>https://ocentoken.com/security</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/security-audits</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/security/incidents</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/security/bug-bounty</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/trust/ai-consensus</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/transparency</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/safety-report</loc>
    <lastmod>2026-06-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/hall-of-fame</loc>
    <lastmod>2026-06-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/transparency/feed</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/moderation</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/verification-status</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
  </url>

  <!-- ─── Operational / informational ──────────────────────── -->
  <url>
    <loc>https://ocentoken.com/status</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>hourly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/changelog</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/roadmap</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/careers</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/blog</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/contact</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>

  <!-- ─── Legal ────────────────────────────────────────────── -->
  <url>
    <loc>https://ocentoken.com/terms</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/privacy</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/risk-disclaimers</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <!-- ADDED 2026-08-27. Both are public, ungated, un-geoblocked, and both
       already carry hand-written FCA-safe title + description in
       scripts/prerender-meta.mjs — baked into static HTML at postbuild and
       verified live. They were the only two routes in that list never
       submitted here: meta written for a crawl nobody asked for. -->
  <url>
    <loc>https://ocentoken.com/rug-reality</loc>
    <lastmod>2026-08-27</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://ocentoken.com/content-policy</loc>
    <lastmod>2026-08-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>

  <!--
    Intentionally NOT in sitemap (auth-gated, admin-gated, or noindex):
    /auth, /create, /dashboard, /analytics, /portfolio, /referrals,
    /profile, /settings, /vesting-manager, /oracle, /admin/**,
    /super-admin, /command-center, /security-console, /wallet-intelligence,
    /treasury, /token-creation. These pages require authentication or
    return HTTP 4xx without it and would dilute crawl budget.
  -->

  <!-- ─────────────────────────────────────────────────────────────────────
       REMOVED 2026-08-27 — 22 URLs a crawler cannot fetch.

       A sitemap is a request to crawl. These URLs could not answer it.

       THREE WERE DELETED PRODUCTS, still submitted to Google long after the
       routes were removed: /prophecy, /copy-trading, /liquidity-manager.
       They fall through to the SPA catch-all, which answers HTTP 200 with the
       home page — a soft-404, and the worst kind, because nothing reports it.
       /prophecy is the one that matters: it was deleted outright (see the
       comment in src/App.tsx) because staking SOL on whether a token rugs is
       a bet on "the likelihood of anything occurring" under Gambling Act 2005
       s.9, and running it unlicensed is a criminal offence under s.33. The
       page was gone; this file went on telling search engines it existed.

       NINETEEN ARE GEO-BLOCKED. middleware.ts hard-blocks US, GB, CN, IR, KP,
       RU, SY and CU on the regulated surfaces, and every major crawler
       originates in a hard-blocked country — Googlebot and Bingbot from the
       US, Yandex from RU. Measured 2026-08-27 from a US address:

         GET /audit          -> 307 /region-blocked?from=%2Faudit&cc=US
         GET /marketplace    -> 307 /region-blocked?from=%2Fmarketplace&cc=US
         GET /trading        -> 307 /region-blocked?from=%2Ftrading&cc=US
         GET /whale-tracker  -> 307 /region-blocked?from=%2Fwhale-tracker&cc=US

       There is exactly one way to make them crawlable, and it is not
       available: letting a crawler user-agent past the geoblock. A UA string
       is client-controlled, so that is not an SEO tweak — it is a hole in a
       compliance control, openable by anyone who types it into curl. These
       pages stay unindexable while US and GB are hard-blocked. That is a
       consequence of the jurisdiction posture, not a defect in this file.

       What this file can do is stop asking for a crawl that always 307s.
       check-sitemap-integrity.mjs fails the build if one comes back.
       ───────────────────────────────────────────────────────────────────── -->

</urlset>
