← Home ← Codex ← DEBT
Browse by Category
+ added · updated 7d
← Back to glossary

Screen Readers — How They Parse HTML

Accessibility HTML5 Intermediate
debt(d5/e5/b5/t7)
d5 Detectability Operational debt — how invisible misuse is to your safety net

Closest to 'specialist tool catches' (d5) — axe and Lighthouse catch missing alt/labels, but many a11y issues (focus order, dynamic announcements) require manual NVDA/VoiceOver testing per detection_hints.

e5 Effort Remediation debt — work required to fix once spotted

Closest to 'touches multiple files / significant refactor' (e5) — replacing div-buttons with semantic elements, adding ARIA-live, and fixing focus traps typically spans many components, not a one-line fix.

b5 Burden Structural debt — long-term weight of choosing wrong

Closest to 'persistent productivity tax' (b5) — since applies_to is all web contexts, accessibility considerations shape every UI component going forward, slowing many work streams.

t7 Trap Cognitive debt — how counter-intuitive correct behaviour is

Closest to 'serious trap' (t7) — the misconception that ARIA equals accessibility contradicts the actual rule (native HTML first); developers confidently add role=button to divs thinking it's correct when it breaks keyboard semantics.

About DEBT scoring →

Also Known As

NVDA JAWS VoiceOver accessibility tree

TL;DR

Screen readers build an accessibility tree — semantic HTML provides roles automatically; ARIA fills gaps for custom components.

Explanation

NVDA, JAWS, VoiceOver consume the accessibility tree — each node has role, name, state, value. Semantic HTML provides these automatically: button→role=button, nav→role=navigation. Div and span have no role. First rule of ARIA: use native HTML first.

Common Misconception

Adding ARIA roles makes content accessible — the first rule of ARIA is use native HTML first; button is always better than div with role=button.

Why It Matters

A page built entirely with divs announces nothing to screen readers — semantic HTML makes it fully navigable without any ARIA.

Common Mistakes

  • div for buttons — no keyboard focus
  • Images without alt text
  • Removing outline for aesthetics
  • Dynamic content without aria-live

Code Examples

✗ Vulnerable
<div class="btn" onclick="submit()">Submit</div>
✓ Fixed
<button type="submit">Submit</button>
<nav aria-label="Main"><ul><li><a href="/">Home</a></li></ul></nav>

Added 16 Mar 2026
Edited 22 Mar 2026
Views 91
Rate this term
No ratings yet
🤖 AI Guestbook educational data only
| |
Last 30 days
0 pings T 0 pings W 6 pings T 11 pings F 0 pings S 0 pings S 0 pings M 0 pings T 0 pings W 0 pings T 1 ping F 1 ping S 5 pings S 4 pings M 1 ping T 4 pings W 0 pings T 0 pings F 0 pings S 0 pings S 0 pings M 1 ping T 0 pings W 0 pings T 1 ping F 0 pings S 1 ping S 1 ping M 0 pings T 0 pings W
No pings yet today
No pings yesterday
Amazonbot 19 Ahrefs 19 Scrapy 15 Perplexity 7 Google 6 SEMrush 5 Unknown AI 2 PetalBot 2 Claude 1 Bing 1 Meta AI 1
crawler 74 crawler_json 4
DEV INTEL Tools & Severity
🟠 High ⚙ Fix effort: Medium
⚡ Quick Fix
Test with NVDA (Windows free) or VoiceOver (Mac/iOS built-in) on your most critical user flows — you will find issues that automated tools miss every time
📦 Applies To
any HTML5 web
🔗 Prerequisites
🔍 Detection Hints
Images without alt text; form inputs without labels; modals without focus trapping; custom widgets without ARIA roles
Auto-detectable: ✓ Yes nvda voiceover jaws axe lighthouse
⚠ Related Problems
🤖 AI Agent
Confidence: High False Positives: Medium ✗ Manual fix Fix: Medium Context: File Tests: Update


✓ schema.org compliant