Search & indexing
Reach is not only a phone in a pocket — it’s also a crawler at your door. A space announces itself to search engines with three pieces, and all three are derived: nothing to maintain, nothing to forget.
The sitemap lives at /feed/sitemap.xml and is a feed — a public extract that keeps itself current. Every live node with a path is in it, exactly once: pages, collection pages, and media watch pages alike. There is no type list to maintain; participation follows one rule — has a path, is live. The homepage projects onto the root URL, the not-found page stays out, and each entry carries a lastmod taken from the node itself. Change a slug, publish a page, delete one: the sitemap follows on the same rails that keep the compiled graph in sync, and the drift-checker verifies it like any other derived artefact.
Robots are answered at /robots.txt, generated at the edge. It points crawlers to the sitemap and keeps the editing surfaces (/edit, /live, /draft) out of the index — those are working views, not content. A gated space answers with a full disallow and no sitemap: not public means not extractable, the same rule every feed obeys.
Watch pages make media findable. A video or image can have its own page — the media is the main content, with title, description, credit and licence around it — and because every page renders its node as JSON-LD, a watch page emits a complete VideoObject: the file (contentUrl), the page (url), the upload date, and the thumbnail when the editor has chosen one. That is precisely the recipe search engines require before they will index a video as a video. Whether a media node gets a page remains an editorial choice — you give it a slug, or you don’t. Nothing routes by accident.
The result is that findability is not a plugin or a checklist — it’s a projection of what is already true in the graph. If a page exists and is live, search engines know where it is, when it changed, and what it contains.