Screen reader
A screen reader is software that converts screen content into speech synthesis or braille. It traverses the browser's accessibility tree, not the design, to convey page structure to blind or low-vision users.
Experienced screen reader users navigate at 300 words per minute. If your page is poorly structured, they don't slow down. They leave.
#How a screen reader reads your page
The screen reader sees no colors, layout, or typeface. It queries the accessibility tree that the browser builds from HTML. Each element appears with a role, a name, and a state.
A <button> appears as "button, Save". A <div onclick="save()"> appears as… nothing. The screen reader ignores it.
The three most-used screen readers, according to the WebAIM survey (1,568 respondents):
- NVDA — free, open source, Windows
- JAWS — paid, Windows, widely used in enterprise
- VoiceOver — built into macOS and iOS, no installation required
The user doesn't read the page top to bottom like an eye. They jump between headings, landmarks, links, and form fields. Semantic HTML provides these signposts. Without it, navigating is like searching for information in a 10,000-word plain text file.
#What developers often confuse
Screen reader ≠ speech synthesis. Speech synthesis turns text into sound, period. The screen reader interprets document structure — headings, lists, landmarks, component states — and uses speech synthesis as an output channel. Without semantic HTML, the screen reader has nothing to interpret.
Testing with one screen reader isn't enough. NVDA and JAWS don't convey the same content in the same way. An aria-describedby will be read automatically by one, ignored until a specific action by the other. WebAIM recommends testing with at least two screen readers on two different browsers.
Hiding visually ≠ hiding from screen readers. display: none and visibility: hidden remove the element from the accessibility tree. To hide text visually while keeping it accessible, use a CSS class like sr-only:
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}#In summary
A screen reader reads your code, not your design. Semantic HTML (<nav>, <main>, <h1>–<h6>, <button>) gives it structure. ARIA fills in what native HTML doesn't cover. Test with at least two screen readers — NVDA and VoiceOver are free.