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
| Pages | Correct | Clear-cut cases | Hard cases | Bad pages caught | False alarms on good pages | |
|---|---|---|---|---|---|---|
| Held-out set (fair estimate) | 37 | 28 (75.7 %) | 25/26 (96.2 %) | 3/11 (27.3 %) | 10/15 | 4/22 |
| Tuning set, before fixes | 80 | 70 (87.5 %) | 65/67 (97 %) | 5/13 (38.5 %) | 36/43 | 3/37 |
| Tuning set, after fixes | 80 | 80 (100 %) | 67/67 (100 %) | 13/13 (100 %) | 43/43 | 0/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:
| Check | Test page | Should be | Lensux said |
|---|---|---|---|
| Hick's Law | 6 top-level items; 12 more only appear inside hover dropdowns | Fine | Problem |
| Image Alt Text | Content photos with alt="photo" | Problem | Fine |
| Viewport Meta Tag | Viewport fixed at width=1024 (not responsive) | Problem | Fine |
| HTML Lang Attribute | lang="english" (not a valid language code) | Problem | Fine |
| Skip Link | Skip link exists but sits after the footer, so it skips nothing | Problem | Fine |
| Help & Documentation | Only a "Chat with us" button opens support | Fine | Problem |
| Confirmshaming | "No, prefiero seguir perdiendo clientes" | Problem | Fine |
| Form Input Validation | Single search box (type=search) | Fine | Problem |
| Semantic HTML5 Structure | Landmarks given with ARIA roles on <div>s (role="banner", "navigation", "main", "contentinfo") | Fine | Problem |
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)
| Check | Pages | Correct | Of which hard |
|---|---|---|---|
| Semantic HTML5 Structure | 3 | 2/3 | 0/1 |
| Form Input Validation | 4 | 3/4 | — |
| HTML Lang Attribute | 5 | 4/5 | 1/2 |
| Help & Documentation | 5 | 4/5 | 1/2 |
| Hick's Law | 5 | 4/5 | 1/2 |
| Skip Link | 5 | 4/5 | 1/2 |
| Viewport Meta Tag | 5 | 4/5 | 1/2 |
| Image Alt Text | 6 | 5/6 | 1/2 |
| Confirmshaming | 7 | 6/7 | 1/2 |
| ARIA Sanity | 4 | 4/4 | 2/2 |
| Autoplay Safety | 4 | 4/4 | 1/1 |
| CSS Custom Properties | 2 | 2/2 | — |
| DOM Depth & Complexity | 2 | 2/2 | — |
| Doherty Threshold | 4 | 4/4 | — |
| Duplicate IDs | 3 | 3/3 | 1/1 |
| Fallback Font Stack | 3 | 3/3 | 1/1 |
| Font Loading Strategy | 2 | 2/2 | — |
| Font Weight Health | 2 | 2/2 | — |
| Heading Hierarchy | 6 | 6/6 | 1/1 |
| Image Optimization | 3 | 3/3 | — |
| Interaction States | 2 | 2/2 | — |
| Jakob's Law | 3 | 3/3 | — |
| Media Accessibility | 2 | 2/2 | — |
| Miller's Law | 4 | 4/4 | 1/1 |
| Modern Image Formats | 2 | 2/2 | — |
| Reading Level | 3 | 3/3 | — |
| Responsive Breakpoints | 3 | 3/3 | 1/1 |
| SVG Cleanliness | 3 | 3/3 | — |
| Scalable Units | 3 | 3/3 | — |
| Semantic Color Usage | 2 | 2/2 | — |
| Sneak into Basket | 6 | 6/6 | 1/1 |
| Video Performance & UX | 2 | 2/2 | — |
| Z-Index Management | 2 | 2/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.