Methodology

How we score AI visibility

We score ten pillars from live requests made at the moment you submit a URL. Seven are deterministic parses of your own files; two are language-model judgements of your text; one is a live query against Gemini. Any pillar we cannot measure is marked unavailable and its weight is redistributed proportionally across the rest — we never fill a gap with an estimate.

Why the weights are what they are

Weight follows two things: how much a failure costs you, and how confident we are in the measurement. Content extractability carries the most (15%) because retrieval operates on passages and a badly structured page fails everywhere at once. llms.txt carries 8% because no major assistant has demonstrated it reads the file. Base weights sum to 110 before normalisation, since share of voice is reported rather than scored.

The redistribution rule

If a pillar cannot run — no Places key, Reddit refusing the request, share of voice testable on one engine only — we remove its weight and rescale the remaining pillars proportionally so they still sum to 100. Your report states every redistribution explicitly, with the original weight named. Two audits of different sites can therefore use different weight sets, and both will tell you so.

The ten pillars

Crawlability & AI bot access

12%

Live GET of /robots.txt and sitemap discovery

We parse the robots.txt group for each of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended and Bingbot. An explicit allow scores full marks, an implicit fallback to your wildcard group scores 70% of them, a disallow scores zero for that agent. Sitemap presence is 30 points, verified by fetching the file and checking it contains a urlset or sitemapindex element.

Why it matters. This is the only pillar that can zero out every other one. A blocked crawler never sees your structured data.

Where it stops. We check the homepage-level rules. Per-path Disallow rules deeper in the file are read but not enumerated per URL.

llms.txt & agent readiness

8%

Live GET of /llms.txt

Existence is 55 points, real length above 400 characters is 15, three or more linked resources is 20, a valid '# Name' H1 is 10. We check the response body, not the status code, because many sites return a soft 200 HTML page.

Why it matters. Cheap to publish, useful to agentic tools, and unproven as a retrieval input for the major assistants.

Where it stops. Nobody has published evidence that ChatGPT or Claude read this file at answer time. We weight it at 8% for exactly that reason.

Structured data

13%

JSON-LD blocks parsed from the served HTML

Valid JSON-LD present is 30 points. An identity node — Organization, LocalBusiness or Person — is 25. FAQPage is 10, Article or Product is 10. The final 25 come from required-field completeness: we name every missing field, for example an Organization without sameAs.

Why it matters. Prose is ambiguous. JSON-LD is not. It is how a model learns who published a page and when it last changed.

Where it stops. We read the HTML as served. Schema injected later by client-side JavaScript may be missed — which is also true of some crawlers.

Content extractability

15%

Rendered text via Jina Reader, judged by Gemini

We extract the rendered page text and ask Gemini to score whether the page opens with a direct, self-contained answer, whether headings are question-shaped, and whether paragraphs survive being quoted alone. The model returns findings that quote your actual text.

Why it matters. The single highest weight, because retrieval works at passage level. A page that only makes sense read top to bottom does not get quoted.

Where it stops. This is a model judgement, not a deterministic parse. Two runs can differ by a few points. We show the reasoning so you can disagree with it.

Evidence & E-E-A-T

13%

Same Gemini call as extractability

We combine both judgements into one request to keep quota use down. The model looks for named sources, dated statistics, visible bylines and credentials, and penalises superlatives with no data behind them — naming each one it finds.

Why it matters. When two pages answer the same question, the one with a dated, sourced number gets attributed.

Where it stops. Model judgement again. It reads what is on the page, so credentials living only on an About page will be missed.

Entity authority

8%

Wikidata wbsearchentities and Wikipedia search APIs

We extract your brand name from Organization schema, og:site_name or the title tag, then query both APIs. A Wikidata match is 55 points, a Wikipedia article is 45.

Why it matters. Assistants resolve names to entities. Without a public node, you are a string that could mean anything.

Where it stops. We match on name, not on domain, so collisions are possible. We say so in the report and ask you to verify the match.

Off-site citation sources

10%

Reddit public search JSON

We search Reddit for your brand and domain over the last twelve months and score thread volume and subreddit spread. LinkedIn and Quora have no free API, so we generate the exact search query as a link and label it manual.

Why it matters. Reddit is one of the most-cited domains in AI answers, far out of proportion to its traffic.

Where it stops. Reddit occasionally refuses automated requests. When it does, we mark the pillar unavailable and redistribute — we never substitute an estimate.

Local & reputation signals

10%

Google Places API (optional key)

Profile completeness across address, phone, website and hours is 40 points, review volume on a log scale is up to 35, and a rating at or above 4.3 is 25.

Why it matters. For anything with a physical footprint, assistants lean almost entirely on the Business Profile record.

Where it stops. Places requires a key. Without one connected, this pillar is marked unavailable and its weight is redistributed. We do not guess local data.

Multimedia & accessibility

6%

HTML img and video parsing plus JSON-LD

Alt-text coverage across all img tags is the base score. If video is embedded, alt coverage counts for 70% and VideoObject schema for 30%. Pages with no video are not penalised.

Why it matters. A text pipeline reads your alt attribute or nothing at all.

Where it stops. Decorative images with intentionally empty alt attributes count against coverage. Read the raw numbers, not just the score.

AI share of voice

15%, redistributed

Live Gemini calls

Gemini generates four category prompts from your page — no brand name in them — and we run each as a real query. Mentions are then classified positive, neutral or negative by a second call. We report mention rate across the prompt set, never a single answer.

Why it matters. It is the outcome every other pillar exists to produce.

Where it stops. Only Gemini is free to query. We do not test ChatGPT, Claude or Perplexity and we do not model them, so this pillar is excluded from the score and its 15% is redistributed. Connect your own keys to include the rest.

Ready to see your own numbers? Run a free audit.