Methodology
How the Visibility Score is calculated.
The score is a 0–100 number built from 43 pass/fail checks on your page's HTML, robots.txt and llms.txt. It measures whether AI and search engines can read, understand and act on the page. It does not measure whether any AI engine actually cites you.
How is the number put together?
Each of six dimensions gets a score from 0.0 to 1.0: the share of its checks that pass, rounded to one decimal. The dimensions are grouped into three pillars, each shown on a 0–100 scale.
- AI Visibility is the geometric mean of GEO Readiness, Dual Fit, Entity Coherence and Bot-Crawl Health, times 100. A geometric mean means one weak dimension pulls the pillar down hard; a dimension at 0.0 is treated as 0.001, so the pillar lands near zero.
- Search Foundation is the SEO Foundation dimension times 100.
- Convert is the Conversion Readiness dimension times 100.
The big number on the report is the Visibility Score, a weighted blend of the three:
Visibility Score = round(0.5 × AI Visibility + 0.25 × Search Foundation + 0.25 × Convert)
AI Visibility carries half the weight because it is what this tool exists to measure. The verdict uses AI Visibility alone: PASS at 50 or above, WEAK below 50, and HARD-BLOCK when a hard-block condition is hit, whatever the numbers say.
What triggers a hard-block?
Some failures make citation impossible no matter how good the rest of the page is. The verdict becomes HARD-BLOCK if any of these is true: robots.txt blocks every AI retrieval bot site-wide (directly or through User-agent: *), the page has fewer than 50 words of body text in its HTML, the PerplexityBot fetch gets HTTP 403, or every Dual Fit check fails. The pillar scores and the blended number are still shown, so you can see what else needs work. If we cannot fetch the page at all, or it returns an HTTP error, there is nothing to score and the report says so.
What does the crawler fetch?
For each audit our server fetches four things at the same time: your page and your robots.txt and llms.txt, all with the user-agent CitationDeskBot, plus one more request to your page as PerplexityBot to see whether AI bots get through your firewall or CDN. It does not run JavaScript, so text that only appears after scripts run is not counted. AI crawlers mostly do not run it either.
If that server is briefly unreachable, the tool falls back to a scorer in your browser that fetches the page, robots.txt and llms.txt through our proxy. It cannot send the PerplexityBot request, so it uses a slightly different Bot-Crawl Health set: one robots.txt check across AI bots, and two checks it cannot test (same HTML for AI bots, and Cloudflare AI crawler settings) counted as passing and labelled “assumed”. The result carries a note when this happens; running it again a moment later usually gets the full crawler.
Every check, dimension by dimension
SEO Foundation
Search Foundation pillar · 0.0 – 1.0
13 signals. This dimension alone is the Search Foundation pillar.
- The URL is not a numeric-only path such as /p/12345.
- A <title> between 30 and 70 characters.
- A meta description of at least 80 characters.
- Exactly one H1.
- At least two H2 headings.
- At least three internal links.
- WebPage or Article JSON-LD.
- Both OpenGraph and Twitter Card meta tags.
- A canonical link.
- A viewport meta tag.
- A lang attribute on <html>.
- A Sitemap: line in robots.txt.
- No more than two render-blocking <script src> tags in <head> (async, defer and module scripts do not count).
GEO Readiness
AI Visibility pillar · 0.0 – 1.0
10 signals, loosely following the ten characteristics of AI-citable content. Several are single-page proxies, and the result labels them as such.
- Accessible: more than 200 words of body text in the served HTML.
- Useful: more than 400 words.
- Recognizable: Organization JSON-LD.
- Extractable: at least two H2 headings.
- Consistent: more than 400 words. This is a proxy from one page, not a site-wide check.
- Corroborated: at least one sameAs reference in the JSON-LD.
- Credible: Person JSON-LD.
- Differentiated: an opening paragraph exists. Short label-like lines at the top are skipped.
- Fresh: datePublished or dateModified in JSON-LD, a <time datetime> element, or article:published_time meta.
- Transactable: a link containing contact, pricing, signup or subscribe, or a form.
Dual Fit
AI Visibility pillar · 0.0 – 1.0 · Hard-block if all four signals fail
4 signals: does the page serve a human searcher and an answer engine at the same time.
- The title is not blank or a generic word like Home, Index, Untitled or Welcome.
- The opening paragraph has a fact-shaped phrase: "is a/an/the", "defined as", "means", "according to", a percentage or a four-digit number.
- The opening paragraph is under 600 characters.
- At least one H2 ends in a question mark.
Entity Coherence
AI Visibility pillar · 0.0 – 1.0
5 signals about whether the page identifies who is behind it.
- Organization JSON-LD.
- Person JSON-LD.
- At least two sameAs references.
- A link to an /about page.
- Consistent brand name, checked as Organization JSON-LD being present.
Bot-Crawl Health
AI Visibility pillar · 0.0 – 1.0 · Hard-block on a retrieval-bot block, under 50 words, or a 403 to the bot fetch
5 signals. AI crawlers are split by purpose. Retrieval bots (OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User) fetch pages to cite them in live answers. Training bots (GPTBot, ClaudeBot, CCBot, Google-Extended, Applebot-Extended, Meta-ExternalAgent, Bytespider) collect data for model training. Blocking training bots costs one signal. Blocking retrieval bots makes citation impossible, so it is a hard-block.
- robots.txt has no site-wide Disallow: / for any retrieval bot, or for User-agent: *. A missing robots.txt counts as allowed. Blocks on sub-paths such as /_next/ do not count.
- robots.txt has no site-wide Disallow: / for any training bot.
- A non-empty /llms.txt at the site root.
- At least 200 words of body text in the served HTML.
- A request to your page with a PerplexityBot user-agent returns HTTP 200–399.
Conversion Readiness
Convert pillar · 0.0 – 1.0
6 signals. This dimension alone is the Convert pillar. A cited page that gives the visitor nothing to do next earns nothing.
- A primary call to action: a link containing contact, pricing, signup or subscribe, or a form.
- A form or an email input.
- A link containing pricing, plans, buy, checkout or demo. Pages that send readers to someone else’s checkout (sponsored links, known merchant hosts, affiliate tag parameters) pass this signal as “clear next action” instead.
- Social proof words in the body: testimonials, reviews, rated, trusted by, customers, case study.
- Exactly one H1, plus a first H2 or opening paragraph of 200 characters or fewer.
- A link to about, contact, privacy or terms.
What this score is not
- Not a citation count. A page can score 90 and never be cited, or score 40 and be cited often. The score describes readiness, not outcomes.
- Not a ranking. It does not look up your position in Google, Bing or any AI answer.
- Not a query to any AI engine. The free score never asks ChatGPT, Claude, Perplexity or Gemini anything. It reads your page and nothing else, and we keep no history of it on our side. Your browser remembers your last score for the same URL so it can show the change.
Observed citations are what CitationDesk Pro reports. It sends the questions you choose to Gemini with grounding and to OpenAI web search, and records which of your pages they cite. Perplexity is being added. If you want to check ChatGPT by hand first, our guide shows how to test whether ChatGPT cites your site, and this one covers tracking across four engines.
Where the signals come from
Every check is a rule applied to what the server returned: a tag present, a count above a threshold, a pattern in the text. No language model scores your page, and nothing is filled in with an average. Some checks are rough proxies. Word count stands in for depth, and one page stands in for the whole site on the Consistent check. Those are labelled in the result so you can judge them.
Changes to this methodology
- 2026-09-24: this page was rewritten to match the scorer exactly. It now lists the checks the crawler actually runs, the 50/25/25 blend behind the headline number, and the real hard-block conditions.
Ready to run it on your site? Get your free Visibility Score. Or read the guides behind the checks.
Or skip the rubric: email me and I'll send a free sample of the weekly citation report Pro subscribers get.