The AI Visibility Denominator: Why Indeterminate Is Not Zero

AI Visibility Denominator infographic: three-state classifier diagram showing observed, absent, and indeterminate branches
,
The AI Visibility Denominator: Why Indeterminate Is Not Zero

Someone hands you a dashboard. It says: AI Visibility, 78 percent. It feels like an answer. It is not one yet.

TL;DR

The AI visibility denominator is the count an AI visibility score divides by, and it is the part most dashboards corrupt. Two of mine did: they scored indeterminate results as zeros and collapsed distinct states like “mentioned” and “cited” into one number, so the denominator stopped meaning what it claimed. AI visibility measurement needs three states, not two: observed, determinately absent, and indeterminate, with indeterminate excluded from the denominator entirely. As of August 2026, I had seen the same measurement problem surface from three different directions in the same week. This post shows the four bugs I found in my own tools, the tri-state fix, and the one place that fix nearly rewrote every historical score.

Before I trust the 78, I want to know what sat underneath it: which tests actually ran, which could be resolved, which never happened, and which states were folded together to make the number look clean.

I spent a week making that argument about AI search dashboards. Then I pointed the same test at my own two tools and found four bugs in an afternoon. That was the uncomfortable part. As of August 2026, this page is where I am pinning down the name for what actually broke.

What is the AI visibility denominator?

The AI visibility denominator is the count an AI visibility score divides by, and it lies whenever an indeterminate observation is recorded as a zero rather than excluded, which inflates the count, deflates the rate, and hides the exact gap the score claims to measure. A citation rate of 20 percent means nothing until you know whether the 10 underneath it was 10 tests that ran, or 6 tests that ran plus 4 that never happened. Every failure in this post is a corruption of that count.

The failure is easy to miss because the arithmetic can be perfectly correct. You can divide the right numerator by the wrong population and still get a beautifully precise percentage. The problem is what you allowed into the bottom of the fraction. Once non-events are in there, another decimal place will not save you.

My own dashboards failed the test I was applying to everyone else’s

My two measurement tools both corrupted their AI visibility denominator, in four places between them. The first is a citation checker that runs ten queries across three engines (ChatGPT, Perplexity, and Google AI Overviews); the second is a page-level GEO score that sums five layers into one figure. Both preserved their working: per-engine breakdowns, per-layer breakdowns, query-level logs. Neither was a black box. A black box was never the problem. The problem was quieter and more common.

The trigger was an article by A. L. MacFarland published in August 2026. In my paraphrase, his argument is that AI search evidence gets flattened into one visibility number, and that number then acquires meanings the underlying evidence was never built to carry. His own line, which I have not managed to improve on: no conclusion may outrun its evidence. I agreed with the argument in the abstract. Pointing it at my own instruments is what turned it into four fixes.

The bug has one shape: an indeterminate scored as a zero

The error is treating “I could not determine this” as “this did not happen.” It is boring, and it is everywhere. A non-event gets promoted to a determinate negative, the denominator quietly lies, and a headline number picks up a meaning it was never built to carry.

Google did not render an AI Overview for a query, so the tool records a miss. A scoring layer was not run, so the composite counts it as a failure. A crawl signal was unavailable, so the code fills in a middle value. Each of these is an indeterminate wearing the costume of a zero. Here is where it showed up in my tools.

State being measured Old handling (wrong) New handling
Brand mentioned vs brand cited Merged into one “cited” bit Two separate recorded states
AI Overview not rendered Scored 0 (counted as a miss) Indeterminate, removed from the denominator
Score layer not run Scored 0 (cost the page up to 20 points) Null, composite reported out of 80
Crawl parity unavailable Imputed as 2.5 Indeterminate, denominator adapts

The first row is the one that could not be patched later. Merging “mentioned” and “cited” into a single value destroys the distinction at collection time, so no amount of downstream reporting can recover it. A brand can be named in an answer without being cited as a source, and those two facts lead to different work. They are now two states, each recorded as observed, determinately absent, or indeterminate.

The fix is three states, not two

