Glossary · Code

ARIA (WAI-ARIA)

Definition: WAI-ARIA (Accessible Rich Internet Applications) is a W3C specification of roles, states and properties written into HTML as attributes. It tells assistive technology what an element is and what state it is in, where HTML alone cannot express it. ARIA changes meaning only, never behaviour [1].

German: ARIA · Also: WAI-ARIA, ARIA attributes, ARIA roles · Last reviewed: 27 September 2026

What ARIA does

ARIA supplies three kinds of information, which the browser writes into the accessibility tree:

  • Roles say what an element is: role="tab", role="dialog", role="switch".
  • States say what condition it is in: aria-expanded="true", aria-checked, aria-selected.
  • Properties provide relationships and names: aria-label, aria-labelledby, aria-describedby, aria-controls.

A screen reader turns that into, say, "Filter, button, collapsed". Without ARIA, a disclosure menu built from <div> elements would have no role and no state.

The first rule: no ARIA where HTML will do

The W3C's guidance on using ARIA opens with a clear rule: if a native HTML element already has the meaning and behaviour you need, use that element [2]. A <button> is focusable, responds to Enter and Space and is announced as a button – no ARIA required. The ARIA Authoring Practices Guide warns explicitly that bad ARIA does more harm than no ARIA [3].

ARIA is a promise to the user. role="button" announces a button; your code then has to deliver keyboard focus, Enter, Space and the current state itself.

In code

<!-- Promises a button, doesn't deliver -->
<div role="button" onclick="toggle()">
  Filter
</div>
<!-- Better: native element, state set by JS -->
<button type="button" aria-expanded="false"
        aria-controls="filter">
  Filter
</button>
<div id="filter" hidden>…</div>

The script that opens the filter sets aria-expanded to "true" and removes hidden. That is how a screen reader user learns that something changed.

Common mistakes

  • A role without behaviour: role="button" on a <div> with no tabindex and no key handling.
  • aria-hidden="true" on focusable elements. Focus lands on something that does not exist for the screen reader.
  • States that don't keep up: aria-expanded stays "false" while the menu is open.
  • Application roles for site navigation: role="menu" promises arrow-key behaviour like a desktop application. A main navigation is a <nav> containing a list of links.
  • Invented roles and typos such as role="botton" or aria-labeledby with one "l". Browsers ignore them silently.

How Reviseberg handles it

Reviseberg runs every axe-core rule on every page. For ARIA these include aria-roles, aria-allowed-attr, aria-required-attr, aria-valid-attr-value, aria-required-children and aria-hidden-focus, which find invalid, incomplete and contradictory attributes. The keyboard agent reports keyboard:unreachable when an element carries a control role such as button or tab but no Tab press reaches it – exactly the case in the example above. Whether a role fits how the widget actually behaves is a matter of judgement, which is why we count WCAG 4.1.2 as only partly automatable [4].

Semantic HTML · Accessible name · Accessibility tree · Landmark · Live region

Further reading

Frequently asked questions

Does ARIA make a website accessible?

No. ARIA only describes what an element is. Operability, focus and keyboard handling have to come from the code itself.

When do I actually need ARIA?

For custom controls with no native HTML equivalent – tabs, tree views or comboboxes, for example – and for states such as "expanded". The ARIA Authoring Practices Guide describes the common patterns, including their keyboard behaviour.

What is the difference between aria-label and aria-labelledby?

aria-label sets the name as text inside the attribute. aria-labelledby points to another element whose visible text becomes the name. Visible text is usually the better choice.

Sources

  1. W3C, Accessible Rich Internet Applications (WAI-ARIA) 1.2 – https://www.w3.org/TR/wai-aria-1.2/
  2. W3C, Using ARIA – https://www.w3.org/TR/using-aria/
  3. W3C WAI, ARIA Authoring Practices Guide, Read Me First – https://www.w3.org/WAI/ARIA/apg/practices/read-me-first/
  4. W3C, WCAG 2.2, Success Criterion 4.1.2 Name, Role, Value – https://www.w3.org/TR/WCAG22/#name-role-value

See what a scan finds on your site

One page in about thirty seconds, no email needed. The full report covers up to 100 pages and a keyboard journey.