Scan a site
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Accessibility

ARIA (Accessible Rich Internet Applications)

Published: · Updated:

ARIA (Accessible Rich Internet Applications, formally WAI-ARIA) is a W3C specification defining a set of attributes that extend HTML with semantics understandable to assistive technologies. Attributes like role, aria-label, aria-expanded or aria-live tell a screen reader what an element is, what it is called and what state it is in.

ARIA was created for components that native HTML cannot express — tabs, accordions, comboboxes, live alerts. ARIA itself does not change an element’s appearance or behavior. Native HTML elements already have their own semantics and behavior — ARIA does not replace those. For custom widgets, keyboard support and state logic must still be implemented separately.

The five rules of ARIA use

  • The first rule of ARIA: don't use ARIA if a native HTML element exists (button, nav, details).
  • Don't change native semantics unnecessarily (e.g. <button role="heading">).
  • Every interactive element with an ARIA role must be keyboard operable.
  • Don't hide focusable elements with role="presentation" or aria-hidden="true".
  • Every interactive element must have an accessible name.

Most common mistakes

The WebAIM Million report (2025) shows a correlation: pages that use ARIA have on average more detected accessibility errors than those without it. That is not proof that ARIA causes errors — more often, misused ARIA actively breaks the screen reader experience. Typical problems are roles without required attributes, conflicting states and “ARIA instead of HTML”.

Example

A button that expands a panel — aria-expanded communicates open/closed state to the screen reader. A native <button> already works with the keyboard (Enter/Space). The script still needs to toggle the panel and update aria-expanded.

Better: native <button>
HTML
<button type="button" aria-expanded="false" aria-controls="panel-faq">
  Show answer
</button>
<div id="panel-faq" hidden>
  Answer content…
</div>
Worse: <div> pretending to be a button
HTML
<div role="button" tabindex="0" aria-expanded="false">
  Show answer
</div>

Sources & further reading

Check your site accessibility

Insight runs automated tests for selected WCAG-based accessibility rules and ranks detected issues by priority.

No credit card Report with date and sources No account required