Added build-time llms.txt generation, a shared metadata...
Added build-time llms.txt generation, a shared metadata resolver for consistent page titles and descriptions, reusable JSON-LD schema components, and a validation script that...
Added build-time llms.txt generation, a shared metadata resolver for consistent page titles and descriptions, reusable JSON-LD schema components, and a validation script that checks SEO health across the built sitemap.
llms.txt generation
Two new build-time endpoints generate machine-readable site inventories. The short version (/llms.txt) lists start-here pages, top writing, and machine-readable surfaces. The full version (/llms-full.txt) adds every field note, writing post, project, and colophon entry. Both pull from the actual content collections, so they stay current automatically.
This is a step past Markdown for Agents, which gives agents clean markdown per-page. The llms.txt files give them a map of the whole site upfront.
Shared metadata resolver
A new metadata resolver handles page titles, meta descriptions, and OG images through a cascading priority system: explicit SEO override, then description field, then body text. It’s applied to all detail page types (blog, projects, field notes, colophon).
The main fix: short-form pages like field notes and colophon entries were falling back to the global site description because they don’t always have their own description field. Now they get a description extracted from their content instead.
JSON-LD schema components
Two reusable schema components so structured data isn’t ad hoc. Each route now gets the right type:
- Homepage: WebSite
- /about: ProfilePage + Person
- /activity: WebPage
- Listing pages: CollectionPage
- Blog posts: BlogPosting
- Projects: CreativeWork
Also cleaned up a dead SearchAction from the homepage schema that pointed at a search page that doesn’t exist.
SEO validation
The build-time SEO validator now crawls the sitemap and checks every page for: required meta tags, JSON-LD presence, route-specific schema types, SearchAction validity, default-description detection on detail pages, and llms.txt file integrity. Regressions get caught before deploy.