<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- Static pages -->
  <url>
    <loc>https://pornlocker.wtf</loc>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/browse</loc>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/lockers</loc>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/top</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/creators/browse</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/telegram/directory</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/recommendations</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/search</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/for-creators</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/about</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/legal</loc>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- Naughty Confessions discovery feed.
       Individual confessions use #c_<id> anchors on /confessions, not
       their own pages, so they get a single sitemap entry. If we ever
       upgrade to /confessions/<id> pages, list them here too. -->
  <url>
    <loc>https://pornlocker.wtf/confessions</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://pornlocker.wtf/blog</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>

  <!-- "Best of" niche ranking pages (/best/[niche]).
       Path-based, indexable ranking pages — one per niche with 8+ live
       sites. <lastmod> is the newest site in each niche so Google
       re-crawls when rankings shift. High priority: these target
       commercial "best X" queries and anchor the pillar-cluster. -->
  

  <!-- NOTE on browse category querystrings:
       We still don't list /browse?category=foo — Google treats those as
       URL-parameter variants of /browse. Niche SEO now lives on the
       path-based /best/[niche] pages listed above instead. -->

  <!-- Site review pages.
       lastmod uses review_generated_at, NOT updated_at: the uptime
       checker cron bumps updated_at on every status sweep, which made
       every URL claim it changed "today", every day. Google detects
       perpetually-fresh lastmod and ignores the field sitewide.
       review_generated_at only moves when the review content actually
       changes, which is what lastmod is supposed to mean. -->
  

  <!-- Creator profile pages.
       Filter by status='live' (NOT is_active — that column doesn't exist
       and a misspelled column causes Supabase to silently return null,
       which zero'd out every creator from previous versions of this
       sitemap). -->
  

  <!-- Blog posts.
       Filtered to is_published=true so unpublished drafts never reach
       Googlebot. lastmod uses synced_at (when we last pulled from
       RankScore) rather than published_at, so edits made upstream get
       reflected in Search Console without needing a re-publish. -->
  
</urlset>