NVDA (NonVisual Desktop Access) is the free screen reader that’s been helping people who are blind and vision-impaired navigate the web since 2006. Created by NV Access, it’s completely open source and works well with Chrome, Firefox, and Edge.
Getting started is simple: Visit http://www.nvaccess.org/download/. The download is free; a donation is optional.
Now, here’s what you need to remember: every NVDA command you’re about to learn comes with an asterisk. Sometimes they work perfectly. Sometimes they don’t work at all. The difference isn’t random – it’s predictable, and understanding why shortcuts fail is just as important as memorising the keys themselves.
Let’s start with that.
Understanding the three conditions for NVDA success
When NVDA keyboard shortcuts stop working, the problem often lies not with the screen reader or the user, but with the underlying code of the website. A working code is one of three conditions that need to be filled in order for everything to work as it should. The other two are a bit easier to fix, but if any of those aren’t fulfilled, you might as well be pressing keys into the void.
Let’s take a closer look.
Condition 1: keyboard layout
NVDA speaks two dialects – desktop and laptop.
- Desktop layout: Uses Insert as the modifier key.
- Laptop layout: Uses Caps Lock instead.
Important note: Throughout this article, when you see “NVDA” in a keyboard shortcut like “NVDA+1” or “NVDA+F7”, it refers to whichever modifier key your layout uses. So “NVDA+1” means:
- Insert+1 if you’re using desktop layout.
- Caps Lock+1 if you’re using laptop layout.
Not sure which you’re using? Press NVDA+1 for a quick test. This activates Input Help mode, and NVDA will announce which modifier key you’re currently set to use.
Did you know? Laptop users often hit another snag: function keys. That NVDA+F7 command everyone raves about? On many laptops, you’ll need Fn+NVDA+F7 instead. Your F7 key might be controlling screen brightness by default, not sending F7 to NVDA.
Condition 2: browse vs focus mode
This takes some getting used to.
NVDA has two distinct personalities:
- Browse mode: For reading and navigating (H for headings works here).
- Focus mode: For typing in forms and interacting with widgets.
By default, you’ll hear beeps when NVDA switches between modes. A low beep means Browse mode; a high beep signals Focus mode. Some users find these confusing, but thankfully, you can switch to voice announcements instead through NVDA’s Browse mode settings (NVDA+Control+B).
Now, as good as the automatic switch between modes, it fails spectacularly on poorly coded sites. You can override it manually by using NVDA+Space, but ideally, you shouldn’t have to.
Condition 3: proper website markup
The markup of a website, i.e., its underlying HTML code, determines whether NVDA users can navigate efficiently or get stuck on your site. For example, why does pressing H find every heading on Wikipedia but nothing on your company’s internal portal?
Simple. Wikipedia uses actual <h1>
through <h6>
tags. Your portal probably uses <div class="heading">
styled to look like headings.
Quick quality check: press NVDA+F7 on any page. This opens the Elements List – a complete inventory of headings, links, and landmarks. Empty categories? That’s missing semantic markup.
Sites built by developers trained in semantic HTML don’t have these problems. Every shortcut works because the foundations are solid.
Essential NVDA shortcuts every developer must test
Before diving into the shortcut reference table below, here are the critical NVDA commands that reveal whether your code is genuinely accessible. Test these on every component you build.
- H – Heading Navigation – Tests whether your heading hierarchy uses actual
<h1>
through<h6>
tags. If pressing H finds nothing, you’ve likely used<div class="heading">
instead. This single keystroke reveals whether users can quickly scan your page structure. - F – Form Field Navigation – Instantly exposes unlabelled inputs, missing fieldsets, and improper form structure. Every form field should be reachable with F and announce its purpose. No announcement = missing
<label>
or aria-label. - B – Button Navigation – Differentiates real
<button>
elements from clickable divs. If B skips your interactive elements, you’ve built mouse-only interfaces that fail keyboard users. Real buttons work with both Enter and Spacebar. - K – Link Navigation – Tests whether your links use proper
<a>
tags with valid href attributes. Links made from JavaScript onclick handlers won’t be found. Each link should announce its destination, not just “link.” - T – Table Navigation – Immediately reveals whether data tables have proper structure. Users should hear row and column headers when navigating. If T finds nothing, you’ve built div-based layouts instead of semantic tables.
The power tool: NVDA+F7 (Elements List)
This single shortcut provides a complete accessibility audit.
Opens a dialogue showing:
- All headings (reveals your document structure).
- All links (shows if they’re descriptively labelled).
- All form fields (exposes missing labels).
- All buttons (differentiates real from fake).
- All landmarks (shows your ARIA regions).
Empty categories in this list = missing semantic markup in your code.
Think of it as your instant quality report. One keystroke tells you exactly what NVDA users will and won’t be able to find on your page.
Mode testing: NVDA+Space
Tests whether your interactive widgets properly trigger focus mode.
Custom components should:
- Switch to focus mode automatically when focused.
- Allow manual mode switching when needed.
- Announce the mode change with a beep.
If mode switching fails, your ARIA roles or keyboard handling are incorrect.
Quick test: tab to your custom dropdown. Does NVDA switch to focus mode? Can users type to filter options? If not, you’ve probably missed role="combobox"
or proper focus management.
What failed tests tell you
When shortcuts don’t work, they pinpoint exact code issues.
Shortcut fails | The problem | The fix |
---|---|---|
H finds nothing | Missing semantic headings | Use real <h1> –<h6> tags |
F skips fields | Missing labels or improper markup | Add <label> or aria-label |
B misses buttons | Using clickable divs instead of buttons | Replace with <button> elements |
Mode doesn’t switch | Missing or incorrect ARIA roles | Check role attributes and focus handling |
NVDA+F7 shows empty lists | No semantic structure | Rebuild with proper HTML elements |
When these shortcuts fail, you’ve created genuine barriers that prevent efficient navigation.
The comprehensive tables below show all NVDA shortcuts, but master these essential ones first. They’re your quality checklist for accessible implementations.
Complete NVDA shortcut reference
Now that you know what to test for, here’s the complete reference. The full list of NVDA’s keyboard commands can be found in the official NVDA User Guide.
Basics
Topic | Task | Command |
---|---|---|
On/Off: | Turn NVDA on | Control + Alt + N |
Turn NVDA off | Insert + Q | |
Reading: | Stop Reading | Control |
Start reading continuously from this point on | Insert + ↓ or Numpad Plus (+) | |
Read next item | ↓ | |
Read next focusable item (e.g. link, button) | Tab | |
Activate: | Link | Enter |
Button | Enter or Spacebar | |
Headings: | Go to next heading | H |
Go to next heading of level [1-6] | 1 – 6 | |
List all headings | Insert + F7 | |
Landmarks: | Go to next landmark/region | D |
Elements list: | Show list of all links, headings, form fields, buttons, and landmarks | Insert + F7 |
Tables: | Go to next table | T |
Navigate table cells | Ctrl + Alt + ↓ or ↑ or ← or → | |
Lists: | Go to next list | L |
Go to next list item | I | |
Graphics: | Go to next graphic | G |
Links: | List all links | Insert + F7 |
Go to next link | K | |
Go to next unvisited link | U | |
Go to next visited link | V | |
Navigate: | Toggle between: Radio buttons, <select>list items, Tabs (ARIA widget), Tree view items (ARIA widget), Menu items (ARIA widget) | → or ↓ or ← or ↑ |
Go backward: | To previous heading, landmark, table, focusable item, etc. | Shift + [H, D, T, Tab, etc.] |
Reading text
Topic | Task | Command |
---|---|---|
Line: | Say prior line | ↑ or Numpad 7 |
Say next line | ↓ or Numpad 9 | |
Say current line | Insert + ↑ or Numpad 8 | |
Start of line | Shift + Numpad 1 | |
End of line | Shift + Numpad 3 | |
Top line | Shift + Numpad 7 | |
Bottom line | Shift + Numpad 9 | |
Character: | Say prior character | ← or Numpad 1 |
Say next character | → or Numpad 3 | |
Say current character | Numpad 2 | |
Say character phonetically | Numpad 2 twice quickly | |
Word: | Say prior word | Ctrl + ← or Numpad 4 |
Say next word | Ctrl + → or Numpad 6 | |
Say current word | Numpad 5 | |
Sentence: | Say prior sentence | Alt + ↑ |
Say next sentence | Alt + ↓ | |
Say current sentence | Alt + Numpad 5 | |
Paragraph: | Say prior paragraph | Ctrl + ↑ |
Say next paragraph | Ctrl + ↓ | |
Spelling: | Spell word | Numpad 5 twice quickly |
Spell word phonetically | Numpad 5 thrice quickly | |
Spell current line | Insert + ↑ twice quickly | |
Spell current line phonetically | Insert + ↑ thrice quickly |
Tables
Topic | Task | Command |
---|---|---|
Table: | Go to next (previous) table | T (Shift + T) |
Cell: | Cell to right | Ctrl + Alt + → |
Cell to left | Ctrl + Alt + ← | |
Cell below | Ctrl + Alt + ↓ | |
Cell above | Ctrl + Alt + ↑ |
Forms
Topic | Task | Command |
---|---|---|
List all: | List all form elements | Insert + F7 |
Navigate: | Next form field | F |
Next focusable item | Tab | |
Next button | B | |
Checkboxes: | Select and deselect | Spacebar |
Next checkbox | X | |
Combo boxes (<select>): | Open combo box | Alt + ↓ |
Browse/select options | ↓ or the First letter | |
Select multiple options | Shift + ↓ (or ↑) | |
Next combo box | C | |
Radio buttons: | Toggle selection | ↑/↓ |
Next radio button | R | |
Focus mode*: | Toggle between focus mode and browse mode | Insert + Spacebar |
Other commands
Task | Command |
---|---|
Search for a word or a phrase | NVDA + Ctrl + F |
Keyboard help | Insert + 1 |
Next blockquote | Q |
Next key you hit ignores NVDA and is a normal keystroke | Insert + F2 |
Speak characters typed | Insert + 2 |
Speak words typed | Insert + 3 |
Read entire foreground window (e.g. for dialogs) | Insert + B |
Announce title of the current foreground window | Insert + T |
Making NVDA shortcuts work reliably through better web development
When developers use divs instead of headings, create fake buttons, or mismanage focus, they’re actively blocking NVDA users from navigating efficiently.
Think about it: every <div onclick="...">
you write is a potential dead end for the B key. Every heading styled with CSS instead of HTML tags is invisible to the H command. You’re creating a maze where the usual navigation tools simply don’t work.
That’s why training is so important. When developers complete courses like The A11Y Collective’s offerings, they learn to build sites where:
- Every NVDA shortcut works as intended.
- Mode switching happens automatically when needed.
- Focus never gets lost in single-page applications.
- Dynamic content updates are properly announced.
For example, our ‘Accessible code‘ course teaches developers to build with semantic HTML where NVDA shortcuts work by default. No hacks needed. Meanwhile, ‘ARIA explained‘ takes it further, showing how to enhance complex interactions without breaking navigation.
So, if your team is tired of treating accessibility as an afterthought, this training can help you turn it into a natural part of your development workflow. In the end, NVDA shortcuts will become your testing checklist, not your debugging nightmare.

Ready to build websites where NVDA shortcuts actually work?
Learn how to create sites that work seamlessly with screen readers from the ground up.