Skip to content
100% local

HTML accessibility checker

Scan an HTML fragment for issues that block screen readers and keyboard users.

Input
Output

HTML accessibility checker

Paste an HTML fragment and this tool scans it for the issues that most commonly block screen readers, keyboard users and other assistive technology. Each finding is reported with a line number and a plain-language explanation, so you can fix it without cross-referencing a separate WCAG document. It targets the fragment you actually have on hand — a component, an email template, a CMS block — not a full crawled page.

The checks are options you can turn on and off individually: images missing alt text (and empty alt on images that are the only content of a link or button), heading levels that skip a level or don't start at h1, buttons and links with no visible text or aria-label, form fields with no associated label, generic link text like "click here", tables with no header cells, a document missing its lang attribute, and duplicate id attributes. A severity filter narrows the list to warnings and errors, or errors only, once the smaller stuff is triaged.

The checker reads the raw markup only — tags and attributes, not computed styles or rendered layout — so it won't catch a contrast problem or a focus order that only shows up once CSS is applied (pair it with the contrast checker for that). Parsing is best-effort: it tolerates malformed or partial HTML rather than refusing to run, since a pasted fragment rarely has a closing tag for everything.

Everything happens locally in your browser. The fragment you paste — which might come from an unreleased page, an internal tool, or a client project — is never uploaded or sent to a server. Copy the report, download it as a .txt file, or send the fragment back into the input after making changes to re-scan it.

FAQ

Does this replace a full accessibility audit?
No. It catches common, mechanically detectable issues in the markup you paste — missing alt text, heading order, unlabeled fields and similar — but a full audit also covers color contrast, keyboard focus order, screen-reader testing and rendered layout, which need a live page to check.
Why does an image with alt="" still get flagged sometimes?
An empty alt is correct for a purely decorative image. It only gets flagged when the image is the sole content of a link or button (leaving that control with no accessible name) or when it has a non-empty title attribute, which suggests it is carrying information after all.
What counts as a "duplicate id"?
Any id attribute value that appears on more than one element in the fragment. Duplicate ids break label associations, aria-labelledby references and in-page links, since only the first match is used.
Can I check just one category of issue?
Yes. Each check — images, headings, interactive elements, forms, link text, tables, language and duplicate ids — has its own toggle, and a severity filter narrows the results further.
Is my HTML uploaded anywhere?
No. The fragment is parsed and checked entirely in your browser using JavaScript; it is never sent to a server.