The fix is to give every measurement three possible values instead of two: observed, determinately absent, or indeterminate. Indeterminate never enters a denominator and is never scored as a zero. Every rate then resolves to the count of checks where the state could actually be determined, reported alongside a visible count of what was excluded and why.

The AI Overview case is the clearest example. Before, a query where Google showed no overview was scored zero, which pulled the whole AI Overview rate down. That is not a miss. Google not rendering an overview is not evidence that the brand is absent from one. It is an absence of the test itself.

// Before: no overview rendered is scored as a determinate miss
if (!aioItem) {
  return { entity_mention_status: "ABSENT", platform: "aio" };
}

// After: no overview rendered is indeterminate, out of the denominator
if (!aioItem) {
  // Google not rendering an AI Overview is a non-event, not an absence
  return {
    citation_status: "UNRESOLVED",
    entity_mention_status: "UNRESOLVED",
    platform: "aio",
    raw_ref: { aio_rendered: false }
  };
}

The rate now reads as “AI Overview rendered in 6 of 10 queries; brand cited in 2 of those 6,” not a flat “20 percent” that silently averaged in four non-events. The page-level score got the same treatment. A page missing one layer is now scored out of 80 rather than out of a fake 100, so the missing layer documents itself in the denominator instead of hiding inside it.

Going deeper? The GEO Experiments ebook covers how to design and measure AI citation tests, including the tri-state scoring model used in this post.

One fix nearly rewrote every score in my history

The riskiest fix looked like the safest. To report a page out of 80 when a layer is missing, I needed to change how the five layer weights combine. The obvious version swapped the normaliser for the raw weights. It would have passed every test I had.

It was also wrong in a way that would not have shown up until much later. My five layer weights sum to 0.90, not 1.0, and the normaliser rescales them by that 0.90. The raw-weights version skipped that step, which would have re-based every all-five-layer score in my history by about six points, from 63.89 down to 57.50 on the test case. That is a larger break than the missing-layer case I set out to fix, and none of the passing tests would have caught it, because none of them checked an all-five-layer score against its known historical value.

The real fix uses two regimes. When all five layers are present, normalise to 1.0, which preserves the historical baseline to the digit. When a layer is missing, use the raw weights and report the smaller denominator. Three pinned tests now hold the line, each one guarding a different way an indeterminate could disguise itself as a value.

Pinned test Input Result it locks in
Baseline preserved All five layers present 63.89 out of 100 (unchanged from history)
Denominator honest One layer missing 53.5 out of 80 (self-documenting)
Empty set safe No sub-signals available Returns indeterminate, not 0

Three measurers hit this wall the same week

The reason this is worth a post rather than a changelog is that I saw the same measurement problem surface from three different angles in the same week. I am deliberately not calling those efforts fully independent here; the useful point is the convergence of the problem, not a stronger claim about who had spoken to whom.

Lana, who runs connexion.me, publishes AI-recommendation leaderboards with the raw answers posted beside every board. She found that the same store reads 0 or 83 out of 132 depending only on which family of prompts is sent. Generic small-business-CRM phrasing returned a self-hosted CRM in zero answers; adding the buyer’s real constraint, that data cannot sit with a third party, put the same product at number one. Nothing on the web moved. The question changed, not the store.

A second measurer found the neighbouring version at page level: whether a page appears depends on the type of question asked of it. Their numbers are theirs to publish, so I am leaving them out. I am also keeping the description deliberately broad until they are comfortable with anything more identifying.

And MacFarland published the general form as the USO Evidence Protocol, a candidate specification for keeping these distinctions intact as evidence moves from observation to reporting.

MacFarland’s unpublished AI Search Claim-Evaluation Prompt is a practitioner instrument for detecting when an AI-search claim exceeds what was actually measured. It is referenced here as a complementary approach to the same failure class, not as a validated instrument or as evidence supporting the present analysis. (A. L. MacFarland, “AI Search Claim-Evaluation Prompt,” unpublished practitioner instrument, shared via private correspondence, August 13, 2026.)

