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) · · 5 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 that costs money, and the half where methodological honesty matters most.
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.
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.