Findings · 2026-09-01 · By VSNARY | Emmanuel Orta
We reviewed all 150 scored rows against seven site types. Here is what we unscored, and why.
A threshold that fails a lean personal blog is not measuring quality. A row that scores the mechanism when another row scores the outcome counts one defect twice.
This scanner scores about 150 rows across 22 sections. Most were written one at a time, each with a threshold that seemed right the day it shipped, and none had been read as a set. So we ran seven real sites through it, a tree service, a WooCommerce store, a personal blog, a national newspaper, a large forum, our own attestation register, and a storefront that redirects off-host, and put the pass or fail for every row on every site into one table. Then we read the columns.
A row that fails six sites out of seven is either finding something real about the web or measuring the wrong thing. Reading which sites failed decides it. When the lean personal blog fails a content-ratio threshold, the threshold is wrong.
Rows that were accusing sites of things that are not defects
Sitemap trailing slash. Our own tree-service site read 75 with, 1 without and failed. The one was /entitymap.html, a file. Files never carry a trailing slash, so file paths are excluded now, and a mix has to be a real mix: the minority form at least two URLs and five percent. Wordless links. The personal blog read twelve. All twelve were image links with alt text or aria-labels, which a screen reader and a crawler both read. Those count as words now. Content ratio. Twenty percent visible text failed a blog that carries almost no markup; ten is the floor. Meta description. 95 characters and 82 characters both failed a 120-to-160 rule that was never more than folklore; 50 to 160 is the rule. Uppercase paths and query strings. One link in 215 failed the site; a convention needs at least three offenders and two percent. sameAs. A store failed because a marketplace profile does not link out; the marketplace decided that, not the store, and only a dead target fails now. Credential edges. A publisher, a forum and a storefront were being held to a licence-or-membership row written for local contractors; it applies to local and professional subjects only.
Rows that were counting twice, or counting cosmetics
Cache state scored whether machine files were served DYNAMIC from the edge. Two rows beside it already score what that costs: whether the files answer quickly and whether any is a slow outlier. A slow origin was paying three times for one fault. And DYNAMIC is the CDN's default for .txt and .xml unless someone writes a rule, while sites on other CDNs emit no signal at all, so the row could only ever penalise one vendor's customers for not touching a setting. It is shown, not scored. Apple touch icon and theme colour are browser chrome; they cannot affect whether a machine reaches, reads or quotes a page, and the grade is a claim about exactly that. Scoring them is the mistake we criticise in other tools. Both are shown, not scored. The new RDF section's subject-IRI row duplicated the schema section's @id coverage row with a stricter threshold, so it was scoring one fact twice; it is shown, not scored.
What deliberately stayed
Blocking answer engines still fails the reach rows, because that is the product's thesis and the row says so. Read more still fails the generic-anchor row, because it tells a machine nothing about the destination. Zoom lock still fails. A missing llms.txt or entity map still fails the machine-layer rows, because those sections exist to measure exactly that, and the adoption figures beside them say how rare the files are.
How the score version moves
Every change above moves numbers, so the score version moved from 12 to 13 in the same build. That number is stamped on every stored record. History refuses to draw a delta across the boundary, and the corpus percentile refuses to rank a site against peers measured under a different version, so nobody sees a grade that changed because we changed, presented as if the site did. It is the same discipline as dating every measurement: a number has to say what it is a number of.
The method is reusable by anyone who maintains a scoring rubric: collect the per-row outcomes across sites you understand, read the rows that fail the sites that should pass, and be willing to unscore. Unscored measurement is a glossary term here because it is a design position, not a gap.
Every figure above came out of this scanner.
Point it at your own domain and see the same measurements, free.
Questions this post answers
What does unscored mean on a report?
The row is measured and shown with its value, but it cannot move the section score or the grade. It is used for things that are informative but either cosmetic, already scored by another row, or dependent on a choice the site is entitled to make.
Why did the score version change?
Because thresholds moved and rows were unscored, every site's overall could change without the site changing. The version stamped on each record stops history from drawing a delta across the boundary and stops the corpus percentile from ranking sites measured under different rules.