Skip to main content
WCAGrules
Quick navigation

Do not post status messages without a role

Something important appears on the page without moving focus, like 3 results found or Saved, and nothing tells a screen reader it arrived. F103 is the failure technique for that, and a match is a defect rather than a method. Two things have to be true before the rule applies at all, which is what stops it swallowing every update on the page. The new content must not take focus, and it has to report one of four things. The outcome of an action, the state of the application, the progress of a process, or the existence of errors. Content that takes focus falls outside this rule, because the user has been carried to it. Five mechanisms satisfy it. The HTML output element, role status, role alert, role log, and aria-live set to polite or assertive. And the container has to be in the page before the text goes into it. Injecting the container and its message together announces nothing, which is the most common way this fix gets broken.

How we find it in an audit

Reading the code predicts the failure and a screen reader confirms it, which is the order W3C sets out and the order we work in. A reviewer decides first whether the update is a status message at all, since something that takes focus is not one. Then the container gets checked for one of the five mechanisms, and checked again for having existed before the text arrived. Then we run the flow with a screen reader and write down what was actually announced, because a mechanism can be present and still silent, and the announcement is what the rule is about.

How affected users experience it

A sighted user catches the count changing in the corner of their eye and carries on. A screen-reader user gets nothing, so they keep working on the assumption that nothing happened. They submit a second time. Or they go looking for evidence, which means reading the page from the top, because there is no announcement to jump to. On a search that returned no results, the cost is somebody reading an empty page carefully, hunting for results that were never there.

Passes vs. fails

Passes: the action announces itself. Fails: screen readers hear nothing.

Passes

<div role="status" id="results-status"></div>
<!-- the container ships with the page, empty -->
statusEl.textContent = "3 results found";

Fails

resultsDiv.textContent = "3 results found"; // a plain div announces nothing

The other techniques filed under this rule

15 guides on this site are filed under 4.1.3 Status Messages. W3C documents this one as a failure of that rule, so it describes a way the rule gets broken rather than a way to pass it.

This guide is our interpretation of W3C technique F103: Failure of Success Criterion 4.1.3 due to providing status messages that cannot be programmatically determined through role or properties. W3C publishes its techniques as guidance rather than as the standard, and says so on every one of them. The success criterion is what conformance is measured against, and a technique is one documented way to meet it.

Go somewhere useful

Find tools, resources and your workspace.

29 destinations