Command Palette

Search for a command to run...

Scores, grades and scan filters

How the AI Site Scanner turns 31 weighted checks into category scores, a 0 to 100 score and an A+ to F grade, and how site type and Customize scan change it.

The score is the weighted share of checks that passed. Each category scores the passed weight as a percentage of its total weight, the overall score is the average of the category scores weighted by each category's total weight, and the grade is read off that score from a fixed table. Checks that could not be evaluated, and checks you filtered out, do not count either way.

How is the category score calculated?

For each category, the scanner adds up the weights of the checks that ran and could be evaluated, adds up the weights of the ones that passed, and divides:

text
category score = round(100 × passed weight ÷ evaluated weight)

A check marked not applicable is removed from both sides. A category with no evaluated checks gets no score and no card in the report.

Take Content Accessibility on a content site where every check passes except llms-txt (weight 8) and json-ld (weight 7). The evaluated weight is 48 and the passed weight is 33, so the category scores round(68.75) = 69.

How is the overall score calculated?

The overall score averages the category scores, each weighted by that category's evaluated weight:

text
overall score = round(Σ(category score × category weight) ÷ Σ(category weight))

Since each category counts in proportion to its weight, this works out to the passed weight divided by the evaluated weight across the whole scan, apart from a small difference from rounding each category first. On a whole-site scan, the extra pages are graded separately and do not change this number; see Page scan vs whole-site scan.

A scan that could not load the site at all is not scored. It returns a score of 0, grade F and the reason the fetch failed, and it is not stored as a report.

How is the grade decided?

From the overall score, with these thresholds:

Score Grade
97 to 100 A+
93 to 96 A
90 to 92 A-
87 to 89 B+
83 to 86 B
80 to 82 B-
75 to 79 C+
70 to 74 C
60 to 69 D
0 to 59 F

The scan statistics on the scanner page count a site as "not agent-ready" when its score is below 60, the same line where the grade drops to F.

How are issues ranked?

Each failed check becomes an issue with a severity taken from its weight:

Weight Severity
7 or 8 critical
4 to 6 warning
2 or 3 info

The report's Prioritized issues list shows up to six issues, critical first. Every failed check is still in the category cards' "to fix" counts and in the checks array of the HTTP endpoint response, and the command line prints all of them.

Why does the site type change my score?

Because it changes which checks run. Many checks only make sense for one kind of site: a blog has no reason to publish OAuth metadata, and an API has no reason to publish llms-full.txt. The site-type filter picks the checks:

Filter Label in Customize scan Checks that run Total weight
all (default) All Checks All 31 123
content Content Site 19: the 11 "All" checks plus the 8 content-only checks 93
api API · Application 23: the 11 "All" checks plus the 8 protocol and 4 commerce checks 81

With the default all, a content site is also graded on the 12 protocol and commerce checks it will likely fail. Continuing the example above, suppose every other discoverability and bot-access check passes as well:

Filter Discoverability Content Bot Access Protocol Commerce Overall
content 100 (weight 32) 69 (48) 100 (13) not run not run 84, B
all 100 (32) 69 (48) 100 (13) 0 (22) 0 (8) 64, D

Same site, same fixes needed, and the grade drops from B to D. Pick the filter that matches the site, and use the same one every time you re-scan, or the scores are not comparable. What the scan checks lists which checks belong to which type.

How does Customize scan change the score?

Customize scan, under the scan controls, shows the three site-type tabs and every check in the current tab, grouped by category, each tagged all, content or api. Its heading shows how many checks will run, for example "Customize scan · 12 of 19 checks".

  • Switching tabs changes which checks are offered. It does not untick anything, so moving back to a tab restores the checks you had.
  • Unticking a check removes it from the scan. It is not run, not scored and not listed in the report.
  • all / none beside each category ticks or unticks every check in it.
  • Ticking nothing runs every check in the tab. The panel says so, because a scan of zero checks would score 100 for doing no work.

A customized score only compares with another scan that used the same selection. In the API, the same choice is the siteType parameter plus an optional checks list of ids; unknown ids are dropped, and a list with no known ids runs everything.