Why publish accuracy at all

Automated UX tools are often wrong, and most don’t say how often. Nielsen Norman Group reports that two Microsoft researchers measured four AI evaluation tools at 50–70 % accuracy, and quotes Baymard Institute: “the vast majority of tools don’t even publish an accuracy rate” (NN/g, January 2026). We think you should know how far to trust a result before you act on it, so this page shows our numbers, our test method and our misses.

Three kinds of results in Lensux

Lensux mixes three kinds of analysis, and they deserve different levels of trust:

  • Rule-based HTML checks (33): deterministic code that reads your page’s HTML and CSS (headings, alt text, forms, dark patterns, fonts, images…). Same page, same answer, every time. These are what this page measures.
  • Rendered checks (colour contrast, Fitts’s Law target sizes and similar): a real browser renders the page and measures it. Not part of this bench yet.
  • AI audits (design psychology, trends, visitor simulation, predicted heatmap): an AI model’s expert-style opinion. They are useful for ideas and second opinions, but they are not deterministic and are not measured here. Treat them as a reviewer’s suggestions, not as facts.

How we test

We wrote small test pages, each one either clearly fine or clearly breaking one rule (a WCAG criterion, a Nielsen heuristic, a Law of UX or a documented dark pattern). The label comes from the rule itself, not from what our code looks for. About one in five pages is a deliberately hard case: nested menus, meaning that only a human sees, edge cases of the rule.

The real check code (the same file that runs on lensux.com) is run against every page. A check is right when it flags a page labelled as a problem, or passes a page labelled as fine.

There are two sets:

  • Tuning set (80 pages). Its first run found real bugs, which we fixed (list below). After fixing, it scores 100 %, but that number proves little: the code was corrected against these very pages.
  • Held-out set (37 pages). Written after the fixes and never used to change the code. Its result is the honest estimate, and it is the one we quote.

Results

PagesCorrectClear-cut casesHard casesBad pages caughtFalse alarms on good pages
Held-out set (fair estimate)3728 (75.7 %)25/26 (96.2 %)3/11 (27.3 %)10/154/22
Tuning set, before fixes8070 (87.5 %)65/67 (97 %)5/13 (38.5 %)36/433/37
Tuning set, after fixes8080 (100 %)67/67 (100 %)13/13 (100 %)43/430/37

Last run: . 33 rule-based checks, 117 test pages in total.

How to read it: on clear-cut problems the checks are reliable. On hard cases they often miss or misfire, which is the typical limit of rules that read code: they see markup, not meaning. When a result surprises you, look at the page yourself; every finding in Lensux names the element it is about.

Where it still gets it wrong

Every miss in the held-out set, unedited:

CheckTest pageShould beLensux said
Hick's Law6 top-level items; 12 more only appear inside hover dropdownsFineProblem
Image Alt TextContent photos with alt="photo"ProblemFine
Viewport Meta TagViewport fixed at width=1024 (not responsive)ProblemFine
HTML Lang Attributelang="english" (not a valid language code)ProblemFine
Skip LinkSkip link exists but sits after the footer, so it skips nothingProblemFine
Help & DocumentationOnly a "Chat with us" button opens supportFineProblem
Confirmshaming"No, prefiero seguir perdiendo clientes"ProblemFine
Form Input ValidationSingle search box (type=search)FineProblem
Semantic HTML5 StructureLandmarks given with ARIA roles on <div>s (role="banner", "navigation", "main", "contentinfo")FineProblem

We will fix some of these. When we do, we will write a new held-out set, so the published number is never measured on pages the code was tuned on.

What the first run found and we fixed

