How the AI Visibility Score works
Every report is computed from evidence gathered in a single scan: one honest crawler-style fetch of your page, one real browser render, one robots.txt evaluation for every known AI bot, and one user-agent probe per bot. Nothing is estimated from third-party indexes.
Prose Parity (50% of the score)
We extract the main content text from the browser-rendered page, split it into overlapping 8-token shingles, hash each shingle, and measure what fraction of those shingles also exist in the initial HTML that a non-JavaScript crawler receives. This is containment, not similarity: the question is one-directional. What a browser user sees either shipped in the HTML or it did not.
Two honesty mechanisms apply. Pages without semantic containers are measured on all visible text, stated in the report. Pages that serve different content on every request are detected by comparing two crawler fetches with each other, and parity is judged relative to that self-similarity, also stated in the report.
Retrievability
The same containment, but the crawler-side corpus additionally includes
string values harvested from inline JSON payloads such as
__NEXT_DATA__ hydration data. A page with low parity but
high retrievability gets a distinct verdict: the content is technically
present but poorly structured for extraction.
Access (25%)
Starts at full marks. Blocking AI search crawlers in robots.txt, blocking assistant user agents, server-level user agent enforcement, and noai/nosnippet directives each deduct per the weights published in the scanner source. A page whose baseline fetch fails outright is access-fatal: no other measurements matter until crawlers can fetch it.
Structure (15%) and Schema (10%)
Structure checks the initial HTML for a title, meta description, a single H1, a canonical, heading coverage roughly every 300 words, and the absence of oversized unbroken text blocks. Schema checks that JSON-LD parses, declares types, and carries the required properties for those types. Structured data that only appears after JavaScript runs is capped at a quarter of the schema score, because AI crawlers never see it.
Grades
A at 90+, B at 75+, C at 60+, D at 40+, F at 0+. A perfect parity, access, and structure page with no structured data scores exactly 90: readable is not the same as complete.
On llms.txt
Informational only. Independent 2026 data (Ahrefs, SE Ranking, Google documentation) shows no measurable citation effect from llms.txt. It is checked because it costs nothing and some assistants read it, but it moves neither crawling nor ranking.
Calibration
The scorer is calibrated against a hand-labelled panel of public sites spanning exemplary server-rendered pages through pure client-side applications. The current build holds a Spearman rank correlation of at least 0.9 against panel labels with zero inversions between server-rendered controls and client-side offenders. Calibration runs are logged in the project record, and every degraded measurement path states in the report what was measured, what was not, and why. The scanner never emits a confident wrong grade: pages it cannot measure honestly get no grade at all.