<?xml version="1.0" encoding="UTF-8"?>
<!--
  Build 34: sitemap normalised to canonical URLs (legal pages now sit
  under /legal/{name}/ with trailing slash; cookies added). Every entry
  carries an explicit lastmod so generative-search crawlers can prune.

  AEO/GEO foundation (2026-06-24): completed the sitemap so every indexable,
  self-canonical public page is discoverable. Added the 8 newer blog posts,
  the case-studies hub + 4 studies, what-is-oddly, audit, add-ons,
  pricing/compare, integrations/slack, and the 4 docs pages. Removed
  /login/ and /early-access/ (both carry noindex, so listing them sent a
  contradictory signal). Each loc equals the page's own rel=canonical. A
  unit test now guards that no noindex page is listed and that every blog
  post and case study is present, so the sitemap cannot drift again.

  AEO indexing spine follow-up (2026-07-11): added /reports/state-of-shopify-2026-q3
  and /developers, both live indexable pages the sitemap missed; the coverage
  test now walks /reports so future report pages cannot drift out.

  Arc C live corpus substrate (2026-08-05): bumped lastmod on the three
  comparison cornerstones (triple-whale, polar, trueprofit) because their
  content actually changed, each gaining a live corpus substrate block. No
  other lastmod moved. A lastmod is a claim to a crawler that the page
  changed, so bumping a date on an untouched page is a lie to the crawler
  and costs exactly the crawl trust the sitemap exists to earn.

  Top-level page recovery (2026-08-27): added /site-intelligence and
  /maturity/, two indexable, self-canonical pages that were never listed.
  Both carry full JSON-LD and their own rel=canonical, and neither is linked
  from the primary nav, so the sitemap was their only route to a crawler or
  an answer engine: an indexable orphan absent from the sitemap is invisible
  to exactly the citation surface this file exists to feed. Their lastmod is
  the date each file last changed. The completeness test now walks the
  top-level marketing pages too, so a self-canonical indexable page can no
  longer drift out of the sitemap the way these two did.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://myoddly.com/</loc>
    <lastmod>2026-06-12</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://myoddly.com/how-oddly-thinks</loc>
    <lastmod>2026-05-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/how-it-works</loc>
    <lastmod>2026-06-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/why-oddly</loc>
    <lastmod>2026-06-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/single-store-tools</loc>
    <lastmod>2026-06-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- Slash-less from 2026-09-22. /pricing is now a Pages Function serving the
       v4 pricing surface, whose own rel=canonical is the slash-less form, and
       a sitemap that disagrees with the page's canonical is the contradictory
       signal this file exists to avoid. The slash form 308s here. -->
  <url>
    <loc>https://myoddly.com/pricing</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/resources/</loc>
    <lastmod>2026-06-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/changelog/</loc>
    <lastmod>2026-05-20</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://myoddly.com/faq</loc>
    <lastmod>2026-06-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://myoddly.com/proof/</loc>
    <lastmod>2026-05-22</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://myoddly.com/alignment/</loc>
    <lastmod>2026-08-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://myoddly.com/build/</loc>
    <lastmod>2026-06-07</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://myoddly.com/estate</loc>
    <lastmod>2026-08-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://myoddly.com/legal/privacy/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://myoddly.com/legal/terms/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://myoddly.com/legal/dpa/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://myoddly.com/legal/security/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://myoddly.com/legal/cookies/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://myoddly.com/legal/government-requests/</loc>
    <lastmod>2026-07-13</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>

  <url>
    <loc>https://myoddly.com/blog/dashboards-copilots-agents-consistency-test/</loc>
    <lastmod>2026-07-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/deterministic-engine-vs-language-models/</loc>
    <lastmod>2026-07-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/multi-brand-shopify-operator-lessons/</loc>
    <lastmod>2026-05-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/marketing-ops-missing-category/</loc>
    <lastmod>2026-05-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/true-roas-vs-reported-roas/</loc>
    <lastmod>2026-05-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/shopify-out-of-stock-ad-waste/</loc>
    <lastmod>2026-05-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/hidden-cost-not-monitoring-search-terms/</loc>
    <lastmod>2026-04-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/best-marketing-intelligence-shopify-2026/</loc>
    <lastmod>2026-04-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/google-ads-conversion-tracking-broken/</loc>
    <lastmod>2026-04-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/stop-wasting-ad-spend-out-of-stock/</loc>
    <lastmod>2026-04-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/oddly-vs-kepla/</loc>
    <lastmod>2026-04-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/the-14-day-rule/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/why-your-meta-roas-is-lying/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/cross-channel-reallocation/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/duplicate-purpose-ads-meta-google/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/cohort-benchmarking-without-privacy-creep/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/content-gaps-sg-smb-diagnostic/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/what-oddly-catches-in-its-own-ad-spend/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/why-oddly-runs-oddly/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>

  <url>
    <loc>https://myoddly.com/docs/</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://myoddly.com/docs/getting-started.html</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://myoddly.com/docs/alerts.html</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://myoddly.com/docs/digests.html</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://myoddly.com/docs/faq.html</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://myoddly.com/blog/feed.xml</loc>
    <lastmod>2026-05-05</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>

  <url>
    <loc>https://myoddly.com/platform</loc>
    <lastmod>2026-05-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/platform/verifier</loc>
    <lastmod>2026-05-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/platform/benchmarks</loc>
    <lastmod>2026-05-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://myoddly.com/platform/playbooks</loc>
    <lastmod>2026-05-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>

  <url>
    <loc>https://myoddly.com/comparisons</loc>
    <lastmod>2026-06-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://myoddly.com/comparisons/oddly-vs-triple-whale</loc>
    <lastmod>2026-08-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/comparisons/oddly-vs-polar</loc>
    <lastmod>2026-08-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/comparisons/oddly-vs-northbeam</loc>
    <lastmod>2026-05-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/comparisons/oddly-vs-slack-agents</loc>
    <lastmod>2026-05-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/comparisons/oddly-vs-trueprofit</loc>
    <lastmod>2026-08-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>

  <url>
    <loc>https://myoddly.com/what-is-oddly</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>

  <url>
    <loc>https://myoddly.com/deterministic-commerce-intelligence</loc>
    <lastmod>2026-07-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/audit</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/store-grader</loc>
    <lastmod>2026-06-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/site-intelligence</loc>
    <lastmod>2026-08-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/maturity/</loc>
    <lastmod>2026-08-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/add-ons/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/pricing/compare</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/integrations/slack/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>

  <url>
    <loc>https://myoddly.com/case-studies/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/case-studies/burrow-and-be/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/case-studies/moe/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/case-studies/oddly/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://myoddly.com/case-studies/the-peh-pals/</loc>
    <lastmod>2026-06-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>

  <url>
    <loc>https://myoddly.com/reports/state-of-shopify-2026-q3</loc>
    <lastmod>2026-07-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- These two routes did not move; the PAGE at each one did, on 2026-09-22,
       when the v4 method and developers surfaces were promoted over the old
       ones. A lastmod is a claim that the page changed, and here it actually
       did, so the date moves. -->
  <url>
    <loc>https://myoddly.com/method</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/developers</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/developers/reference</loc>
    <lastmod>2026-07-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>

  <!--
    SITE V4 promoted surfaces (2026-09-22). Measured on the live site that
    morning: myoddly.com/sitemap.xml listed not one of the surfaces the v4
    build had shipped, so every crawler and every answer engine reading this
    file was being pointed exclusively at the pages we are replacing. Five of
    those surfaces answered 404 at their public path and three answered 200
    with the old site's page, which is why the promotion change and this block
    land together: listing a route before it serves is the same lie in the
    other direction.

    These routes are served by Pages Functions (functions/<name>/index.ts,
    functions/products/<name>/index.ts) from the v4 sources, not by a file at
    the route's own path, so tests/integration/sitemap-coverage.test.ts
    resolves them through V4_SURFACES and checks the bytes the route actually
    serves rather than the preview source on disk. That matters: the sources
    keep their robots noindex forever by design, and promotion strips it at
    serve time.

    lastmod is 2026-09-22 for all of them and that is the honest date: it is
    the day each route began serving this page. /method, /developers and
    /pricing carry the same date for the same reason, because the page at
    those three routes changed on that day even though the routes did not.

    /record is the receipts index and /corpus and /trust are read live, so
    their changefreq is daily. The three /products/ pages are product surfaces
    and change when the product does.
  -->
  <url>
    <loc>https://myoddly.com/record</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/receipt</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://myoddly.com/corpus</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/trust</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/products/commerce</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/products/security</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://myoddly.com/products/trust</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
</urlset>
