Optimizing My Site for ChatGPT, Claude, and Perplexity in One Claude Code Session

Generative engine optimization (GEO) with Claude Code: dynamic llms.txt endpoints, AI-crawler robots.txt, and JSON-LD schema across every page. One session, deployed.

Cloudflare Workers static assets won't serve a 404 page unless you say so twice

Building 404.astro isn't enough. Without not_found_handling in wrangler.json, unknown URLs on a Workers site return a bare response instead of your page.

Building llms.txt as an Astro endpoint so it never goes stale

A static llms.txt is a list you forget to update. An endpoint that queries your content collections rebuilds the index on every deploy. One gotcha: a file in public/ silently shadows it.

draft: true in frontmatter does nothing unless you filter for it

Astro Content Collections don't hide draft posts automatically. Forgetting the filter on index and slug pages means drafts are publicly live.

Merging a small content collection into a bigger one beats a separate one

TIL posts lived in their own Astro content collection. Folding them into the blog collection as a category field fixed SEO and cut duplicate logic.