CrawlCheck

Guides · 2026-08-28 · By · 0 views

How to measure AI and agent visibility without trusting a vendor's score

Three measurements, in order, each of which you can reproduce yourself. Two of them are free, and the one people buy first is the one that depends on the other two being clean.

What a dated series records that a one-shot audit cannot — from CrawlCheck’s stored history, read 2026-08-28
110 hoursone finding held, identical, across consecutive dated scans of the same site (Aug 14–19)
4 daysa cache finding resolved and returned on four separate days across the sites we watch
0 open todaythe same sites scan clean right now — an audit run today would report nothing

A single audit measures the day it ran. The 110-hour hold and the four returns exist only because something was already watching — a dated series cannot be produced retroactively at any budget.

Most of this category sells a percentage. A percentage is fine if you can say what would make it wrong; the problem is that most of them cannot, and a number you cannot falsify is a label rather than a measurement.

Here is the version you can run and check, in the order that makes each step meaningful.

Measurement 1: can the retrieval layer read you #

Free, reproducible, and the only one where the answer is unambiguous. Fetch as a non-browser client, from outside your own network, on the bare URL.

What to recordPassFails on
robots.txt content typetext/plain5.9%
Bare URL vs cache-bustedidentical17.4%
Crawler UA vs browser UAsame status and size5.8%
Nonexistent path404, unlike homepage6.8%
Visible text share of payload20% and up27.6%

Record the raw values, not a grade. A status code and a byte count are things you can argue with; a score out of a hundred is not. Re-run on a schedule, because this drifts with every deploy.

Citing this figure. The numbers above are recomputed from the live record when this page loads, so link the anchor rather than freezing a copy: https://crawlcheck.io/blog/your-site-was-clean-the-day-you-audited-it#the-gap. Sentence form, as of 2026-10-13: Among the 48 sites CrawlCheck measured daily between 2026-08-14 and 2026-10-13, 72.9% carried a machine-layer defect on the latest reading, while 91.7% carried one at least once — a gap of 18.8 points invisible to any single-day audit.

Measurement 2: which crawlers actually arrive #

This one needs your server logs, and it is the measurement no external tool can produce for you. It is also the one most often done wrong, because the obvious method — counting log lines by user-agent — answers a different question than people think.

Across 2,510 checkable claims in this dataset, 37% came from an address outside the range the operator publishes. Forgery rates by identity: ChatGPT-User 90.1%, OAI-SearchBot 57.7%, PerplexityBot 51.9%, GPTBot 47%, Applebot 37.9%, ClaudeBot 16.4%, Googlebot 9.5%. Four retired or training-specific identities came back at 100%.

So the method is: for each request claiming a crawler identity, check the source address against the operator's published range. OpenAI, Anthropic, Google, Microsoft, Perplexity and Apple all publish one. Count only what verifies. Operators with no published feed — Meta-ExternalAgent, Amazonbot, AhrefsBot, SemrushBot, DataForSeoBot — are unverifiable rather than fake, and should be reported as a separate bucket instead of folded into either.

What that gives you: which engines genuinely fetch you, how often, which paths, and whether that changed after you fixed something. It is the only causal link available between work you did and attention you received.

Measurement 3: presence in answers #

This is what the category sells, and it is worth doing — after the first two, because it measures an outcome the first two make possible.

Four rules make it a measurement rather than a label.

Name the surface. An API is not the app. ChatGPT performs retrieval, calls tools and carries personalisation the raw API does not reproduce; AI Overviews is a different system again. There is no public API for the consumer surfaces, so every vendor queries what it can reach. That is acceptable as long as the label says so.

Name the model, mode and date. Grounded retrieval and generation from weights are different systems and averaging them produces a number about neither.

Record presence or absence, not a rank. There is no position three in a generated answer. A binary you can verify beats a percentage you cannot.

Publish the churn. Ask the same question twice and answers differ; ask next week, after a model update, and they differ more. The stability across dated repetitions is the actual signal, and it is the part most tools omit because it makes the headline look unsteady.

