SEO · what gets indexed
The crawl surface
One sitemap, grouped by content type, generated from the same data the pages render — 645 URLs in this build, one per catalog record, one per studio-log entry, and the hub pages that are neither. 8 surfaces are kept out, and this page lists them with a reason instead of hiding the rule in a config file.
In the sitemap
Open /sitemap.xml →| Group | Pages | Example | Note |
|---|---|---|---|
| Components | 289 | /components/prism-switch | one URL per asset, dated from its published field |
| Prompts | 116 | /prompts/dark-saas-pricing-launch | one URL per asset, dated from its published field |
| Essays | 91 | /learn/hero-that-breathes-in-20-min | one URL per guide, dated from updated |
| Backgrounds | 1 | /backgrounds | one page, one anchor each — 33 backgrounds |
| Studio log | 34 | /changelog/2026-09-12-bank-3-closes-at-500-500 | one URL per entry, dated from the entry |
| Everything else | 100 | /brand/launch | hub, brand, perf, pro, integrations, community and tool pages |
The catalog groups and the studio log are derived from the records themselves, so publishing an asset adds its URL without anyone editing a file here. The last row is the list in src/lib/crawl.ts — the pages a stranger can land on that are not a catalog record.
Kept out of the index
Each row is excluded twice, and the two halves do different jobs: a Disallow rule in robots.txt asks a crawler not to fetch the URL, and a robots: index: false tag on the page itself is what keeps it out of the index. Until this batch the second half was missing on five of these surfaces, which is the trap the table exists to expose.
A local demo console. Nothing there is content, and an indexed admin would be an invitation.
Result pages are queries, not pages: thousands of near-identical permutations with no standalone value.
Your saved list is browser-local — a crawler would index an empty page and call it content.
A recipe link is meant to be shared between people, not harvested; the route is noindex as well.
Streaks and check-ins are empty without local storage.
Embeds are for other people's iframes, and would compete with the real detail pages.
Files and JSON are for tools, not for the index.
The weekly digest is dated and duplicated by the components and prompts it points at.
Why publish the exclusion list
A noindex rule is invisible by design, which makes it easy to apply too broadly and never notice. Printing the list next to the reason turns it into a decision someone can disagree with — and the counts above make it obvious when a group is missing entirely, which is the failure mode that actually costs traffic. That is not hypothetical here: the audit that produced this batch found the studio log, the brand pages, /perf/*, /pro/*, /integrations/*, /community/* and two tool pages rendered indexable and absent from the sitemap, because the sitemap was written by hand and nothing compared it with the build. The harness now walks every built page and fails if an indexable one is unlisted, or if an excluded one has no noindex tag.
Structured data has its own register on /quality/schema, including the types this site refuses to emit.