Free ARIA checker for any web page

A page's URL in, every ARIA problem out, with the element and what is wrong with it.

Check a page's ARIA

Example A made-up clinic's booking page. Enter yours to check it.

4 ARIA problems to fix

ARIA problems on https://example.com/ that fail, worst first
Problem Element
Button has no accessible name Button has no text content or aria-label. Screen readers cannot identify this button. <button class="dialog__close">
Invalid ARIA boolean value aria-expanded="yes" is invalid. Use 'true' or 'false', not 'yes' or 'no'. <button aria-expanded="yes">
Misspelled ARIA attribute aria-labeledby is not a valid ARIA attribute. Did you mean aria-labelledby? <input type="email" aria-labeledby="email-label">
ARIA role missing required parent WCAG 1.3.1 Element with role="tab" must be contained within an element with role: tablist. <div role="tab">
3 more need a person to review
ARIA findings on https://example.com/ that need a person to review
Problem Element
Menu role used for navigation role="menu" is designed for application menus (like desktop app menus), not for website navigation. Navigation links should use <nav> with role="navigation". <nav role="menu">
Focusable element hidden from assistive technology aria-hidden="true" is set on a focusable element. This creates a confusing experience. If a stylesheet hides it until it opens, this is fine; if not, it fails. The page's HTML alone cannot say which. <a href="/book" class="cta" aria-hidden="true">
ARIA reference to non-existent id aria-describedby points at id 'price-note', which is not on the page. If that element only renders later (an error message, a popup), this is fine; if not, the reference does nothing. <p aria-describedby="price-note">

This reads the HTML the server sends, so it cannot see what a stylesheet hides or ARIA a script adds later, or tell whether a widget behaves as its role promises. The free audit runs nine more checks on the page as a browser renders it.

What this check looks for

The tool above checks for these things on the page you give it.

Buttons with no name
Icon buttons with no text or label, which screen readers announce only as "button".
Invalid attributes and values
Misspelled or made-up aria- attributes, and true or false attributes set to anything else, such as "yes".
Roles out of place
A tab outside a tab list, a menu item outside a menu, and site navigation marked up as an application menu.
Hidden but focusable
aria-hidden on elements that keyboard users can still tab to.
Broken references
aria-labelledby, aria-describedby, aria-controls and aria-owns pointing at IDs that don't exist.

The fix, in HTML

A close button in a dialog shows only an X icon. Screen readers announce "button" with no name.

HTML
<!-- Broken: an icon with no accessible name -->
<button class="dialog__close"><svg viewBox="0 0 24 24">...</svg></button>

<!-- Fixed: the button has a name, the icon is hidden -->
<button class="dialog__close" aria-label="Close">
  <svg viewBox="0 0 24 24" aria-hidden="true">...</svg>
</button>

What still needs a person

No automated tool can confirm these. AccessGuard marks related findings as Review, so nobody mistakes them for a pass.

This check maps to WCAG 4.1.2 Name, Role, Value, level A, and is partly automated.

  • Whether custom widgets such as tabs, menus and comboboxes behave as their role promises.
  • Whether state changes like expanded and selected are announced at the right time.
  • Whether a native HTML element would do the job without ARIA.

Questions

Does adding ARIA make a site more accessible?

Only when it is correct. Wrong roles and attributes can make a page worse for screen reader users than no ARIA at all. Native HTML elements are the safest choice.

What does WCAG 4.1.2 require?

Every control needs a name, a role and a state that assistive technology can read, and changes to them must be exposed.

Why do duplicate IDs matter?

Labels and ARIA references point at IDs. When an ID appears twice, the reference can land on the wrong element and the control loses its name.

Every check, not only ARIA

The free audit runs this check and every other one. Results in about a minute.

Run a free audit