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:
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:
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.