How to Make a Website That ChatGPT Actually Cites: Schema, llms.txt, and AEO for Developers A developer outlines a practical checklist for making websites citeable by AI search systems like ChatGPT, Perplexity, and Google AI Overviews. The guide covers unblocking AI crawlers in robots.txt, implementing the llms.txt convention, adding structured data markup (LocalBusiness and FAQPage), and structuring content for answer extraction. The developer emphasizes that machine-readability is now a developer's responsibility, not just an SEO concern. Your client's site is fast, accessible, and ranks fine on Google and ChatGPT has never heard of it. That's not an SEO problem. It's a machine-readability problem, and as the developer, you're the one who can fix it. This is the practical checklist I use, with copy-paste code. Why this is now a developer's job AI search systems ChatGPT search, Perplexity, Gemini, Google AI Overviews don't rank pages they retrieve and synthesize. A page enters the retrieval pool only if crawlers can fetch it, parse it, and extract unambiguous facts from it. Rendering strategy, structured data, crawl directives that's our layer, not the marketing team's. Three failure modes cover most invisible sites: AI crawlers blocked in robots.txt, facts locked inside JavaScript or images, and zero structured data. All three are fixable in an afternoon. Step 1: Stop blocking the crawlers 2 minutes Check yourdomain.com/robots.txt. Security plugins and copy-pasted "protect my content" configs routinely block the exact bots that power AI search: txt BAD - makes you invisible to AI search User-agent: GPTBot Disallow: / User-agent: PerplexityBot Disallow: / Know the distinction: search/browse bots OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot fetch pages to answer live queries — block these and you vanish from AI answers. Training bots GPTBot, Google-Extended, ClaudeBot collect training data. If the client has IP concerns, block training, allow search: txt Reasonable middle ground User-agent: GPTBot Disallow: / User-agent: OAI-SearchBot Allow: / User-agent: PerplexityBot Allow: / User-agent: ChatGPT-User Allow: / Default recommendation for local businesses: allow everything. Being cited is the whole game. Step 2: Ship an llms.txt 15 minutes llms.txt is an emerging convention adopted by Anthropic, Cloudflare, Zapier, Stripe among others : a markdown file at your root that tells language models what the site is, in plain text they can't misparse. Adoption by crawlers is still uneven treat it as cheap insurance, not magic: markdown Acme Furniture Rawalpindi Custom furniture workshop in Rawalpindi, Pakistan. Handmade sofas, beds and office furniture since 2011. Serve it as text/plain or text/markdown at /llms.txt. One file, zero build changes. Step 3: Structured data that actually matters the big one Schema markup is the highest-leverage item on this list. There's documented enterprise data of AI Overview accuracy jumping from 43% to 91% after proper entity-linked schema. For a local business, the minimum viable set is LocalBusiness + FAQPage: html