Character Key Shortcuts
Single-character keyboard shortcuts (a single letter, number, or symbol) must be turnable off, remappable, or active only when the relevant component has focus. Protects voice-control and dictation users from accidental triggers.
What it asks
If the page implements a keyboard shortcut using only letter, number, punctuation, or symbol keys — without a modifier like Ctrl, Alt, or Shift — then at least one of the following must be true:
- The shortcut can be turned off in a settings menu.
- The shortcut can be remapped to use one or more non-printing keys (Ctrl, Alt, Shift, function keys).
- The shortcut is only active when the relevant component has focus.
The criterion exists primarily to protect speech-input users. Dragon NaturallySpeaking and Voice Control both transcribe spoken words into character keystrokes — and a stray “k” mid-sentence can trigger a destructive shortcut on Gmail, Slack, or any app that uses single-letter accelerators.
How to meet it
- Audit every single-key handler in the codebase:
keydown/keypresslisteners that checkevent.keyagainst a printable character without also checking modifier keys. - Add a “Keyboard shortcuts” settings panel where users can disable them entirely. Gmail and Slack both do this well.
- Or: scope shortcuts so they only fire when focus is inside the relevant region (e.g.
j/kto navigate emails only when focus is in the message list, not when the user is typing in a reply). - Prefer modifier-based shortcuts (Ctrl+/, Alt+N) as the default; reserve single-key shortcuts for opt-in power-user mode.
Common failures
- Gmail-style
j/k/r/ashortcuts that fire from anywhere in the document, including inside textareas with the right framework setup. - Custom data grids where
Deletedeletes a row without confirmation — fine for keyboard, deadly for voice users who say “delete that comma.” - Video players where Space toggles play/pause globally rather than only when the player has focus.
- Documentation sites with
/to focus search that fire even when focus is in a code-editor embed.
axe-core does not detect this — it requires source-code review or specific automated rules from Deque’s broader testing suite. Most production failures are caught only when a voice-control user files a complaint.
Why it matters
This SC was added in WCAG 2.1 specifically because voice-input adoption grew rapidly after 2017. A site that fails 2.1.4 can be functionally unusable for someone dictating: every paragraph triggers a different action. Even keyboard users with motor impairments who occasionally hit the wrong key benefit from being able to disable single-character shortcuts.