HTML Validator & Compliance Checker
Every place your markup isn't strictly 100% to the HTML Living Standard, with the exact example and the correction.
0
Strict errors
0
Obsolete / deprecated
2
Style / non-minimal
52
Total occurrences
ERROR
Strict errors: the W3C Nu validator would reject these. Missing required attributes, duplicate IDs, self-closed non-void elements, unsupported DOCTYPEs.
OBSOLETE
Deprecated per HTML Living Standard §15. Browsers still render them but conforming validators flag them.
STYLE
Valid but non-minimal: uppercase tags, XHTML-style
<br />, redundant type="text/javascript". Legal HTML5, but not what the spec writes.
Syntax
STYLE
Uppercase or mixed-case attribute name
26 × on this pageValid HTML5, but inconsistent with the spec's recommended minimal form. · Rule: SYN_UPPERCASE_ATTR
HTML is case-insensitive for attributes but the spec, browsers' own DOM serialisation, and every popular linter normalise to lowercase.
Fix: Write attribute names in lowercase.
✗ Example from this page
<meta … charSet="…">
✓ Correct form
charset="…"
All 26 occurrences
L1
<meta … charSet="…">
L1
<link … fetchPriority="…">
L1
<link … fetchPriority="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L1
<link … hrefLang="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<img … fetchPriority="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<img … fetchPriority="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
L55
<svg … viewBox="…">
–
… (additional occurrences omitted)
STYLE
XHTML-style trailing slash on void element
26 × on this pageValid HTML5, but inconsistent with the spec's recommended minimal form. · Rule: SYN_VOID_TRAILING_SLASH
<br/> and <img … /> are legal HTML5, but the / is completely ignored by the parser. It's a leftover from XHTML and the HTML spec explicitly notes it has no effect. Drop it for minimal, idiomatic HTML5.
Fix: Write the void element without the trailing slash: <meta>.
✗ Example from this page
<meta charSet="utf-8"/>
✓ Correct form
<meta>
All 26 occurrences
L1
<meta charSet="utf-8"/>
L1
<meta name="viewport" content="width=device-width, initial-scale=1"/>
L1
<link rel="preload" as="image" href="/videos/h3-demos/hero-3.webp" fetchPriority="high"/>
L1
<link rel="preload" as="image" href="/images/model-brands/kling-color.svg"/>
L1
<link rel="stylesheet" href="/assets/index-DEIFmQaM.css" data-rsc-css-href="/assets/index-DEIFmQaM.css" data-precedence="vite-rsc/importer-resources"/>
L1
<link rel="modulepreload" fetchPriority="low" href="/assets/index-DtNpVDuk.js"/>
L1
<link rel="modulepreload" href="/assets/global-error-CVl8f3Cz.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/framework-DJH1pfSr.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/rolldown-runtime-QTnfLwEv.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/url-utils-BQKFb685.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/error-CKqcQOr6.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/navigation-NAM0kUEw.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/react-DlbkFqaW.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/BaseLink-BtIEPdS4.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/locale-Ca8Mb35V.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/welcome-copy-DIyE0o41.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/react-client-CAjdHkmk.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/layout-segment-context-BRfTFXM9.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/NextIntlClientProvider-d9oaY35C.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/intl-recovery-boundary-DcT0c-21.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/dist-BqFYcBMN.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/auth-modal-provider-YT14ZPfl.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/dynamic-JvjZAPEJ.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/track-Bo-iOlHD.js" crossorigin=""/>
L1
<link rel="modulepreload" href="/assets/promo-B3QDpiXL.js" crossorigin=""/>
–
… (additional occurrences omitted)