- Success Criterion 4.1.3
- Conformance level AA
Loading Spinner With No Programmatic Busy or Status State
4.1.3 — Status Messages
Scenario
Setting
A recipe site's ingredient list
What’s wrong
Loading/busy states ("Loading…", spinners) with no role="status" (code that makes updates announced) or aria-busy (code marking a region as loading) strategy.
Example
Try this on a recipe site's ingredient list: loading/busy states ("Loading…", spinners) with no role="status" (code that makes updates announced) or aria-busy (code marking a region as loading) strategy.
Why it matters
Screen-reader users who need spoken confirmation of saves, errors, and results. On a recipe site's ingredient list, that means they can't complete the task without extra help.
How to test
Trigger a loading state with a screen reader running: if 'Loading…' or a spinner appears with no role="status" or aria-busy strategy, it fails.
How to fix
The status text must be wired as a live region (code that makes screen readers announce updates)/status role so screen readers announce it automatically without moving focus.
Outcome
With the fix in place on a recipe site's ingredient list, they get the same outcome as everyone else.
Who is affected
Screen-reader users who need spoken confirmation of saves, errors, and results.
Learn more
- Understanding Understanding document (opens in a new tab)
Related scenarios
- Status Update Shown Visually but Never Wired for Screen Readers
- Cart Confirmation Toast With No Live Region Announcement
- Search Result Count That Updates Silently on Every Filter
- Autosave ‘Saved’ Indicator With No Live Announcement
- Error Toast With No Alert Role and No Focus Movement
- Live Region Whose Content Loads Before It’s Ready to Announce