Diagnostic score · Version 1.3.1

No unexplained numbers. Version 1.3.1.

Our technical diagnostic for sampled pages. Not a ranking metric from an AI or search provider.

How the number is calculated

Score = 100 × passed weight ÷ tested applicable weight, rounded to the nearest integer. Coverage = tested applicable weight ÷ all applicable weight. Unknown checks affect coverage and never pretend to pass. Inapplicable checks are excluded. Page-level weights are divided equally across sampled pages.

If 80 weighted points pass out of 90 tested points, the score is 89. If another 10 points could not be tested, weighted coverage is 90%. Read both numbers together.

The report also counts how many checks could run. A check could run when its result is a pass, a failure, or not applicable. Unknown means that check could not be completed. If robots.txt disallows our crawler, or fewer than 60% of the checks could run, the result is a limited check. It lists what those checks found and does not show an overall score, because a number from so few checks would mislead.

Version 1 rules

Maximum weights before applicability normalization
Category / checkWeightSource
Crawler accessibility
Documented search crawler policies allow the target
30%IETF
Indexability
Pages return successful HTTP responses
15%Google
Indexability
No observed noindex directive
10%Google
Content extractability
Descriptive page title is available
8%Google
Content extractability
Exactly one primary heading is available
6%W3C
Content extractability
Heading levels follow a logical hierarchy
3%W3C
Content extractability
Social sharing metadata is present
3%Google
Technical structure
Mobile viewport is declared
3%W3C
Agent accessibility
Images declare dimensions
2%Google
Content extractability
Text is present in raw HTML
6%Google
Technical structure
Canonical configuration is unambiguous
8%Google
Technical structure
A valid sitemap is discoverable
7%Sitemaps.org
Structured data
Existing JSON-LD parses successfully
5%Schema.org
Agent accessibility
Native form controls have apparent names
5%W3C
Content extractability
Meta description is present and length-appropriate
5%Google
Content extractability
Page provides substantive extractable text
6%Google
Content extractability
Document language is declared
3%W3C
Structured data
Organization or Person identity schema is present
5%Schema.org
Agent accessibility
Images have alt attributes
5%W3C
Technical structure
Sitemap URLs declared in robots.txt are reachable
4%Sitemaps.org
Structured data
LocalBusiness markup includes name, address, and phone
4%Schema.org
Structured data
FAQPage questions include a name and an accepted answer
3%Schema.org
Content extractability
A visible question-and-answer section is present
3%Google
Structured data
Business name, address, and phone agree across sampled pages
4%Schema.org

Why these categories

A separate AI readiness component would double-count crawl and content evidence. Trust, authorship, freshness and citation quality require context and are not numerical penalties in version 1.

Intentional policy choices

Training-only crawlers do not affect the search-policy score. Google-Extended and Applebot-Extended are control tokens, not search crawlers, so blocking them is not a search penalty. Missing llms.txt has no penalty. Google Search says it does not use that file. Missing JSON-LD, LocalBusiness markup, forms or canonical declarations is not automatically a failure. When those types are present, missing names, phones, addresses or FAQ answers are reported. Malformed or conflicting canonicals are reported. Sitemap absence has a small weight. A sitemap URL declared in robots.txt that returns 404 or 410 is reported separately. A successful response that is not sitemap XML is reported the same way.

What the tests cannot prove

Our HTTP observations are not verified crawler activity. Policy is not enforcement. Raw markup does not prove keyboard operation or rendered visibility. JSON-LD syntax does not establish rich-result eligibility. We do not measure indexing, rankings or citations.

Version history

1.0.0: initial raw-HTML model. Weights total 100 before applicability normalization. Reports retain the version so algorithm changes are not mistaken for website changes.

1.1.0: added meta description length, extractable word count, a document-language check and an Organization/Person identity-schema check. All four run on raw HTML with no third-party data source. Weights total 124 before applicability normalization.

1.2.0: added title-length, exactly-one-H1, heading hierarchy, Open Graph and Twitter card presence, mobile viewport and image dimension checks. These inspect raw markup only. Browser-rendered layout, Core Web Vitals, remote image weight, backlink metrics and credentialed search data are not measured. Weights total 135 before applicability normalization.

1.3.0: named AI product tokens are matched to their own robots group, otherwise the * group. Added checks for robots-referenced sitemap responses, LocalBusiness name/address/phone when that type is present, FAQPage question and answer fields when that type is present, visible question headings, and name/address/phone agreement across the sample. llms.txt stays unscored. Page speed and live AI-mention checks are not part of this version. An overall score is withheld when robots.txt disallows our crawler or fewer than 60% of checks could run. Weights total 153 before applicability normalization.

1.3.1: same weights as 1.3.0. Robots-declared sitemap URLs are fetched and checked as sitemap XML, including when the content type is not XML. A 200 response that is not a urlset or sitemapindex fails instead of staying unknown. Name, address, and phone agreement passes only when a name, a phone, and an address field can each be compared on two pages. Agreement on a name alone is unknown.

Run a readiness scan →