The first run of the tuning set scored 70/80 (87.5 %). These were the bugs behind the misses:

  • Confirmshaming: Missed the most common wording (“No thanks, I don’t want to save money”), typographic apostrophes and Spanish. It now recognises guilt-worded declines in English and Spanish while still ignoring neutral ones like “No thanks”.
  • Reading level: Skipped dense text written in a few very long sentences — exactly the hardest kind to read. It now measures any page with at least three full sentences and 100 words.
  • All HTML checks: Counted markup inside HTML comments (for example an old, commented-out <h1>). Comments are now ignored, as browsers and screen readers ignore them.
  • Image alt text: Accepted a file name (“IMG_2041.jpg”) as alt text. That is a documented WCAG failure (F30) and is now flagged.
  • Viewport: Passed pages that block zooming (user-scalable=no, maximum-scale=1). That fails WCAG 1.4.4 and is now flagged.
  • Skip link: Passed a skip link that points to an id missing from the page. Now flagged: the link exists but goes nowhere.
  • Hick’s Law: Measured a breadcrumb trail instead of the main menu when the breadcrumb came first. Breadcrumb, pagination and footer navigation are now skipped.
  • Help & documentation: Ignored a plain e-mail or phone link as a way to get help. mailto:/tel: links and wording like “Write to us” now count.
  • Sneak into basket: Flagged a pre-ticked “Remember me” box. Session conveniences (“remember me”, “keep me signed in”) no longer count; pre-ticked add-ons, newsletters and consent boxes still do.

Results per check (both sets)

CheckPagesCorrectOf which hard
Semantic HTML5 Structure32/30/1
Form Input Validation43/4—
HTML Lang Attribute54/51/2
Help & Documentation54/51/2
Hick's Law54/51/2
Skip Link54/51/2
Viewport Meta Tag54/51/2
Image Alt Text65/61/2
Confirmshaming76/71/2
ARIA Sanity44/42/2
Autoplay Safety44/41/1
CSS Custom Properties22/2—
DOM Depth & Complexity22/2—
Doherty Threshold44/4—
Duplicate IDs33/31/1
Fallback Font Stack33/31/1
Font Loading Strategy22/2—
Font Weight Health22/2—
Heading Hierarchy66/61/1
Image Optimization33/3—
Interaction States22/2—
Jakob's Law33/3—
Media Accessibility22/2—
Miller's Law44/41/1
Modern Image Formats22/2—
Reading Level33/3—
Responsive Breakpoints33/31/1
SVG Cleanliness33/3—
Scalable Units33/3—
Semantic Color Usage22/2—
Sneak into Basket66/61/1
Video Performance & UX22/2—
Z-Index Management22/2—

What these numbers don’t tell you

  • The pages are synthetic. They are small pages we wrote, not a random sample of real websites. Real sites are messier, and accuracy on them is likely lower.
  • The sample is small. With a few dozen pages, a single case moves the percentage by several points.
  • We wrote both the tests and the code. We kept them apart (labels from the rules, a held-out set), but an independent test would be stronger. If you find a page where Lensux is wrong, please tell us and we will add it.
  • Right or wrong is per page, not per issue. The bench checks whether the problem is detected, not whether every count and score is exact.
  • AI audits and rendered checks are not included (see above).

Frequently asked questions

Is Lensux 75.7 % accurate, then?

For its rule-based HTML checks, on our held-out test pages: 75.7 % overall, 96.2 % on clear-cut cases and 27.3 % on hard ones. That does not cover the AI audits, which are opinions and are not scored here.

Can I trust a single finding?

On clear issues (a missing alt attribute, a missing label, a pre-ticked paid add-on), yes, very likely. On judgement calls, use it as a pointer and check the page yourself.

Why not publish 100 %?

Because it wouldn’t be true. After fixing the bugs the tuning set does reach 100 %, but only because the code was corrected against those pages. The held-out set is the fair number.

Sources

  1. Kate Moran — Demand Accuracy in Your AI Tools: Lessons from Baymard Institute (NN/g, 2026)
  2. W3C — Technique F30: alt text that is not an alternative (file names)
  3. W3C — Understanding SC 1.4.4 Resize Text