How a screen reader reads a web page

A screen reader does not read pixels. It reads the accessibility tree, the browser's list of a page's elements with a name and a role for each, and speaks it in source order or sends it to a braille display. Many people do not listen from top to bottom and jump between headings, links, landmarks and form fields instead, so what the page's code exposes decides what they hear.

Published . Last reviewed .

A screen reader is software that presents a page as speech or braille. W3C describes screen readers as tools that can read the information on the screen out loud or present it in braille (how people with visual disabilities use the web). That makes the code the interface: visual styling alone does not tell a screen reader what something is, and a heading that is only bold text is not a heading to the listener. For the wider picture, start with what web accessibility is.

From markup to speech

Browsers convert markup into the DOM tree, then build an accessibility tree from it, which platform accessibility APIs pass to assistive technologies such as screen readers (MDN's accessibility tree entry). Each object in the tree has four properties: a name (what to call it), a description, a role (what kind of thing it is) and a state, such as checked or collapsed. A link whose text is "Pricing plans" has the name "Pricing plans" and the role link.

Native HTML fills in the tree for you. The HTML Accessibility API Mappings specification maps h1 to h6 to the heading role, an a element with an href to the link role and button to the button role. An a element with no href maps to the generic role, which says nothing about being a link, and an img with an empty alt maps to the none or presentation role, so it is left out of the speech.

What a screen reader gets from common markup, and what the listener gets from it. Exact wording varies by screen reader and settings.
MarkupWhat the tree holdsWhat the listener gets
<h2>Shipping</h2>Role heading, level 2, name "Shipping"The word "Shipping", announced as a heading of level 2
<a href="/pricing/">Pricing plans</a>Role link, name taken from its textThe words "Pricing plans", announced as a link
<img src="kettle.jpg" alt="Red enamel kettle on a stove">Role image, name taken from altThe alt text, announced as an image
<img src="divider.png" alt="">Presentational, no nameNothing: it is skipped
<label for="email">Email</label> and its inputRole text box, name taken from the labelThe word "Email", announced as a text field
<div onclick="search()">Search</div>Generic container holding text, no roleThe word "Search" as plain text, with no sign that it does anything, and Tab does not stop on it

Information carried only by styling does not reach the tree. WCAG 1.3.1 Info and Relationships asks that information, structure and relationships conveyed through presentation can be programmatically determined or are available in text (W3C's Understanding page). And a control can look perfect and still reach the tree as plain text, as the last row shows.

In what order does a screen reader read a page?

In the order of the code. WebAIM notes that audio interfaces present content linearly, one item at a time, so the sequence in the code is the sequence a listener gets. CSS can move a sidebar or a price somewhere else on screen without changing the sequence in the source, and a screen reader generally follows the source. WCAG 1.3.2 Meaningful Sequence asks that when order affects meaning, a correct sequence can be determined by software.

Two details shape what a listener hears first. Screen readers announce the page title when a page loads, so a clear page title is what a listener hears on arrival. The lang attribute on the html element tells the screen reader which language to speak, because every language has its own pronunciation rules (WebAIM; see the lang attribute guide).

How people move through a page

Many listeners do not start at the top and wait. In WebAIM's Screen Reader User Survey #11, the most common first move on a lengthy page was to navigate through the headings, and 51.9% of respondents found heading levels very useful and 36.4% somewhat useful. WebAIM notes its sample was not controlled, so these are respondents' reports, not a count of all users.

Screen readers make this fast with single keys. In NVDA's browse mode, these keys jump to the next element of a type, and adding Shift jumps to the previous one (NVDA user guide; WebAIM's NVDA guide).

Single-key navigation in NVDA's browse mode, and what the page needs to provide for each
KeyJumps toWhat the page needs
H, or a number keyThe next heading, or the next one at the level of the number pressedReal heading elements in a logical order (heading structure)
KThe next linkLink text that makes sense on its own (link text)
DThe next landmarkLandmarks such as main and nav, labeled when there are several (landmarks)
FThe next form fieldA label on every field
TThe next tableHeader cells, so each value is read with its headings
NVDA+F7Opens the Elements List of page links, headings and landmarksAll of the above, since the list shows them out of context

VoiceOver, built into Mac, iPhone and iPad, does the same job with a different interface. On a Mac, its web rotor opens with VO+U and lists element types such as headings and links, and VO+Command+H and VO+Command+L jump to the next heading and link (WebAIM's VoiceOver guide). TalkBack is Google's screen reader for Android. In WebAIM's survey, JAWS and NVDA were the two most used primary desktop screen readers, followed by VoiceOver, and WebAIM advises building to accessibility standards and generally accepted techniques, because differences between screen readers do not typically change coding practices. A skip link lets a listener pass the repeated header and menu.

Browse mode and focus mode

Reading a page and typing into a form need different keystrokes, so NVDA has two modes. In browse mode, which NVDA uses for web pages, the page is a flat representation you move through with the cursor keys as if it were a normal text document, plus single letters such as H. In focus mode, almost every key goes straight to the control, so typing works. NVDA switches to focus mode when you Tab or click to a control that needs it, switches back when you Tab or click to one that does not, and Escape switches back to browse mode if focus mode was switched to automatically (NVDA user guide).

A custom widget has to tell the truth about itself, because the screen reader works from what each control exposes. WCAG 4.1.2 Name, Role, Value asks that the name and role of every interface component, including components generated by scripts, can be determined by software (W3C's Understanding page). The ARIA basics guide covers adding that information when native HTML cannot.

What a screen reader skips, and what it reads that you cannot see

  • Images with an empty alt. W3C says decorative images should get a null alt so assistive technology can ignore them, and that when the attribute is not provided, some screen readers announce the file name of the image instead (W3C: decorative images). See our decorative images guide.
  • Images that carry meaning. The alt text is what gets read, and a linked image with no alt text is generally read by its link destination, or its file name (WebAIM). Alt text that is present but false is read just as confidently, so good alt text has to be true of the image.
  • Hidden content. WebAIM says content hidden with display: none or visibility: hidden is ignored by screen readers, while text positioned off-screen is still read (invisible content). The ARIA specification defines aria-hidden as indicating whether an element is exposed to an accessibility API and warns to use extreme caution when hiding visible content (WAI-ARIA 1.2). A hidden element that can still take focus is a trap: see aria-hidden and focusable elements.
  • Data tables. With correct markup, screen readers read the column or row heading as the user enters each cell (WebAIM). See accessible data tables.

How a control gets its name

The name is what a listener hears for a link, a button or a field. The ARIA Authoring Practices Guide describes an accessible name as a short string, typically 1 to 3 words, that authors associate with an element, and says names convey what an element is for and tell it apart from others (APG, names and descriptions). The Accessible Name and Description Computation 1.2 specification sets the order a browser follows, in simplified form:

  1. aria-labelledby, if present.
  2. aria-label, if the name is still empty.
  3. Native markup, such as the alt attribute or a label element.
  4. The element's own content, for roles that allow it.
  5. The tooltip attribute (title), only if nothing else has provided a name.

Links and buttons are named from their content: the WAI-ARIA 1.2 role list includes both among the roles that support name from content, and both require a name. So a link reading "Read more" is announced as "Read more", and an icon-only button with no text, label or alt is announced as a button with nothing to say about its purpose.

APG's rules of thumb: rely on HTML naming techniques where you can, prefer visible text for the name, and leave the role out of the name, because the screen reader already announces it. A navigation landmark labeled "Site Navigation" is announced as "Site Navigation Navigation" (APG, landmark regions).

Names matter for links in particular. WebAIM says users can obtain a list of the links on a page, arranged alphabetically, and that links should make sense when read out of context, so ten "Read more" links make a list of ten identical entries. See WCAG 2.4.4 Link Purpose for the criterion. Naming failures are common: the 2026 WebAIM Million, with data from February 2026, found empty links on 46.3% of home pages, empty buttons on 30.6% and missing form input labels on 51%.

Common faults and what they sound like

Common faults, what a screen reader user experiences, and where to read the fix
FaultWhat the listener getsRead next
A heading made from bold or large textNot in the headings list, so the H key skips itHeading structure
An icon-only link or button with no name"Link" or "button" and no purposeAlt text for icons
A form field with no labelA text box with no nameAccessible forms
A clickable div in place of a buttonPlain text, no role and no Tab stopButtons vs links

Unnamed links, buttons and fields are among the most common accessibility errors, and skipped heading levels were present on 41.8% of all pages in the same WebAIM Million.

Listen to your own page

NVDA is free and runs on Windows, and VoiceOver comes with Mac, iPhone and iPad. WebAIM suggests testing with default or minimally customized settings.

  1. Set a comfortable speech rate. In NVDA, press NVDA+Ctrl+Up or Down arrow (WebAIM's NVDA guide).
  2. Load the page and listen for the page title.
  3. Press H repeatedly. Does the sequence of headings read like an outline of the page?
  4. Press K repeatedly. Does each link say where it goes?
  5. Press D, then Tab through the form fields. Are landmarks and field names clear?
  6. Note every place that sounds like nothing, a bare "button" or "link", or the wrong order.

Listening is a check, not proof that a page meets WCAG or any law. Our guide to how to test website accessibility puts it beside the other checks, and the 5-minute keyboard test covers the keyboard side.

Check it yourself

These free tools find the structural problems that change what a screen reader says:

  • Heading checker draws the outline a screen reader user navigates by and flags a missing H1, more than one H1, skipped levels and empty headings.
  • Link text checker lists every link with the name a screen reader announces and flags links with no name, vague text, bare URLs and repeated text that goes to different places.
  • Alt text checker judges whether alt text is true of the image, which matters because the screen reader reads it as fact.
  • Accessibility bookmarklet checks the live page in your own browser, including headings added by script.
  • Scan my site for free runs 16 rule-based checks on the HTML your server sends, including missing alt attributes and unnamed links, buttons and form fields.

None of them says how a page sounds. They find what could make it sound wrong.

Keep it checked

Hearing a page once tells you how it sounds today. A redesign or a template change can alter that next week. GotAlt checks the pages you monitor every week. It runs its rule checks, which include links and buttons with no accessible name and form fields with no label, compares the alt text of images with the images themselves (up to six per page), opens monitored pages in a browser for contrast and other checks that need a rendered page (see what we check), and reports what changed. Plans are from $69 a month: Audit my whole site from $69/mo. Automated checks cover part of WCAG, so listening to your key pages stays worth doing.

Screen reader questions

What is a screen reader?

Software that presents what is on a screen as speech or braille, used by people who are blind. W3C describes screen readers as tools that read screen information out loud or present it in braille. Common examples are JAWS, NVDA and VoiceOver on desktop, and TalkBack and VoiceOver on phones.

Does a screen reader read everything on a page?

No. It reads what the browser exposes in the accessibility tree. Images with an empty alt attribute are skipped, and content hidden with display: none or visibility: hidden is ignored, while text moved off-screen with CSS is still read. Many listeners also skip ahead by headings, links and landmarks instead of hearing a page in full.

In what order does a screen reader read a page?

In the order of the page's code, one item at a time. CSS can change where things appear on screen without changing that order, so a layout that looks right can read out of sequence. WCAG 1.3.2 Meaningful Sequence asks for a correct reading sequence to be available to software whenever order affects meaning.

How do screen reader users find things on a long web page?

In WebAIM's Screen Reader User Survey #11, navigating through the headings was the most common first move on a lengthy page, ahead of the Find feature, reading through the page, and moving by links or landmarks. Real headings in a logical order give them something to navigate by.

What is the difference between browse mode and focus mode?

In NVDA, browse mode is for reading web pages: the page is presented as a flat text document and single keys such as H jump between headings. Focus mode passes almost every key to the control, so you can type in a text box. NVDA switches automatically when you Tab to a control that needs focus mode, and Escape switches back to browse mode if NVDA switched to focus mode automatically.

How can I test my website with a screen reader for free?

NVDA is a free screen reader for Windows, and VoiceOver is built into Mac, iPhone and iPad. Load the page, listen to the title, then use the heading, link and landmark keys and Tab through the form fields. WebAIM suggests testing with default or minimally customized settings.

Can a tool tell me how a screen reader will read my page?

Only in part. Tools can flag missing alt attributes, links and buttons with no name, form fields with no label and skipped heading levels. Whether the spoken result makes sense still takes a person listening, so treat a clean scan as an input to that check, not a substitute for it.

Find what changes what a screen reader says

The free scan runs 16 rule-based checks on up to three pages of your site, including alt text, link and button names, form labels and heading structure. No signup.

Scan my site for free Audit my whole site from $69/mo