Skip to content
Citable

A field guide to AEO · GEO · LLM-readable content

Write pages that answer engines can quote.

Citable documents how to structure content so ChatGPT, Perplexity, Claude and Google AI Overviews cite you instead of summarising around you. Every guide practises what it preaches: answer-first, schema-marked, and served as Markdown.

Five things every citable page does

Answer engines do not rank pages — they extract passages. These are the properties that make a passage extractable.

  1. 01

    Answer first, then explain

    Open with a 40–70 word direct answer that stands on its own. Models quote the first complete answer they find, not the best one.

  2. 02

    One page, one question

    Give each question its own URL, heading and canonical. Passages that mix topics are summarised; passages that resolve one question are cited.

  3. 03

    Say who, when and why

    A named author, a visible date and linked sources are the strongest quality signals a retrieval system can check without reading you.

  4. 04

    Mark it up for machines

    Article, FAQPage, DefinedTerm, Person and Speakable JSON-LD tell crawlers what a passage is, not just what it says.

  5. 05

    Ship it as plain text too

    Serve Markdown, an llms.txt index and an open robots policy. What is cheap to fetch and parse gets fetched and parsed.

Latest guides

Each guide opens with a short answer, ends with sourced FAQs, and is available as Markdown at the same URL with a .md suffix.

  • Technical01

    Modelling content for answer engines in a headless CMS!

    A headless CMS content model for answer engines makes every Answer Engine Optimization signal a constrained field, not an editorial habit: a required short answer with a maximum length, key takeaways, FAQ items, sources with URL validation, the author as a relation, and published and updated dates. JSON-LD, Markdown and llms.txt are then generated from those fields, so no representation can disagree with the page.

    9 min read

  • Structured data02

    FAQ content that answer engines pick up (and why FAQPage rich results went away)

    FAQ content works for answer engines when each item pairs a question people ask with a self-contained answer of 40–80 words, rendered in the HTML rather than loaded on click, and mirrored in FAQPage JSON-LD from the same fields. Google restricted FAQ rich results in 2023 and withdrew them in May 2026, but FAQPage remains valid schema.org, and question-and-answer pairs are the passages retrieval systems extract.

    8 min read

  • Content03

    E-E-A-T for answer engines: authors, dates and sources that machines can verify

    E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) is Google's description of a reliable source, and it is not a ranking factor. For answer engines it translates into signals a machine can verify: a named author with a profile page and Person markup, visible published and updated dates that match the structured data, outbound links to primary sources with a citation list, first-hand evidence, and an About page that says who is responsible.

    8 min read

  • Measurement04

    Measuring AI visibility: how to track citations in ChatGPT, Perplexity and AI Overviews

    AI visibility is measured from four partial signals, because no answer engine reports citations directly. Referral traffic identifies clicks from chatgpt.com, perplexity.ai, copilot.microsoft.com, claude.ai and gemini.google.com; server logs show which AI crawlers fetch which pages; a fixed panel of prompts run on a schedule gives citation rate and share of answer; and Google Search Console reports AI Overview clicks only blended into Web search totals.

    8 min read

  • Technical05

    Serving Markdown to LLMs: content negotiation and .md endpoints

    Serving Markdown to LLMs means publishing a plain-text representation of each page next to the HTML one, so that AI crawlers and agents can read it without rendering JavaScript or spending tokens on markup. There are two delivery patterns: a .md suffix on the canonical URL, and content negotiation on the Accept: text/markdown request header, with Vary: Accept and a Link rel=canonical header pointing back to the HTML page.

    10 min read

  • Technical06

    Controlling AI crawlers with robots.txt: GPTBot, ClaudeBot, PerplexityBot and friends

    AI crawlers are controlled through robots.txt user-agent groups, and every major vendor runs several agents. OpenAI and Anthropic separate a training crawler (GPTBot, ClaudeBot), a search indexer (OAI-SearchBot, Claude-SearchBot) and a user-triggered fetcher; Perplexity runs PerplexityBot and Perplexity-User. Google's AI Overviews use ordinary Googlebot; Google-Extended only opts out of Gemini training and grounding. Allow the search agents if you want citations, and treat user-triggered fetchers as outside robots.txt.

    9 min read

