What is GEO/AEO?
Structuring a site so answer engines can retrieve and cite it. The goal moves from ranking in a list to being the quotable, attributable passage.
Guide · SEO
Ranking and being cited are now different problems. An answer engine reads a handful of sources, decides which ones are unambiguous enough to quote, and names those. Being quotable is a structural property, and it is one you can engineer.
Classic SEO optimised for a ranked list of ten links. AI answer engines — ChatGPT search, Perplexity, Copilot, Google's AI overviews, Claude's web search — synthesise a single answer from a few retrieved sources and cite some of them. That shifts the target from rank higher to be the passage a model can lift verbatim and attribute confidently.
The practices go by two names: GEO (generative engine optimization) and AEO (answer engine optimization). They overlap almost entirely, and neither requires abandoning normal SEO — a page that is crawlable, fast, and structured still wins both. What changes is the emphasis: unambiguous entities, self-contained passages, and machine-readable facts.
The single highest-leverage technical move is making a retrieval system certain who the site is about. If ten pages each declare a separate Person node, a model sees ten weakly-connected entities. If ten pages reference one canonical @id, it sees one entity with ten pieces of evidence.
sameAs is the disambiguation lever. Link the profiles that already have independent authority — GitHub, LinkedIn, ORCID, a publisher DOI page. This is how an entity gets tied to an existing graph rather than floating alone.knowsAbout deliberately. It is a direct statement of topical scope, and it is one of the few places you get to declare it rather than have it inferred.llms.txt is a proposed convention: a markdown file at the site root that gives a language model a clean, navigable summary of the site without HTML, navigation, or scripts. llms-full.txt is the expanded version containing the actual content.
Two honest caveats. First, adoption is not universal — no major crawler has committed to it as a requirement, so treat it as cheap insurance rather than a guaranteed channel. Second, it is not a place to say something different from the site. Contradiction between llms.txt and the rendered pages is worse than having no file, because it introduces exactly the ambiguity you are trying to eliminate.
The reason to ship it anyway: it costs an hour, it is trivially machine-parseable, and it forces you to write a clean one-line description of every page — which is useful regardless of who reads it.
AI companies operate separately-named agents, often splitting training crawlers from live-retrieval crawlers. Those are different decisions: blocking training while allowing retrieval is a coherent position, and so is the reverse.
| Agent | Operator | Primary purpose |
|---|---|---|
| GPTBot | OpenAI | Training data collection |
| OAI-SearchBot | OpenAI | Live search retrieval and citation |
| ChatGPT-User | OpenAI | Fetches a page a user asked about |
| ClaudeBot | Anthropic | Crawling for model training |
| Claude-User / Claude-SearchBot | Anthropic | User-initiated fetch and search indexing |
| PerplexityBot | Perplexity | Search index used for cited answers |
| Google-Extended | Controls Gemini training use; does not affect Search ranking | |
| Applebot-Extended | Apple | Controls Apple Intelligence training use |
| Bingbot | Microsoft | Bing index, which also feeds Copilot |
| CCBot | Common Crawl | Open crawl corpus used by many trainers |
Blocking Google-Extended does not remove you from Google Search, and blocking a training crawler does not remove you from that company's live search results — the agents are separate. Equally, if you want to be cited, blocking the retrieval bots guarantees you will not be. Decide training and retrieval independently, and know which name controls which.
robots.txt is a request, not enforcement. Crawlers that ignore it will ignore it. If content genuinely must not be read, it needs authentication, not a directive.
FAQPage markup is well-suited to answer engines: it is a list of question-answer pairs in exactly the shape a retrieval system wants. There is one hard rule.
Every question and answer in FAQPage markup must appear as visible text on the same page. Schema-only FAQ content — questions that exist in the JSON-LD but not on screen — violates Google's structured data guidelines and is a well-known cause of manual actions. Generate the visible FAQ and the schema from the same source so they cannot drift.
Retrieval works on passages, not pages. A model chunks your page, embeds the chunks, and pulls the ones that match the query. That has direct consequences for structure.
The underlying test is simple: if someone pasted one section of your page into a chat with no other context, would it answer the question? If not, that section will not get cited.
IndexNow is a protocol supported by Bing, Yandex, Seznam and others that lets you push URLs the moment they change instead of waiting for a crawl. That matters for AI search because Copilot is built on the Bing index — faster Bing recrawl means faster Copilot freshness.
# 1. host a key file at the site root # https://example.com/<key>.txt containing exactly <key> # 2. ping on publish curl "https://api.indexnow.org/indexnow?url=https://example.com/guides/new.html&key=<key>" # or submit a batch curl -X POST https://api.indexnow.org/indexnow \ -H "Content-Type: application/json" -d '{ "host": "example.com", "key": "<key>", "keyList": ["https://example.com/guides/new.html"] }'Google does not participate in IndexNow; for Google, keep the sitemap current and submit it in Search Console. Do not spam either — pinging unchanged URLs repeatedly is the fastest way to have the signal ignored.
@id and a full sameAs list, defined once and referenced from every page.author and publisher pointing at that @id.llms.txt and llms-full.txt at the root, consistent with the site.robots.txt with an explicit, deliberate decision for each named AI agent, plus a sitemap line.sitemap.xml listing every real page, submitted to Search Console.This site implements the full list, which is the only reason I can describe it concretely: the canonical Person node lives on the homepage and every page references it, /llms.txt and /llms-full.txt are generated alongside the pages, /ai.txt and robots.txt state the crawler policy explicitly, and every guide including this one carries TechArticle plus BreadcrumbList plus an FAQPage that mirrors the visible FAQ below. The entity page is here →
FAQ
Structuring a site so answer engines can retrieve and cite it. The goal moves from ranking in a list to being the quotable, attributable passage.
One canonical Person or Organization @id, referenced from every page, plus a sameAs list. Ten references to one entity beat ten separate ones.
A markdown summary of the site at the root, with llms-full.txt for full content. Cheap insurance — and it must never contradict the pages.
GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended, Bingbot, CCBot. Training and retrieval are separate calls.
Yes. Every Q and A must be visible on-page. Schema-only FAQ breaks Google's guidelines and draws manual actions. Generate both from one source.
A push protocol for instant recrawl on Bing and others, which feeds Copilot. Google does not participate — use a current sitemap there.