# How agents behave

What follows is drawn from running the audit pipeline against real brands — the model
panel's own answers, the crawler's own findings, and the score's own movement over time.
Where something has been measured, the measurement is given. Where a design choice was
made without measurement, that is said outright rather than dressed up as a finding.

## Model families disagree with each other

The audit asks the same question of four model families — OpenAI, Anthropic, Google,
Perplexity — because they routinely return different brands for it. This is not an edge
case; it is the normal result, and it is why every report contains a per-engine
breakdown rather than a single verdict.

The practical consequence: **"am I visible to AI" is not a well-formed question.** You
are visible to some families and not others, and the mix shifts. A single-model check
tells you about one family on one day.

This is also why an invisible query needs a **majority** of engines to miss you before
it costs points. One family omitting you is disagreement; three out of four omitting you
is a pattern.

## The same model gives different answers to the same question

Three audits of the same brand, same code, temperature 0, seconds apart, scored 40, 25,
and 25. The spread was one question flipping between visible and invisible.

Temperature 0 reduces variance. It does not eliminate it, and it does not make responses
reproducible — the model behind a published ID changes without notice.

The consequence for anyone measuring this channel: **a single observation is not a
measurement.** Treat any one-shot check of "does ChatGPT recommend me" as an anecdote.
Full detail in [Measurement reliability](../audit/reliability.md).

## Absence is the default, not the exception

Across audited brands the common finding is not a bad ranking. It is not being in the
answer at all, for questions squarely in the brand's own category. Most of what an
audit surfaces is invisibility rather than misrepresentation.

## Agents read structured data, and the structure has to be authored

The crawler looks for the same machine-readable surfaces an agent would: JSON-LD
(`Product`, `Organization`, `Service`, `FAQPage`, `SoftwareApplication`), price and
availability, review markup, and `llms.txt`.

One finding worth stating: **a served file is not an authored file.** Some hosting
platforms emit a default `llms.txt` automatically. The check classifies these and does
not count them, because a generated file describes the platform's idea of the site
rather than the brand's. The same caution applies to any auto-generated structured data —
its presence in the HTML is not evidence anyone decided what it should say.

## Sites are frequently unreadable in ways their owners cannot see

A meaningful share of crawls never get past the homepage — no sitemap, no discoverable
internal links, or an outright block. When that happens the audit **withholds** rather
than scores, because you cannot report that a site lacks a pricing page when you never
reached the second page.

If an audit cannot read your site, an agent very likely cannot either. A withheld score
is itself the finding.

## What has *not* been established

This is where honesty costs something, so it is stated plainly.

!!!danger The penalty weights are design choices, not measured coefficients
An invisible query costs 15 points and a missing signal costs 10. Those numbers were
chosen to rank causes sensibly against each other. They are **not** empirically derived
from measured causal lift — no controlled experiment has shown that adding `Product`
schema produces a specific amount of additional model visibility.

Anyone claiming a precise causal exchange rate between structured data and AI
recommendation, including anyone citing this system, is claiming more than the evidence
supports.
!!!

Also not established:

- **No causal claim that fixing a signal moves visibility.** The two halves of the score
  are measured independently and have not been shown to drive each other.
- **No measurement of how fast the channel changes.** Monthly reruns exist because
  monthly felt defensible, not because a decay rate was measured.
- **No verification of which model actually served a response.** The gateway is asked for
  a model ID; the ID it served is not currently read back. Silent substitution cannot be
  ruled out.
- **No large-sample archetype stability data.** A classification flip can move a total by
  up to 40 points, and how often that happens across many brands has not been measured.

## What follows from all this

- Measure repeatedly; never trust one run.
- Measure across model families; they disagree by default.
- Treat structured data as making yourself *legible*, not as buying visibility.
- Treat any AEO vendor's precise causal claims — including any built on top of this
  system — with the scepticism the underlying evidence warrants.
