Generative engine optimization: what can be measured, and what is still belief
The category is barely a year old and already has folklore. Here is what you can measure on your own site, what you can measure on an engine’s answers, and the long list nobody can measure yet.
The NessFlow team (Product engineering, NessFlow) · · 6 min read
A real product screen, rendered on a fictional demo dataset: the figures shown belong to no client.
A growing share of the questions your customers used to type into Google, they now ask an answer engine. The commercial question that follows is simple: is your brand cited in those answers? The engineering question is much less simple, because the category assembled itself faster than its instruments.
This guide separates three things: what you can measure on your own site, what you can measure on an engine’s answers, and what nobody can measure today no matter what gets published about it.
Vocabulary first
Three acronyms circulate for roughly the same thing: GEO (generative engine optimization), AEO (answer engine optimization), and "AI SEO". None is standardised, none belongs to a body, and all three describe the same goal: being present in a generated answer, with a link back to you.
We use GEO because it is the most common term in technical writing, without granting it any particular authority.
What you can measure on your own site
This is the solid half, because it depends on no third party.
Crawler access
An answer engine cites a page it was able to read. Checking whether it can is deterministic: for every known token you read your robots.txt and apply RFC 9309: the same specification Google, OpenAI and Anthropic say they follow.
Three traps come up constantly:
- robots.txt groups do not stack. A crawler applies one group: the most specific one that names it. If you have a permissive
User-agent: *and aUser-agent: GPTBotgroup disallowing one directory, GPTBot inherits nothing from the generic group. This is the single most common mistake we find. - A control token is not a crawler.
Google-ExtendedandApplebot-Extendedcorrespond to no agent knocking at your door: they are tokens the operator recognises inrobots.txtto govern a use. Probing them by user agent proves nothing. - Some fetchers ignore robots.txt by design. The ones that fetch a page because a user just asked for it sometimes behave like a browser. A refusal aimed at them is a statement of intent, not a barrier, and saying so is more useful than implying otherwise.
llms.txt
A text file at the root of the domain that introduces the site to a model in condensed form. Two things to know before spending a day on it:
- it is not a standard: no operator commits to reading it;
- it does not replace robots.txt: it governs no access.
What you can do is validate it: structure, links that resolve, consistency with the live site. An llms.txt pointing at deleted pages is worse than no file.
What rendering shows
An answer engine reads what a browser displays. If your content only exists after JavaScript runs and rendering fails, the page is empty for it exactly as it is for a classic search engine. The check is the same as for technical SEO: render, then look at what is left.
What you can measure on the answers
This is the half where methodological honesty matters most, and it runs along two paths whose costs have nothing in common.
The principle: you ask a set of questions across several engines, collect the answers, and look at who gets cited. Three precautions make the number usable.
First: show the denominator. "30% share of citations" means nothing on its own. Across ten questions that is three answers, and sampling noise dominates. Across a hundred it is a signal. We always show the count next to the proportion, and a share whose count is zero renders as an em dash, never as 0%.
Second: separate "not cited" from "not measured". An answer that does not cite you is a fact. A collection run that failed is nothing. Conflating them makes your curve drop on the day of a network incident, the kind of chart that starts a meeting for no reason.
Third: never compare two runs collected differently. Answers vary with phrasing, language, location, and whichever model was served that day. A run is only comparable to a run made with the same configuration, hence the rule we apply everywhere: a frozen measurement carries the configuration that produced it.
The second path, invisible for a long time
Putting a set of questions to an assistant is the broader path: it reaches any phrasing at all, and it is the one that costs money, since every question is a billed call.
There is a second path, and we were slow to see it ourselves. Google prints its own answer above its results, the AI Overview, and serves a conversational tab, AI Mode; both cite their sources. Those citations live inside the results page that rank tracking already collects every morning. Reading them asks no extra question: the material was there all along, and most tools throw it away while parsing the rest.
This path adds one more precaution, and it is the least understood of the four. The denominator moves on its own. The engine decides every day, query by query, whether to show an overview at all. A fall in the number of citations may therefore describe no loss on your side: it may be nothing but a fall in the number of overviews served. Publishing the share without publishing how often the surface appeared produces a chart that blames a site for the engine's own decision. Two numbers side by side, always.
Finally, the two surfaces never add up. A definitional query may cite several sources in the overview and none in AI Mode; a comparative query does the opposite. Two denominators, two series, and neither is a fallback for the other. A day without an overview counts as "not measured", never as "not cited".
What nobody can measure
Here is the list most articles in the category leave out.
- Traffic coming from an answer engine. A share of it arrives with no usable referrer. Every published estimate today rests on extrapolation.
- Causality between a change and a citation. Models change without notice. A rise observed after a redesign may come from the redesign, or from a model update in the same month.
- The weight of individual signals. No operator publishes what makes a source get picked. The "GEO factor" lists you find online are reasonable hypotheses, not measurements.
We would rather say that than sell a composite score. An invented number is indistinguishable from a measurement, which is exactly what makes it dangerous.
Where to start
In this order, because cost rises and certainty falls:
- Check access. It is deterministic, free, and half the sites we audit block at least one AI search crawler without knowing it.
- Fix rendering. If your content only exists in JavaScript, everything else is theoretical.
- Publish a correct llms.txt, or none at all. A wrong file is not better than an absent one.
- Set up citation tracking with its denominator on screen, and read the trend over months rather than days.
The first three are ordinary engineering. The fourth is a measurement, with its error bars. None of the four is a growth hack, and that is what makes them useful.