How every number on this site was measured
Every number we quote on this site comes from one experiment. This page is the whole thing — the design, the raw counts, and the exact conditions behind each figure, so you can reproduce any of them or show us where one is wrong.
The question we started with
When an AI assistant answers a question, it does not read the web. It reads a short list — a retrieval pool — of pages some system decided were worth fetching. Most of those pages get read and then thrown away. The answer cites a handful.
So there are two completely different ways to lose. You can fail to enter the pool at all, or you can enter it and still lose the citation to someone else. From the outside these look identical: you are not mentioned. We wanted to know whether the second failure — being in the pool and losing anyway — is diagnosable, and what predicts it.
The design
Five real search questions, each expanded into fan-out sub-queries, run through a web search. That produced a pool of 48 unique sources. Every source was then measured twice, on the same questions, with the same model, at the same temperature:
- Condition A — the model saw only each result's title and snippet. This mirrors the first hop of an AI search: reading the result list.
- Condition B — the model saw the title, the snippet, and the page body. This mirrors an assistant actually opening the page.
Everything else was held fixed. Five runs per condition plus one reversed-order run, with a cache-bypass nonce on every request. Because the two conditions used the same sources, any difference has to come from whether the model could read the page.
What came out
The result that surprised us was structural, not a single number. In condition A, where the model only saw titles and snippets, the page-level features were nearly flat: the average absolute correlation was 0.088, and the single largest was a negative 0.40 on h1 count — a result we have no mechanism for and do not treat as real. In condition B, where the model could read the pages, nine of the fifteen page-level features moved in the positive direction and the average absolute correlation rose to 0.114. That is a small move, and at this sample size exactly one feature — JSON-LD, at 0.391 — clears the significance threshold.
We also found that instability is a property of the query, not uniform noise. Run-to-run overlap of the cited set ranged from 0.472 to 0.700 across our five questions. One question — robots.txt allow ai crawler gptbot — was answered from the same two or three sources every time; another — best ai ppt maker — had anywhere between two and five of its fourteen sources cited from one run to the next. That distinction is the most promising thing we have, and it is also the least verified: five questions is not enough to establish it.
What these numbers cover, and what they do not
Our citation model is not ChatGPT. We use gpt-oss-20b, chosen because it is independent of us and reproducible. Its citation preferences cannot be assumed to match any commercial assistant, and we do not present them as if they do.
48 sources is small. At that sample size the two-tailed significance threshold for a rank correlation is about 0.285. Exactly one feature clears it — JSON-LD, at 0.391. Everything else we report is a direction, not a finding.
Correlation is not causation. Pages that carry JSON-LD may simply be built by people who already know what they are doing. The honest reading of the 36% versus 10% split is that structured data is a marker of a well-built page, and it may or may not be the cause of the citation.
The retrieval pool is not an assistant's retrieval pool. It came from a general web search returning five results per query. A commercial assistant's pool is built differently, from different indexes, with different ranking.
Page bodies were truncated to 900 words. In our own data length did not show up as an advantage at all: the longest page in the pool runs to 11,582 words and was cited zero times in six runs, and the 8,184-word page was cited in four of five.
The crawler finding rests on five blocked pages. Five of the forty-eight sources refuse a retrieval crawler (OAI-SearchBot, ChatGPT-User or PerplexityBot). Seven refuse at least one AI crawler of any kind, but the other two block only training crawlers, which is not what this finding is about. The mechanism is sound — a crawler that cannot fetch a page cannot cite it — but the sample behind the number is five. Treat it as a mechanism you can verify yourself, not as an effect size.
llms.txt has not been shown to work. It is a proposed convention with uneven adoption. We generate it because it is cheap and harmless, not because we have evidence it moves citations. Anyone who tells you otherwise is selling something.
One of our earlier results was wrong. An earlier round concluded that page-level features do not predict citation. That conclusion was an artifact: in that round the model could not see the pages at all, so of course page features made no difference. We are publishing the correction because the mistake is instructive — a measurement that cannot see the thing it is measuring will always report no effect.
What we will never sell
We do not sell a single visibility score. Three tools measuring the same brand against the same forty prompts have been observed to report 22, 19 and 24 hits. A number that moves depending on who is measuring is not a number you can act on.
We do not put findings behind a paywall. The check gives you every result. What is paid is labour — someone going into your site and making the changes — not information.
We do not accept payment to change a ranking. Anything we are paid for is marked as paid. If a tool of ours ever ranks anything, money will not move it.
This page is the method. If you find an error in it, the error is the interesting part — we would rather correct it in public than defend it.
Questions about the method
Is your citation model the same as ChatGPT?
No. We use a reproducible third-party model, gpt-oss-20b, at temperature 0.7. It is independent of us and repeatable, but its citation preferences cannot be assumed to match any commercial assistant.
Why do you publish the limitations?
Because every other tool in this category publishes a score without a method. If our numbers cannot survive being read, they should not be quoted.
Start from the top of the pipeline
Check your own site against these findings
- Eight checks on a pasted page
- Every result shown, nothing locked
- No account, nothing stored
Have us do the whole thing
- Full fix list across every template
- We make the changes
- Before/after report, 30-day re-check