Validators
W3C Validator
Markup and stylesheet conformance in one pass
The W3C runs two separate validators - one for markup, one for stylesheets - and most sites need both. This runs both in one pass against the same page, so you get one answer instead of two tabs and two URLs.
- Free, no signupNo account, no card
- No AI in the score986 deterministic rules
- Nothing publishedYour scans stay yours
- Answers in secondsQuick scan, no browser
The HTML side reads the raw response body before any JavaScript runs and checks it against the Living Standard's content model with a real tokenizer. The CSS side fetches every inline and linked stylesheet and matches each declaration against the formal property grammars from the CSS specifications, in their published machine-readable form.
Both halves report the exact position of every error. If you only need one, the HTML validator and CSS validator pages run each on its own.
Why this matters
One page. The W3C has two validators.
Something on the page is wrong and you want the official answer. The markup service checks the HTML and says nothing about the stylesheet; the stylesheet service checks the CSS and says nothing about the markup. Neither knows the other ran, so you finish with two lists in two formats and still have to work out which of them explains the thing you were looking at.
What it costs you when this is wrong
You look for the bug in the wrong file
The browser repairs invalid markup while it parses, then matches your CSS against the repaired tree. So a rule that will not apply can be a markup fault, and a block sitting in the wrong place can be a discarded declaration. With one clean result from one service, you spend the afternoon editing the file that was already correct.
Two fields, one name, half the enquiry
Two form controls sharing a name submit under one key. Whether the server keeps the first value, the last, or both depends on how it parses the body - so a form that works on your host quietly loses a field after a migration. You find out when an enquiry arrives with no phone number in it.
The browser guesses your character set
With no encoding declared in the first kilobyte of the page, the browser picks one. A wrong guess turns every apostrophe and accented name into mojibake, in the page and in the tab title and in the preview text other systems lift from it. Your own browser may guess correctly and never show you.
Why run it here
Both halves in one pass, nothing counted twice
94 rules matching HTML_ or CSS_ run against the same page in the same scan. Where the conformance parser and an older hand-written rule would report the same defect, the hand-written one is suppressed for that scan, so a duplicate id is one finding rather than two.
Parity on markup, a real difference on CSS
The markup half checks the same content model the W3C service checks and claims nothing beyond that. The stylesheet half differs: anything the grammar checker cannot evaluate - a value containing var(), a feature-query condition - is recorded as unchecked instead of reported as an error, and every property is also resolved against Baseline.
Conformance is 94 checks of 986
Neither W3C service looks at structured data, links, response headers or accessibility. Those run in the same pass here, and every markup and stylesheet finding still arrives with its line, its column and the specification it comes from.
This check runs on its own here, and as part of the full audit alongside the other 985 rules. Either way the findings carry their evidence and their citation, and the report is never published or kept.
How to fix markup and stylesheet conformance
Conformance errors are worth fixing not because a badge says so, but because browsers recover from them by guessing — and different browsers guess differently.
Fix HTML parse errors first, starting from the top. Unclosed and mis-nested elements cause cascades that disappear once the first is corrected.
Remove duplicate ids, which silently break labels, in-page anchors and any script that queries by id.
Fix CSS parse errors — one malformed declaration causes the browser to discard the rest of its block.
Add missing required attributes: alt, lang, and a non-empty title.
Re-validate and confirm the count fell. If it did not, you fixed a symptom rather than the cause.
What happens when you run it
Enter your address
Just the domain is enough — example.com, with or without the https. No account, no card, no crawl of your whole site.
We render it like a visitor
Your page opens in a real browser and JavaScript runs to completion, so what gets audited is the page a person actually sees — not the raw HTML your server sent. A screenshot comes back with the report as evidence of exactly what we measured.
You get findings you can act on
Up to 986 checks run against that rendered page. Each finding names the rule, quotes the evidence found on your page, cites the public specification behind it, and says what to change. Nothing is a judgement call — run it twice on an unchanged page and the score is identical.
What runs this check
- W3C conformance parsers
- Property grammar matching
Named because provenance is the product. Every finding in your report says which of these produced it, so you can check the reasoning rather than take a score on faith.
What this checks
94 rules · 85 affect your scoreChecks the raw HTML source for structural mistakes the browser silently repairs: nested anchors and forms, block elements inside paragraphs, bare table rows, nested headings and unterminated attributes. These never appear in the parsed DOM, so they are invisible to tools that inspect a rendered page - but they mean the DOM you get is not the DOM you wrote.
HTML_PARSE_ERRORS scoredDuplicate ids break getElementById, label/for association, aria-labelledby and in-page anchors - all of which silently resolve to the first match only.
HTML_DUPLICATE_IDS scoredA title is required by the HTML specification, not merely recommended, and every validator reports its absence as an error.
HTML_HEAD_HAS_TITLE scoredWithout a viewport meta tag mobile browsers render at a 980px virtual width and scale down, so the page arrives zoomed out and unreadable regardless of how good the responsive CSS is.
HTML_META_VIEWPORT_PRESENT scoredEvery inline and linked stylesheet is parsed. A parse error means the browser discarded a declaration or a whole rule at load time, so styling that looks correct in the source never applied.
CSS_W3C_PARSE_ERROR scoredBoolean attributes are true whenever present, whatever their value. disabled="false" disables the control - the exact opposite of what the author intended, and one of the most persistent bugs in hand-written HTML.
HTML_BOOLEAN_ATTRS_VALID scoredA control with no name is omitted from the submitted form data entirely. The field renders, the user fills it in, and the value never reaches the server.
HTML_INPUT_NAME_PRESENT scoredThe lang attribute drives hyphenation, speech synthesis and correct font selection.
HTML_LANG_ATTRIBUTE scoredWithout a declared encoding the browser guesses, and a wrong guess renders every non-ASCII character as mojibake. The declaration must also appear in the first 1024 bytes, which is why it belongs at the top of head.
HTML_META_CHARSET_FIRST scoredA legacy Internet Explorer feature that executes JavaScript from CSS - both obsolete and a script-injection vector.
CSS_NO_EXPRESSION scoredText below about 3px is invisible to a human but fully indexable. Whether or not it is deliberate, it matches the keyword-stuffing pattern that ranking systems demote for.
CSS_NO_INLINE_FONT_SIZE_TINY scoredEach property name is checked against the machine-readable index of properties defined in the CSS specifications. An unknown property is almost always a typo no browser will honour.
CSS_W3C_UNKNOWN_PROPERTY scoredEach value is matched against the property's formal grammar from the CSS specifications. A value that does not match is dropped at parse time, so the declaration has no effect even though the property name is correct.
CSS_W3C_INVALID_VALUE scoredInteractive content inside interactive content is invalid and produces unpredictable keyboard and screen-reader behaviour.
HTML_BUTTON_IN_LINK scoredImages declare a source
MediumAn img with no src or srcset is invalid and renders as a broken-image placeholder.
HTML_IMG_REQUIRES_SRC scoredAn empty for attribute associates the label with nothing. The control stays unlabelled while the markup looks correct to a reviewer skimming it.
HTML_LABEL_FOR_RESOLVES scoredMore than one title element is invalid. Browsers and search engines use the first and discard the rest, so the one you meant to show may be the one thrown away.
HTML_NO_DUPLICATE_TITLE scoredVestibular disorders make large-motion animation genuinely painful. The operating system already exposes the user's preference; honouring it is a two-line media query.
CSS_PREFERS_REDUCED_MOTION scoredHTML specification conformance, checked against the raw response body by a conformance parser. Rule: element-permitted-content.
HTML_W3C_ELEMENT_PERMITTED_CONTENT scoredHTML specification conformance, checked against the raw response body by a conformance parser. Rule: element-permitted-occurrences.
HTML_W3C_ELEMENT_PERMITTED_OCCURRENCES scoredHTML specification conformance, checked against the raw response body by a conformance parser. Rule: element-permitted-order.
HTML_W3C_ELEMENT_PERMITTED_ORDER scoredHTML specification conformance, checked against the raw response body by a conformance parser. Rule: element-permitted-parent.
HTML_W3C_ELEMENT_PERMITTED_PARENT scoredHTML specification conformance, checked against the raw response body by a conformance parser. Rule: element-required-ancestor.
HTML_W3C_ELEMENT_REQUIRED_ANCESTOR scoredHTML specification conformance, checked against the raw response body by a conformance parser. Rule: element-required-attributes.
HTML_W3C_ELEMENT_REQUIRED_ATTRIBUTES scored
Showing 24 of 94. Browse every rule w3c validator runs.
Questions
- Is this affiliated with the W3C?
- No. It checks the same specifications the W3C's validators check, using open-source implementations of them. The W3C's own services are at validator.w3.org and jigsaw.w3.org, and are the reference implementations.
- Why check both at once?
- Because a page is one artefact. A stylesheet that fails to parse and markup that fails to nest produce the same symptom - a page that looks wrong - and checking them separately means finding out twice.
Also checks
This page answers these searches too — they are the same job, so they share one page rather than being split across near-identical ones:
- w3c markup validation service
- w3c css validation service
- validator.w3.org
- w3c compliance checker
Other checkers
- HTML ValidatorW3C markup conformance, checked by a real parser
- CSS ValidatorStylesheets parsed and checked against the W3C property grammars
- Schema Markup ValidatorJSON-LD parsed, expanded to real schema.org IRIs, and checked
- Rich Results TestWhich search features your structured data qualifies for
- Website Scam DetectorThe trust signals people and payment processors check before believing a site
- AI ValidatorWhether AI models can find, read, quote and operate your site
- Broken Link CheckerEvery link on the page requested, with blocked and broken told apart
- SEO CheckerTitles, meta, canonicals, indexability and internal linking
- Accessibility CheckerTwo WCAG engines — one in a real browser, one on your markup
- Security Headers CheckerResponse headers, CSP quality, and the TLS certificate underneath
- Core Web Vitals CheckerMeasured for real, plus the page-weight causes behind the numbers
- AI Agent Readiness CheckerCan an agent find your buttons, read your labels and finish the task
- Answer Engine CheckerWhether AI answer engines can quote you, and attribute it
- AI Crawler CheckerWhich AI crawlers your robots.txt actually lets in
- SSL Certificate CheckerA real handshake: certificate, expiry, protocol and cipher
- robots.txt CheckerWhat your robots.txt actually allows, group by group
- Meta Tag CheckerTitles, descriptions, canonicals and robots directives
- Open Graph CheckerHow your link looks when someone shares it
- Image SEO CheckerAlt text, dimensions, formats and lazy loading
- Mobile-Friendly TestViewport, tap targets and responsive behaviour
- Website CheckerEvery module, one scan, one prioritised fix list
Run the w3c validator now
No signup, no credit card. Quick answers in seconds; a full audit takes about a minute.
Run a free scanNo signup. No credit card. Nothing stored but the result.