# mrpectus — https://mrpectus.com # # Cloudflare was serving an auto-generated content-signals file here, which # carried no Sitemap: line and none of this site's own rules. This replaces it. User-agent: * Allow: / # Paid deliverables. These already answer 401 without an unlock cookie (see # functions/_middleware.ts), so this is belt-and-braces — it stops the URLs # being crawled and listed at all. # # The four below are listed one by one on purpose. A `-program` suffix does not # mean a page was paid for: /programs/pe-rib-flare-program is a free article, # and a rule written to that pattern hid it from search. The paid list lives in # GATED (src/data/gated.ts); these lines and NOT_INDEXABLE in astro.config.mjs # have to match it. # # Prefix rules, deliberately unanchored: the pages answer on both # /programs/x-program and /programs/x-program/, and a `$` would only cover one. Disallow: /guides/*/read Disallow: /programs/*/program Disallow: /programs/pectus-excavatum-program Disallow: /programs/pectus-carinatum-program Disallow: /programs/rib-flare-program Disallow: /programs/confidence-program # The password prompt itself, the component gallery, and the member app. Disallow: /unlock Disallow: /design-system Disallow: /app # The post-purchase thank-you page and the page that reopens a lead's own saved # assessment from their email are NOT listed here on purpose, even though both # match NOT_INDEXABLE in src/data/indexable.mjs. They now carry a `noindex` meta # instead (QuizLayout takes the prop), and a Disallow would defeat it: a page # Google may not crawl is a page whose noindex Google never reads, so an inbound # link can still put a URL-only result in the index. Blocking and noindexing the # same page is the one combination that does not work. See docs/seo.md. # API endpoints and the video proxy — nothing to index, and crawling the video # route would pull tens of gigabytes out of R2. Disallow: /api/ Disallow: /video/ Sitemap: https://mrpectus.com/sitemap-index.xml