What this site does under the hood

Citable is a working reference implementation, not just advice. View source on any page, or fetch it with Accept: text/markdown.

  • JSON-LD on every route

    TechArticle, FAQPage, DefinedTermSet, Person, BreadcrumbList, WebSite and Speakable, generated from the CMS fields.

  • Markdown for every guide

    Append .md to any guide URL, or send Accept: text/markdown, and get the article as clean Markdown with front matter.

  • llms.txt and llms-full.txt

    A curated index for language models, plus a single file containing every guide in full, regenerated whenever content changes.

  • Explicit crawler policy

    robots.txt names GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot and Google-Extended individually and allows them.

  • Storyblok content model

    Guides, glossary terms, authors and pages are Storyblok components with a seed script that pushes the schema and content.

  • Static, fast, semantic HTML

    Pre-rendered with Next.js so crawlers that do not execute JavaScript see the whole article in the first response.

Glossary

Short, quotable definitions of the vocabulary used across the guides.

  • Answer Engine Optimization

    AEO

    Answer Engine Optimization (AEO) is the practice of structuring web content so that systems which return a direct answer — AI assistants, AI-powered search and voice assistants — can retrieve, understand and cite it. It prioritises self-contained answer passages, clear entities, verifiable authorship and machine-readable formats over ranking position.

  • Generative Engine Optimization

    GEO

    Generative Engine Optimization (GEO) is the practice of increasing how often, and how favourably, a source is used and cited by generative engines — search systems that answer with text produced by a large language model, such as Google AI Overviews, Perplexity or ChatGPT search. The term was introduced in a 2023 research paper by Aggarwal et al.

  • Answer engine

    An answer engine is a system that responds to a question with a synthesised answer rather than a ranked list of links. Modern answer engines — Google AI Overviews and AI Mode, Perplexity, ChatGPT search, Claude with web search and Microsoft Copilot — retrieve passages from the web and generate the answer with a large language model, usually with citations to the sources used.

  • llms.txt

    llms.txt is a proposed convention for a Markdown file at the root of a website (/llms.txt) that gives large language models a curated, plain-text overview of the site: a title, a short summary, and sections of links to the most important pages with one-line descriptions. A companion file, llms-full.txt, contains the full text of those pages in one document.

  • Speakable

    SpeakableSpecification

    Speakable is a schema.org property (with the SpeakableSpecification type) that identifies, by CSS selector or XPath, which parts of a page are best suited to be read aloud or quoted verbatim — typically a headline and a short summary. It was introduced for voice assistants and remains the most direct way to tell a machine which passage is the answer.

  • Retrieval-augmented generation

    RAG

    Retrieval-augmented generation (RAG) is an architecture in which a language model is given relevant documents or passages retrieved at query time — from a search index, a vector database or the live web — and asked to answer using them. It grounds the model's output in current, citable sources instead of relying only on what it memorised during training.

Frequently asked questions

What is Citable?

Citable is a free, open field guide to Answer Engine Optimization (AEO), Generative Engine Optimization (GEO) and LLM-readable content. It is also a reference implementation: the site itself is built with Storyblok, React and Next.js using the techniques it describes.

Is AEO different from SEO?

Yes. SEO optimises a page to rank in a list of results; AEO optimises passages to be extracted and quoted inside a generated answer. The two overlap on crawlability and quality, but AEO puts far more weight on answer-first structure, clear entities and machine-readable formats.

Can I reuse the content or the code?

The guides are licensed CC BY 4.0, so you can quote and adapt them with attribution and a link to the canonical URL. The site's source code is MIT licensed.

How do I get the content as plain text for a language model?

Fetch /llms.txt for an index, /llms-full.txt for every guide in one file, or add .md to any guide URL for a single article as Markdown.

Building something similar?

The whole site — content model, seed script, JSON-LD generators, Markdown endpoints — is open source. Fork it, point it at your own Storyblok space, and ship.