Measurer Level What is conditional Response
Lana (connexion.me) Market The prompt family State the condition on each board
Independent site-level measurer Single site The question type (result withheld)
A. L. MacFarland (USO) Protocol The evidence boundary Separate observed, inferred, and not-established
GEO Lab (this post) Instrument and code The denominator and version Three states, enforced with tests

Same wall, four faces: three other measurers, then my own instruments. The one I can offer that the others cannot is the code: the principle enforced at runtime, with tests that fail if an indeterminate is ever scored as a zero again.

What to demand of the AI visibility denominator in any report

Demand that the AI visibility denominator resolve, on demand, to four things: the count of determinable tests, what was excluded and why, the distinct states kept separate, and the version of the method that produced it. That is the whole discipline of AI visibility measurement in one instruction, whether you are buying a dashboard or building one. A single headline number is fine. Give the executive the 78. Simplify the interface. Do not expand the meaning.

The dashboards worth trusting next year will not be the ones with the cleanest single figure. They will be the ones that can still answer the only question that matters when someone challenges the number: how do we know?

Key GEO Lab Takeaway

An AI visibility number is a summary, not a fact. It earns trust only when its AI visibility denominator resolves to the determinable count, the exclusions, the separated states, and the method version behind it.

Score an indeterminate as a zero and the number stops meaning what it claims. MacFarland’s rule is the discipline: no conclusion may outrun its evidence. Mine is the consequence: there is no context-free AI-visibility number.

If you want your AI visibility reporting checked for this class of error, the GEO Lab runs a measurement audit that separates observed from indeterminate and shows you every denominator underneath the headline. Get in touch.

Frequently Asked Questions

What is the AI visibility denominator?

The AI visibility denominator is the count an AI visibility score divides by: the number of tests where the measured state could actually be determined. It is corrupted whenever an indeterminate result is recorded as a zero or a missing measurement is scored as a failure, because the count then includes events that never happened. A trustworthy score reports its denominator alongside the excluded and indeterminate counts.

What does it mean to say an indeterminate is not a zero?

An indeterminate is a measurement the test could not resolve, such as a query where Google rendered no AI Overview at all. Scoring it as a zero treats a non-event as a determinate miss, which deflates the rate and hides the fact that the test never ran. The correct handling is to exclude it from the denominator and report how often the test was actually determinable.

Why does a GEO score report out of 80 instead of 100?

A five-layer score reports out of 80 when one layer was not measured, rather than scoring the missing layer as a zero. Scoring a skipped layer as zero would cost a strong page up to 20 points for a measurement that never happened. Reporting the smaller denominator keeps the missing layer visible instead of burying it inside a fake 100.

Can a single AI visibility percentage be trusted on its own?

A single percentage cannot be trusted until it resolves to its denominator, its exclusions, the states it combined, and the method version that produced it. The same store can read as 0 or as 83 out of 132 depending only on the prompt family sent, so a number with no stated condition is not comparable across time or competitors. Treat the headline as a summary that must open on demand.

What is the USO Evidence Protocol?

The USO Evidence Protocol is a public candidate specification by A. L. MacFarland for preserving evidence boundaries as AI search data moves from observation through classification, aggregation, and reporting. It separates what was observed from what was calculated, inferred, or not established. As of this writing it is a final candidate (v0.9.5) awaiting independent validation, so treat it as a well-specified proposal rather than a settled standard. (MacFarland, A. L. (2026), USO Evidence Protocol v0.9.5, Zenodo, CC-BY-4.0.)

Addendum (19 Aug 2026): The variable denominator is now live in production. Page scores are based on the layers actually measured, so if only four of five layers run, the score shows out of 80 instead of quietly stretching it to 100.

When all five layers are measured, nothing changes: the denominator stays at 100.


About the Author

Artur Ferreira is the founder of The GEO Lab. He developed the GEO Stack framework and leads research into Generative Engine Optimisation methodologies. Connect on X/Twitter or LinkedIn.

Have questions about this topic? Contact The GEO Lab · Return to homepage