WoluTools
← About this tool

accessibility · Browser tool

Accessibility Audit

Paste the HTML of a page. It is parsed here and checked against WCAG 2.1 A and AA, with every finding tied to a success criterion, the element that fails it and a fix.

Runs in your browserNothing is uploadedHow it works
Free toolNo account · no page limitFree, unlimitedRuns offline once the page has loaded.

The markup

There is no URL field here, and that is deliberate. This page runs entirely in your browser, and a browser is not allowed to fetch another site's HTML — the request is blocked before it is sent. So paste the source instead: open the page, press Ctrl+U for View Source, or right-click the <html> element in the developer tools and choose Copy outer HTML, which gives you the DOM after scripts have run. Copy the <style> blocks with it or the contrast checks have nothing to measure. To scan a live website by URL, use the Website Accessibility Quick Scanner, which runs on our servers and needs a signed-in account.

Findings

Score
—

Save as PDF opens your browser’s print dialog with only the report on the page. Choose your PDF printer there.

What is checked, and what a static check cannot see

The markup is parsed with the browser's own DOMParser into a detached document, which is never rendered and never runs any script it contains. The checks then walk that document: images without an alt attribute, form controls with no associated label, buttons and links with no accessible name, heading levels that skip, a missing lang on <html>, a missing page title, duplicate ids, a positive tabindex, ARIA roles missing the attributes that role promises, ARIA references pointing at ids that do not exist, tables without header cells, iframes without a title, a viewport tag that blocks zoom, media that plays with sound, and colour contrast wherever both the foreground and the background can be resolved from the CSS in what you pasted.

Many barriers cannot be found by a static markup check. It cannot tell you whether alt text describes the right thing, whether the reading order still makes sense with the CSS removed, whether a custom dropdown traps the keyboard, whether the focus ring is visible against its background, whether an error message is announced when it appears, or whether a page is usable with a screen reader. Those need a keyboard, a screen reader and a person. The score below is a rough weighting of what was found against how much markup there is — useful for watching a trend across a rebuild, not a compliance statement, and no score from any tool is one.

Why the contrast check is conditional

Contrast is a property of two rendered colours, and a parsed document has no rendering. This page reads <style> blocks and style attributes, resolves a foreground and a background by walking up the ancestors, and compares them using the WCAG relative luminance formula. Where either colour comes from an external stylesheet, a media query, a CSS variable, a gradient or an image, the element is skipped and counted as skipped rather than passed. The threshold is 4.5:1 for ordinary text and 3:1 for text at 24px, or 18.66px when bold. Those numbers come from the contrast sensitivity of someone with roughly 20/40 vision, which is a common outcome of ordinary ageing rather than a rare condition.

What the WCAG levels mean

Level A is the floor: fail it and something is simply unusable for some people — an image with no alt, a form that cannot be submitted from the keyboard. Level AA is the level almost every law points at, including the European Accessibility Act and Section 508, and it is where contrast, resize and focus order live. Level AAA is written as an aspiration and is not expected across a whole site. Every finding here is labelled with its criterion and level so you can sort the work.

A placeholder is not a label

The single most common form problem in this check is an input carrying only a placeholder. It disappears the moment someone types, so anyone who is interrupted loses the only description of the field. It is usually rendered in light grey that fails contrast on its own. Voice control software cannot target a field by it. And a screen reader's support for announcing it varies by browser. A real <label> costs one line and fixes all four.

Nothing here leaves the page

The HTML you paste stays in this tab. There is no upload, no request, no storage. Close the tab and it is gone. That also means the tool cannot follow links, load a stylesheet or render anything — the trade is deliberate, and it is why the report says plainly which checks it was not able to run.