Describe every CAPTCHA's purpose in text
A CAPTCHA is an image or a sound with a task hidden inside it. G143 asks for a text alternative that says so, naming the non-text content as a CAPTCHA and describing what kind of task it sets, and W3C adds that where an alternate version exists the alternative should say how to find it. Note what it does not ask for. Describing the puzzle would defeat it, so the alternative describes the purpose instead. W3C lists this as sufficient for 1.1.1 Non-text Content at Level A, together with the technique that supplies a second CAPTCHA in a different modality. Together is the operative word. Neither counts on its own, because 1.1.1 does not exempt a CAPTCHA from having an alternative, it changes what the alternative has to contain.
How we find it in an audit
Our reviewers reach every CAPTCHA on the site with a screen reader and listen. The first question is whether they can tell a test is there at all, which an unlabeled image answers with silence. Then we look for the second modality, and check that it is genuinely reachable and genuinely operable rather than a link to a broken audio file.
How affected users experience it
An unlabeled CAPTCHA image is not a hard puzzle for a screen reader user. It is an invisible wall. The form will not submit, nothing explains why, and the most common conclusion is that the site is broken rather than that a test was set. Saying in text that a CAPTCHA is present, and where the audio version lives, at least turns a dead end into a route.
Passes vs. fails
Passes
<img src="captcha.png" alt="CAPTCHA. Type the characters shown in the image"> sits alongside a link to an audio version of the same test.Fails
<img src="captcha.png"> is an unlabeled image gating the login, so screen reader users cannot tell a test exists.How this gets tested
The W3C publishes test rules that define what a checker looks for here.
- Element marked as decorative is not exposedA tool can check this
- Image accessible name is descriptiveA tool finds candidates, you decide
- Image button has non-empty accessible nameA tool can check this
- Image has non-empty accessible nameA tool can check this
- Link has non-empty accessible nameA tool can check this
- Object element rendering non-text content has non-empty accessible nameA tool can check this
- SVG element with explicit role has non-empty accessible nameA tool can check this
- Image not in the accessibility tree is decorativeA tool can check this
Other ways to satisfy this rule
39 guides on this site are filed under 1.1.1 Non-text Content. W3C lists this one as sufficient for that rule only alongside G144, so the pair is what passes and neither half does on its own.
- ARIA6sufficientName icon-only controls with aria-label
- ARIA9sufficientAssemble one label from several text pieces
- ARIA10sufficientName images and charts with aria-labelledby
- ARIA15sufficientLink complex images to longer descriptions
- C9sufficientPut decorative images in CSS backgrounds
- G68sufficientDescribe the purpose of live-only streams
This guide is our interpretation of W3C technique G143: Providing a text alternative that describes the purpose of the CAPTCHA. 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.