Semantic HTML is the practice of using HTML elements according to their intended
meaning rather than their visual appearance. The most powerful accessibility tool
is already built into HTML — using the right element for the right job gives screen
readers, search engines, and browsers the context they need, with no ARIA required.
[1]
When a sighted user sees a large bold line of text at the top of a page, they
understand it is a heading. A screen reader user navigating by headings needs
the same signal — and that signal comes from the element, not the style. A div
styled to look like a heading communicates nothing. An h1 communicates everything.
[2]
The same principle applies across the entire element set. A button element is
keyboard focusable, activatable with Enter and Space, and announced as a button
by screen readers — for free. A div with an onclick handler is none of those
things without significant additional work.
Use landmark elements to define the structure of the page:
| Element | Role | Notes |
|---|---|---|
| header | banner | Site or article header |
| nav | navigation | Use aria-label when multiple exist |
| main | main | One per page |
| aside | complementary | Supplementary content |
| footer | contentinfo | Site or section footer |
| section | region | Only with an accessible name |
| article | article | Self-contained content |
Headings must form a logical outline. Start with a single h1 per page, then
use h2 through h6 to represent hierarchy — never skip levels for visual effect.
[2]
❌ Incorrect: h1 → h3 (skipped h2)
✅ Correct: h1 → h2 → h3
Always prefer native interactive elements over custom ones:
Native elements come with keyboard support, ARIA semantics, and browser
accessibility APIs built in. Custom elements built from divs and spans require
you to rebuild all of this manually — and most implementations get something wrong.
[3]
Use ul for unordered lists, ol for ordered lists, and dl for
definition lists. Screen readers announce the list type and item count, helping
users understand the structure before they navigate into it.
[1]
Last edited Apr 5, 2026, 11:45 AM · P**** J****