Why the order is not negotiable #

The temptation is to start at measurement three because it sounds like the outcome. It is, and that is exactly why it is uninterpretable on its own.

If you are absent from answers and your machine layer is broken, you have learned nothing about your content, your authority or your market — you have measured a cache. Across the scans here, 17.4% serve crawlers a stale object, 27.6% deliver a page that is overwhelmingly code, and 5.8% refuse at least one answer engine outright. Any of those makes a share-of-voice figure a measurement of the obstruction rather than of you.

Run in order, and each step makes the next one interpretable. Run in reverse, and you will spend months on content while the actual cause sits in a header nobody read.

What to put in the report #

Three columns and a date, per repetition: what was asked, what surface answered, whether you appeared. Plus the machine-layer status on the same date, so a change in one can be read against the other.

Then apply the test to your own report before anyone else does: what would have to be true for this number to be wrong, and how would I find out? Measurement one fails that test loudly, which is what makes it worth the least attention and the most trust. Measurement three usually cannot answer it at all — which does not make it useless, but does mean it should never be the number on the front page.

Agent visibility adds one measurement

Visibility to an answer engine is about being fetched, read and cited. Visibility to an agent adds being usable: the fetch a person triggers has to return the content, and anything the agent is asked to do next has to be possible without a human-only step.

MeasureAnswer-engine visibilityAgent visibility
FetchedNamed crawlers get a 200 with contentUser-triggered fetchers (ChatGPT-User, Claude-User and Perplexity-User) get the same
ReadText is in the server responseSame, plus nothing in a real browser hides it
CitedYour page appears as a sourceYour page is the one the agent quotes back
UsedNot measuredThe next step (call, form, booking) works for the agent

Every row except the third is measured on your own site, with bytes you can keep; the third is sampled from answers and drifts, which is why it belongs at the end of the report and never at the top.

Findings behind this #

Every figure above comes from a measurement written up in full, with the date, the method and the raw numbers.

Every figure above came out of CrawlCheck.

Point it at your own domain and see the same measurements, free.

Scan a domain — free

The main product

Found this on your own site? We fix it for $749.

Scan free to see where you stand. The fix is one site, every finding implemented and re-measured, with a sealed before and after.

Questions this post answers

How do you measure AI visibility?

In three steps: verify that crawlers can fetch and parse your site, verify from your server logs which crawlers actually arrive by checking source addresses against published IP ranges, then record presence or absence in answers with the model, mode and date attached. The first two are free and reproducible.

Can I just count crawler hits in my server logs?

Not reliably. A user-agent is a claim, not an identity. Of 2,510 checkable claims here, 37% came from outside the operator's published range, including 47% of traffic naming itself GPTBot and 90.1% naming itself ChatGPT-User.

What makes an AI visibility number trustworthy?

That you can say what would make it wrong and how you would find out. Naming the surface queried, the model and mode, the date, and reporting presence rather than a rank, with the variation across repeated runs published rather than smoothed away.

How do you measure visibility to AI agents?

Measure the same fetch-and-read steps as for answer engines, but with the user-triggered fetchers (ChatGPT-User, Claude-User and Perplexity-User) as well as the crawlers, then test whether the action a person would delegate, such as a call or a quote form, can be completed without a human-only step.

Related findings

How anything measured in this article was measured15client identitiesone second, one address5machine filesapex and www114named agentsresolved from robots.txt24sections scoredreach, read, quoteHow anything measured here was measured15 client identities5 machine files114 named agents24 sections scoredone second, one addressapex and wwwresolved from robots.txtreach, read, quote
No account, nothing installed, and the same sequence on every domain — which is what makes one scan comparable to another. Run it on your own site.

Comments

Comments are read before they appear. Nothing is published automatically, and no account is needed.

Writing about this? Facts, live figures and marks — every number on that page is dated and traceable to a scan.

All guides · The dataset · How the dataset works