How I Make One Page Citable, and How I Check It
Most "GEO checklists" are a pile of tactics with no way to fail. I use a shorter one. It is for a single page, not a whole site, and every line is something I can observe.
The research behind it is not mysterious. In the KDD 2024 GEO paper, the methods that moved visibility were citations, quotations, and statistics. Keyword stuffing did not.[1] That matches what I see when I rewrite a page for answer engines: the model keeps the sentence it can defend.
Say the answer where a retriever will see it
Answer engines do not read your brand story first. They pull a passage. The first screen should state the question and the answer in prose a person can quote. If the only clear sentence is inside a tab, a carousel, or an image, assume it will not be retrieved. I check this by copying the page to plain text. If the answer disappears, the HTML was decorating it, not publishing it.
One claim per passage. A paragraph that mixes a definition, a number, and a sales line gives the model nothing stable to cite. Split them.
Put the source on the claim, not in a footer nobody maps
Aggarwal and colleagues found that adding citations and quotations raised impression on their benchmark, while an authoritative tone did not do much.[1] I write the source in the sentence: who, what year, and a link. A references list at the bottom is for the human reader. The inline citation is for the passage that might be retrieved alone.
Statistics only help if they are real and scoped. "Up to 40 percent" in that paper is a relative impression gain on GEO-bench, not a traffic forecast. If I cannot name the dataset, the engine, and the sample, I leave the number out. An invented statistic is worse than none. It is the thing a careful answer engine should refuse to repeat, and the thing a careless one will.
Machine-readable signals, without lying
Three signals are worth the effort. None of them is a citation.
Title and canonical. The title should match the question. The canonical should be the URL you want retrieved. Two URLs with the same text will split whatever credit you get.
Structured data that repeats the visible page. Google says structured data is a clue about a page, and that you should not mark up information the user cannot see. JSON-LD is their recommended format when you can maintain it.[2] I mark the article the person can read. I do not add a FAQ that only exists in JSON.
An llms.txt where agents need a map. Jeremy Howard's proposal is a curated Markdown file, at /llms.txt or under a path, with a title, a short summary, and links to cleaner Markdown versions of the pages. It is not a sitemap and it is not robots.txt. Sitemaps list pages for search engines. llms.txt is a short guide an agent can read, with the detail behind the links.[3] I add one when the site has a set of pages an agent should enter through, usually docs or a small set of explainers. I do not expect it to create citations by itself.
The check, in order
I do not score a page by how many tactics it has. I score the gaps.
- Plain text. Can I quote the answer without the layout?
- Sources. Does each non-obvious claim name a source I can open?
- Fetch. Did an AI crawler request this URL, or am I guessing from a sitemap?
- Live question. Asked more than once, and once as a paraphrase, does an assistant retrieve this URL, cite it, or only talk about the topic?
- Agreement. If it cites me, does the cited sentence exist on the page?
A failed fetch stays unmeasured. I do not spoof Googlebot and call that a pass. A single flattering chat is not a rate.
What I stopped doing
I stopped stuffing the query into headings. The GEO paper's keyword-stuffing condition did not beat the unmodified page.[1]
I stopped writing "ultimate guides" that never answer. A long page can still be uncitable if no passage stands alone.
I stopped reporting AI traffic as one number. A crawler hit, a retrieved passage, and a referred session are different events. Mixing them makes the next edit a guess.
The page is done when a stranger can paste one paragraph into a chat and the source is already in it.