By Tim King · Updated
WCAG Checker
Success Criteria Mapped to Errors, Warnings and Notices From Pasted Markup
OneTask is free, with no sign-up, and built by one person.
If this tool saved you time, a coffee helps keep new ones coming.
How the WCAG Checker works
This WCAG checker tests HTML against common success criteria. Paste a full page or a fragment of HTML and it is checked against the parts of WCAG 2.2 that
can be tested from markup alone. Each finding names the element, says what is wrong, and gives
the success criterion — 1.1.1, 2.4.4, 4.1.2 — so you can look up the rule or cite it in a
report. Errors are definite failures, warnings are almost certainly failures, notices are things
to look at.
WCAG checker: what it can and cannot check
About a third of WCAG can be checked by a machine reading the HTML. This tool does that third, thoroughly and locally, and is honest that the other two thirds — is the alt text actually accurate, does the page make sense when zoomed, can every task be completed by keyboard — still need a person. Use it as the first pass that clears out the mechanical faults so the manual review can concentrate on judgement.
Images (1.1.1). Every img needs an alt attribute. A missing one is an error: the screen
reader will read the file name instead. alt="" is correct for decorative images and passes.
Alt text that is just image, photo or logo fails because it describes nothing; text that
looks like a file name fails for the same reason; text starting "image of" gets a notice because
the screen reader already says "image". Image buttons and image-map areas need alt text too.
Form fields (1.3.1, 4.1.2). Every text input, select and textarea must have a label that
assistive technology can associate with it: a label for= pointing at its id, a wrapping
label, or aria-label, aria-labelledby or title. A placeholder is not a label — it
vanishes as soon as the user types and is frequently too faint to read — so a field with only a
placeholder is reported. Fieldsets without a legend are flagged because the group has no name.
Links and buttons (2.4.4, 4.1.2, 2.1.1). A button with nothing in it and no aria-label
reads as "button" and nothing else. A link whose only content is an image with empty alt is
announced as its URL. Link text of "click here", "read more" or "here" is flagged because screen
reader users navigate by pulling up a list of links, and a list of "read more" is useless. A link
with no href is not focusable by keyboard, and href="javascript:…" is a button in disguise.
A div or span with an onclick and no role and tabindex is unreachable by keyboard
entirely.
Structure (1.3.1, 2.4.2, 2.4.6, 3.1.1). When a full document is pasted, the html element
must carry a valid lang, there must be a title, and there should be an h1 and a main
landmark. Heading levels should not skip — an h1 followed by an h3 breaks the outline that
screen reader users navigate by. Empty headings are errors. Data tables need th cells and
ideally a caption. Duplicate ids are errors because label for and every aria-* reference
depend on ids being unique.
Focus and keyboard (2.4.3, 2.4.7, 2.1.1). A positive tabindex reorders the tab sequence
away from the reading order and is nearly always a mistake. Inline outline: none hides the
focus ring so keyboard users cannot see where they are. aria-hidden="true" wrapped around a
button or link produces a control that is in the tab order but silent. accesskey gets a notice
because it collides with assistive technology shortcuts.
Motion, media and zoom (1.4.4, 1.4.2, 1.2.2, 2.2.2). A viewport meta with
user-scalable=no or a maximum-scale under 2 stops low-vision users from zooming and is an
outright failure. Media that autoplays with sound and no controls fails; a video with no
track element is noted because captions are required for pre-recorded video. marquee and
blink fail because they move and cannot be paused.
What it cannot check. Colour contrast needs the computed styles — use the contrast checker with your actual colours. Whether alt text is truthful, whether focus order makes sense, whether error messages are helpful, whether the page works at 400% zoom, whether custom widgets respond to arrow keys: all of these need a human and, ideally, a screen reader. A clean result here means the mechanical faults are gone, not that the page is accessible.
FAQ
Do I need to paste the whole page?
No. A fragment is checked on its own for everything that applies to elements — images, forms,
links, headings, tables. The document-level checks for lang, title, h1 and main only
run when the pasted HTML contains an html element, so a fragment is not penalised for lacking
a title.
What is the difference between an error, a warning and a notice?
An error is a definite failure of a success criterion that no context can excuse, such as an image with no alt attribute. A warning is a pattern that is almost always a failure but could in a rare case be intentional, such as "click here" link text. A notice is a best practice rather than a requirement, such as adding a caption to a table.
Which WCAG level does this check against?
The criteria cited are all Level A or AA, which is what most legal and procurement requirements mean by "WCAG compliant". Nothing here is AAA-only. The numbering is the same in WCAG 2.0, 2.1 and 2.2, so the references work whichever version your policy names.
Will a clean result mean the page is accessible?
No. Automated checks find roughly a third of accessibility problems. The rest need someone to use the page with a keyboard only, with a screen reader, and at high zoom, and to judge whether the text alternatives and instructions actually make sense. This tool clears the mechanical faults so that review time is spent on the parts that need judgement.
Why is a placeholder not enough as a label?
Because it disappears the moment the user starts typing, so someone who is interrupted or who tabs back to check a field has no idea what it is for. It is also usually rendered in a grey that fails contrast, and some screen readers do not announce it at all. A visible label plus, if you like, a placeholder as an example value, is the accessible pattern.
See also: all SEO tools, Dev Utilities, Formatters & Validators, Data & Encoding, Security & Identifiers, Accessibility, AI.
Related tools
Contrast Checker
Check colour contrast against WCAG and APCA.
SVG Validator
Find unclosed tags, bad path data and broken references in SVG.
Hreflang Generator
Generate hreflang link tags, headers or sitemap XML for multilingual pages.
Local Business Schema Generator
Build LocalBusiness JSON-LD with address, geo, opening hours and social profiles.
Meta Description Generator
Draft meta descriptions from your own page text, trimmed to length.