Methodology

How we score a client's site.

Five weighted checks. One formula. The same score for every client, so you can stand behind it.

What we measure

We fetch the client's site the way AI crawlers do — a plain HTTP request — and score what that fetch returns. (We also render the page in a real browser and compare, so the report can show how much of the site's content depends on JavaScript.) Then we run five checks, each scored 0–100 and weighted by how much it matters for AI visibility.

Crawler access 20%

Can AI crawlers reach the site? We read its robots.txt for the ten AI crawlers we test — GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, CCBot, FacebookBot, and cohere-ai — then verify with a live fetch. If crawlers are blocked, nothing else matters.

Structure 25%

A clear heading order — one main heading, no skipped levels — plus semantic landmarks (header, nav, main, footer). Best practice, not law: a page with messier structure can still be read, it just gives AI less to work with. Clean structure helps AI parse a page into answers.

Metadata 25%

Title tag, meta description, canonical URL, OpenGraph tags, and Schema.org markup. These are the signals AI uses to understand and cite the page.

Content 15%

Is there enough substantive text for AI to work with? We measure word count, content depth, and whether key information appears in the raw HTML (not just after JavaScript runs).

Performance 5%

Page weight and load characteristics. Lighter pages get crawled more thoroughly.

The scoring formula

Let C, S, M, Co, P be the category scores (each 0–100). The weighted base score is:

$$\text{Base} = 0.20C + 0.25S + 0.25M + 0.15\text{Co} + 0.05P$$

Maximum base: 90 points (0.90 × 100)

Sites with helpful Q&A content earn a bonus; sites with none lose points:

$$B(s) = \begin{cases} -10 & \text{if } s \le 40 \\ 0 & \text{if } 41 \le s \le 70 \\ +10 & \text{if } s > 70 \end{cases}$$

where s is the FAQ subscore (0–100)

The final score applies the FAQ adjustment, with two capping rules:

$$\text{Score} = \min(\text{Base} + B(s), 100)$$

Capping rules:

  • If C = 0 (crawler access scores zero — three or more of the ten crawlers blocked), then Score ≤ 40 regardless of other categories.
  • Score is clamped to [0, 100]. The natural maximum is 100 (90 base + 10 FAQ bonus).

Why these weights

The weights follow what our study of 10,369 business websites showed actually separates readable sites from unreadable ones. Structure (25) and metadata (25) carry the most weight because that's where facts get lost — their study averages are 70.5 and 80.8, the widest gaps after FAQ. Crawler access (20) is weighted heavily because it's a gate: blocked crawlers make every other check moot, which is also why a site scoring zero on crawler access is capped at 40. Content (15) matters, but volume alone doesn't make facts findable. Performance (5) carries the least weight because it's nearly universal — the study average is 99.0, so it rarely separates one site from another. The FAQ adjustment sits outside the 90 points because question-and-answer content is the most directly quotable material on a site: sites that have it earn up to 10 back, sites with none give up to 10 up.

One honest limit: the score measures how completely AI systems can read a site. It does not measure — and cannot guarantee — whether an assistant will cite or recommend the business. That also depends on reviews, directories, competition, and the question asked.

Score bands

BandScoreMeaning
Ready90–100AI systems can find and fully read the site — the strongest position to be cited from, though readability alone never guarantees a citation.
Workable70–89Usable, but specific fixes would improve AI visibility.
Needs Work0–69Significant barriers prevent AI from understanding the site.

Worked example

A site scores: \(C=100, S=80, M=70, \text{Co}=60, P=90\), FAQ subscore \(s=75\).

$$\begin{aligned} \text{Base} &= 0.20(100) + 0.25(80) + 0.25(70) + 0.15(60) + 0.05(90) \\ &= 20 + 20 + 17.5 + 9 + 4.5 = 71 \end{aligned}$$ $$B(75) = +10 \quad (\text{since } 75 > 70)$$ $$\text{Score} = \min(71 + 10, 100) = \mathbf{81} \rightarrow \text{Workable}$$

What we don't do

  • We don't score the JavaScript-rendered page. The score reflects the plain fetch — if content only appears after JS executes, we report it as missing, because that's what simple crawlers see. A separate browser render runs only as a comparison, so the gap shows in the report.
  • We don't guess. Every finding in the report links to the exact location on the client's site where we found the issue — proof you can show the client.
  • We don't sell your data. Scan results are private to your account.

Informational checks

These don't affect the score, but we report them because they matter:

  • llms.txt — whether the site has one, and what it contains
  • Raw vs. rendered — word count comparison showing how much content lives behind JavaScript