Probeo
probeo

ARIA Attribute Issues: Missing Required Attributes and Invalid Values

An explanation of missing required ARIA attributes and invalid ARIA attribute values, why they break assistive technology, and how the WAI-ARIA role-to-attribute contract works.

Last updated 02/08/2026

ARIA attribute issues fall into two categories: missing required attributes for a given role, and attribute values that do not match the WAI-ARIA specification. Both create a gap between what the interface presents visually and what assistive technology can communicate to users. A custom checkbox without aria-checked, or an element with aria-hidden set to 'yes' instead of 'true', produces a control that looks correct but behaves unpredictably for screen readers.

What ARIA attribute issues are

WAI-ARIA defines a contract between roles and their attributes. Each role requires specific attributes to communicate state and behavior to assistive technology. When a role is assigned without its required attributes, the browser exposes an incomplete accessibility object. When an attribute is present but its value falls outside the specification, the browser either ignores it or interprets it unpredictably. Both patterns violate WCAG 4.1.2, which requires that user interface components expose their name, role, and state programmatically.

Where teams usually encounter this

Custom interactive components are the primary source. A team builds a toggle, accordion, or menu using divs and spans, assigns an ARIA role, and stops there. The component works visually. Manual testing confirms the interaction. But the role contract is incomplete. The component never communicates its current state to anything that cannot see the screen.

Missing required attributes

The WAI-ARIA specification maps each role to a set of required attributes. role="checkbox" requires aria-checked. role="slider" requires aria-valuenow, aria-valuemin, and aria-valuemax. role="combobox" requires aria-expanded. These are not suggestions. Without them, the role declaration is structurally incomplete. A screen reader encounters a checkbox that cannot report whether it is checked. A slider that cannot report its position. The role creates an expectation the implementation does not fulfill.

Invalid attribute values

ARIA attributes accept specific value types: true/false, tristate, ID references, token lists. Common mistakes include setting aria-hidden to 'yes' instead of 'true', using aria-checked with a freeform string instead of 'true', 'false', or 'mixed', or setting aria-live to a value other than 'off', 'polite', or 'assertive'. Browsers handle invalid values inconsistently. Some ignore the attribute entirely. Others fall back to a default. The result varies by browser and assistive technology combination, which makes the failure intermittent and difficult to reproduce.

Why this happens as codebases grow

ARIA is often added as a remediation step rather than a design constraint. A component ships without ARIA. An audit flags the missing semantics. A developer adds a role without reviewing the full attribute contract for that role. The fix addresses the audit finding without addressing the specification requirement. Over time, partial ARIA implementations accumulate. Each one passes visual review. Each one breaks for users who depend on the programmatic interface.

What's wrong

Incomplete ARIA is worse than no ARIA. A native HTML element without ARIA attributes exposes its semantics through built-in browser behavior. A custom element with a role but missing required attributes overrides those defaults and replaces them with nothing. The assistive technology receives a declaration of what the element is, but no information about what state it is in.

Why it matters

Assistive technology users rely on programmatic state to operate controls they cannot see. A checkbox without aria-checked cannot be used. A slider without aria-valuenow cannot be adjusted with any understanding of the current position. These are not edge cases. They are the primary interaction path for screen reader users. The interface appears functional in sighted testing because visual rendering does not depend on ARIA. The failure is entirely invisible to anyone not using assistive technology.

The correct change

Audit every element with an ARIA role against the WAI-ARIA specification for that role's required attributes. Add missing attributes and bind them to component state so they update dynamically. Replace invalid attribute values with values from the specification's allowed set. Where possible, replace custom ARIA implementations with native HTML elements that provide the same semantics without requiring manual attribute management.

Scope

This applies at the page level to every element that uses an ARIA role or ARIA attribute. The violation is per-element, but the pattern typically recurs across a shared component library. Fixing the component at its source resolves every instance where it appears.

How to verify

Run an accessibility audit that checks role-to-attribute requirements. Inspect each element with an ARIA role in the browser's accessibility tree and confirm that all required attributes are present and carry valid values. Test with a screen reader to confirm that interactive controls report their state correctly during use.

What becomes clearer once ARIA attributes are correct

  • Which custom components have complete programmatic interfaces
  • Where native HTML elements could replace custom ARIA implementations
  • Which interactive patterns are invisible to assistive technology
  • Where component state is tracked visually but never exposed programmatically

Common questions teams ask

Should we add ARIA to every element?
No. The first rule of ARIA is: do not use ARIA if a native HTML element provides the same semantics. A native <input type="checkbox"> already exposes checked state without any ARIA attributes. ARIA is only necessary when native HTML cannot express the needed semantics.
How do aria-live regions relate to ARIA attribute issues?
aria-live is an ARIA attribute that must use one of three values: 'off', 'polite', or 'assertive'. Using an invalid value like 'true' or 'yes' means the region will not announce dynamic content changes to screen readers. The attribute is present but functionally broken.
How do we handle dynamic content that changes ARIA state?
ARIA attributes must reflect current component state at all times. When a checkbox toggles, aria-checked must update from 'true' to 'false' or vice versa. When an accordion opens, aria-expanded must change. Static ARIA attributes on dynamic components are a common source of attribute value mismatches.
Why does partial ARIA cause more problems than no ARIA?
Native HTML elements have built-in accessibility semantics. When you add a role, you override those defaults. If you then omit the required attributes for that role, you have replaced working semantics with incomplete ones. The assistive technology trusts the role declaration and expects the attributes that go with it.
Can automated tools catch all ARIA attribute issues?
Automated tools detect missing required attributes and invalid static values reliably. They cannot verify that attribute values update correctly during interaction. A checkbox might have aria-checked="false" in the DOM but never update it when clicked. That failure requires manual or integration testing to find.
What is the most common ARIA attribute mistake?
Using boolean strings incorrectly. ARIA boolean attributes accept 'true' and 'false' as string values, not JavaScript booleans and not 'yes'/'no'. Setting aria-hidden={true} in JSX works because React converts it, but setting aria-hidden='yes' in HTML does not. The browser either ignores the attribute or treats it as 'true' depending on the implementation.