# Why we will not grade a page we could not measure

> Every AI visibility tool prints a number. When the measurement failed, that number is a guess wearing a lab coat, so ours refuses to appear.

- Canonical page: https://lantad.co/blog/why-we-withhold-a-grade
- This file: https://lantad.co/blog/why-we-withhold-a-grade.md
- Last substantive update: 2026-07-25

## Key facts

- **Published:** 2026-07-25
- **Category:** Product
- **Author:** Lantad
- **Length:** 1167 words
- **Takeaway 1:** Lantad has seven possible scan outcomes and only one of them, "graded", produces a score and a letter grade.
- **Takeaway 2:** When Lantad scanned allbirds.com on 15 July 2026 the site answered its plainly identified crawler with HTTP 429, so no page arrived and no score was produced.
- **Takeaway 3:** Access is scored from robots.txt and response headers rather than the page body, so it survives a failed fetch when prose parity, structure and schema cannot.
- **Takeaway 4:** An earlier version of the Lantad engine scored structure at 0.385 on a rate-limit error page, a reading that described the error rather than the shop.
- **Takeaway 5:** Lantad requires a minimum body size before it will report suspected cloaking, because on a short page a single changing token such as a clock could otherwise trigger the accusation.

## Summary

A scanner has two jobs. The easy one is producing a score. The hard one is knowing when it has not earned the right to produce one.

Lantad has seven possible outcomes for a scan, and only one of them is a grade. The other six exist because a page can fail to be measurable in six distinct ways, and in every one of them the honest output is a description of what happened rather than a number that looks like knowledge. This post is about why we built it that way, and the specific bugs that taught us to.

## A number is not a measurement

The temptation is obvious. A dashboard with a blank where the score should be looks broken, and a dashboard with a 32 in it looks like it worked. So most tools fill the blank. The trouble is that a score is a claim about a page, and if the page was never fetched then the claim is about nothing.

Our own worst example is in the repository as a permanent test case. On 15 July 2026 we scanned a well known Shopify storefront and it answered our plainly identified crawler with HTTP 429, too many requests. There was no HTML, the content type was not even text/html, and the render step was skipped entirely. A tool that scores that page is scoring a rate limit message.

## What we withhold, and what we still report

Withholding a grade is not the same as reporting nothing. The distinction we draw is whether a given signal was measured from the page itself or from something outside it.

Access is measured from [robots.txt](https://lantad.co/tools/robots-txt-tester), from response headers and from per crawler probes. None of that needs the body of the page, so it survives when the body does not. [Prose Parity](https://lantad.co/glossary/prose-parity), retrievability, structure and schema are all read from the body, so when the body is an error page or a login wall they are set to null rather than scored. Getting this wrong is not theoretical: an earlier version scored structure and schema on the error page body, which is how a rate limited storefront briefly showed a structure reading of 0.385 as though it described the shop.

## Three ways a confident number goes wrong

Each of these was a real defect in our own engine, found by auditing the honesty of the output rather than the correctness of the arithmetic. They are the reason the rule is a rule.

The first: when robots.txt returned a server error we assumed disallow, which is the cautious reading, but we also raised per crawler defects quoting a Disallow rule that did not exist. The tool was inventing evidence in order to look specific. The second: sub-scores computed on a bot defense shell leaked into the report under a headline that had deliberately withheld the grade, so the page contradicted itself. The third, and the one worth remembering: our cloaking check compared the crawler body against the browser body, and on a short page a single changing token was enough to trip it. A visitor counter or a clock could produce a public accusation that a site serves different content to AI crawlers. We now require a minimum body size before that claim can be made at all.

## What you get instead of a number

When the grade is withheld the report leads with the reason, in the same place the score would have been, and states what was and was not measured, in the same terms the [scoring methodology](https://lantad.co/methodology) sets out. That is less satisfying than a gauge and considerably more useful, because it tells you what to fix first: a page that cannot be fetched has exactly one problem worth your attention.

The trade is deliberate. We would rather show you a blank with an explanation than a plausible number you might act on. A wrong grade does not just mislead, it sends you to fix the wrong thing.

## Questions and answers

**Why not just show a low score instead of withholding the grade?**

Because a low score is still a claim about the page, and on a failed fetch there is no page to make a claim about. A 429 response means our crawler received a rate-limit message, so scoring it would be scoring the error. We report what happened instead, which also tells you the one thing worth fixing first.

**Which parts of the report survive when the grade is withheld?**

Access does, because it is measured from robots.txt, the response headers and per-crawler probes rather than from the page body. Prose Parity, retrievability, structure and schema are all read from the body, so they are set to null when the body is an error page or a login wall.

**How many ways can a scan fail to produce a grade?**

Six. Lantad has seven outcomes in total and only the graded one produces a score: the others are partial_no_render, access_fatal, access_challenged, not_html, not_publicly_scannable and unreadable.

**Does a withheld grade mean the scan failed?**

No. It means the measurement could not be completed honestly. The scan still reports what it did measure, names what it could not, and says why, which is the difference between a partial result and a broken one.

---

Lantad measures whether AI crawlers can actually read a page: it fetches as a non-rendering
crawler, renders as a browser, and reports the gap. Free scan, one URL, no signup.

Method and weights: https://lantad.co/methodology | All pages as markdown: https://lantad.co/md | Crawler policy: https://lantad.co/bot
