90.5% of the topk websites fail HTML validation

theo_dcrx1 pts0 comments

HTML & CSS Error Statistics: We Validated the Top 5,000 Websites

Key findings<br>90.5%<br>of sites have at least one HTML error<br>2,402 of 2,655 sites. Not warnings, but violations of the written standard.

2.6%<br>are completely clean<br>Only 69 sites returned zero errors and zero best-practice warnings.

12<br>errors on the median site<br>The mean is 37.8 and the worst site had 2,209. A small tail carries most of the damage.

65.1%<br>of sites have a CSS error<br>Measured on 2,471 sites, across every stylesheet the page links.

CSS errors on the median site<br>CSS fails differently: most sites have one bad declaration, not hundreds. The mean is 7.1.

220<br>distinct message families<br>187 of them are spec violations. The whole web's markup fails in a countable number of ways.

What the numbers say<br>Valid HTML is the exception, not the rule. Nine sites in ten among the most visited on the web violate the standard on their home page, and 2.6% come back completely clean. Browsers are so good at error recovery that nothing forces anyone to fix this, which is exactly why it accumulates.<br>The distribution is brutally skewed. The median site has 12 errors, the mean 37.8, and the worst 2,209. Most sites have a handful of mistakes repeated a few times; a minority have one template bug repeated across every component on the page. If you are auditing a site, the count matters far less than the number of distinct rules broken. That is why our scores are computed per rule, not per occurrence.<br>The top failures are structural, not typos. The single most common finding is element is not permitted as content under (59.5% of sites). Nobody writes that by hand. It is what happens when components are composed by a framework that does not know which element it is being dropped into. It is a nesting problem created at build time, not in an editor.<br>Accessibility failures are near-universal. The findings that the Accessibility Checker keeps ( heading levels, unlabelled inputs, links with no text ) each appear on more than a third of sites. With the European Accessibility Act applicable since June 2025, that is a compliance surface, not a style preference.<br>CSS breaks in one place, not everywhere. 65.1% of sites have a CSS error but the median count is 1, and the most common one by far is Invalid value for `X` property. A stylesheet with a broken declaration still renders; the browser drops the line and moves on. That silence is the reason these survive in production for years.

The 25 most common HTML findings<br>Ranked by how many distinct sites emit the message, not by raw occurrences. One message repeated 4,000 times on a single site is still one site.<br>#MessageSitesShare1 element is not permitted as content under spec violation·element-permitted-content·how to fix<br>1,58159.5%2"type" attribute is unnecessary for javascript resourcesbest practice·script-type·how to fix<br>1,45254.7%3 is missing recommended "type" attributebest practice·no-implicit-button-type·how to fix<br>1,31649.6%4Prefer to use the native elementbest practice·prefer-native-element·how to fix<br>1,10741.7%5 is missing required "src" attributespec violation·element-required-attributes<br>1,09341.2%6Anchor link must have a text describing its purposebest practice·wcag/h30·how to fix<br>1,00137.7%7Landmarks must have a non-empty and unique accessible name (aria-label or aria-labelledby)best practice·unique-landmark·how to fix<br>91834.6%8Initial heading level must be but got best practice·heading-level·how to fix<br>82331.0%9 element does not have a best practice·input-missing-label·how to fix<br>79730.0%10Attribute "target" has invalid value ""spec violation·attribute-allowed-values·how to fix<br>77829.3%11Redundant role "link" on best practice·no-redundant-role·how to fix<br>74828.2%12Heading level can only increase by one, expected but got best practice·heading-level·how to fix<br>66825.2%13Duplicate ID "porb"spec violation·no-dup-id·how to fix<br>62123.4%14 must have accessible textbest practice·text-content·how to fix<br>58922.2%15Attribute "name" is deprecated on elementspec violation·no-deprecated-attr·how to fix<br>51219.3%16 is missing required "alt" attributespec violation·wcag/h37·how to fix<br>50719.1%17Class "][" duplicatedbest practice·no-dup-class<br>44716.8%18Element references missing id "Browse"spec violation·no-missing-references·how to fix<br>43216.3%19"aria-label" cannot be used on this elementspec violation·aria-label-misuse·how to fix<br>42816.1%20Prefer to use instead of when adding buttonsbest practice·prefer-button·how to fix<br>40915.4%21 element must have a submit buttonbest practice·wcag/h32·how to fix<br>35713.4%22 element is not permitted as a descendant of spec violation·element-permitted-content·how to fix<br>33912.8%23title text cannot be longer than 70 charactersbest practice·long-title<br>33312.5%24Stray end tag ''spec violation·close-order·how to fix<br>26810.1%25Unclosed element ''spec violation·close-order·how to fix<br>2298.6%

The 15 most common CSS findings<br>Every stylesheet a page links is validated separately, so a line number...

practice sites element violation spec site

Related Articles