LEARNING OBJECTIVES ⌵
- Master the 7 core ARIA landmark roles:
banner,main,navigation,contentinfo,complementary,search, andregion. - Understand how screen readers use landmark navigation shortcuts (e.g.,
Dkey or rotor menus) to bypass repetitive content. - Map native HTML5 semantic container tags (
<header>,<main>,<nav>,<footer>,<aside>,<section>,<search>) to their implicit landmark roles. - Disambiguate multiple duplicate landmarks on the same page using
aria-labelandaria-labelledby.
📖 The Mental Model & Story (Intuitive Foundation)
Think of a modern city directory map in a shopping mall. When you look at the map, your eyes instantly distinguish major zones: the central food court, the north parking garage, the south department store, and the emergency exits. Sighted users do this effortlessly on web pages by scanning font sizes, sidebars, headers, and footers.
For a screen reader user, reading a web page without landmarks is like walking through that massive shopping mall blindfolded, forced to touch every single tile on the floor from the front entrance all the way to the food court on the third floor.
ARIA Landmark Roles create virtual express elevators. When a page has well-defined landmarks, screen reader users can press a single keyboard shortcut (D in NVDA/JAWS, or select "Landmarks" in the Apple VoiceOver Rotor) to instantly teleport directly to the Main Content, Primary Navigation, Sidebar, or Search Bar—completely skipping dozens of repetitive links and headers.
Technical Deep Dive & Specifications
The 7 Essential ARIA Landmark Roles
+-----------------------------------------------------------------------------+
| BANNER (header) |
| Logo / Site Branding [ SEARCH (search) ] User Profile |
+-----------------------------------------------------------------------------+
| NAVIGATION (nav aria-label="Primary") |
| Home Products Pricing Documentation Support Contact |
+------------------------------------+----------------------------------------+
| | |
| MAIN (main) | COMPLEMENTARY (aside) |
| | |
| <h1>Product Overview</h1> | <h3>Related Resources</h3> |
| <p>Core feature deep dive...</p> | <ul> |
| | <li>Quickstart Guide</li> |
| +------------------------------+ | <li>API Reference</li> |
| | REGION (section labeled) | | </ul> |
| | <h2>Interactive Demo</h2> | | |
| +------------------------------+ | |
+------------------------------------+----------------------------------------+
| CONTENTINFO (footer) |
| © 2026 Enterprise Corp Privacy Policy Terms of Service |
+-----------------------------------------------------------------------------+
Complete HTML5 Element to ARIA Landmark Matrix
| ARIA Landmark Role | Native HTML5 Tag | Scope / Context Requirement | Purpose / AT Announcement |
|---|---|---|---|
banner |
<header> |
Direct child of <body> (not nested inside <article>, <aside>, <main>, <nav>, or <section>). |
Prime site header containing logo and branding. |
main |
<main> |
Must be unique per page context (only one visible <main> per document). |
The central unique content of the page. |
navigation |
<nav> |
Anywhere. If multiple exist, each must be uniquely labeled. | Major collections of navigation links. |
contentinfo |
<footer> |
Direct child of <body> (not nested inside other landmark sections). |
Global site footer with copyright, legal, and privacy links. |
complementary |
<aside> |
Top-level or supporting section. | Secondary content tangentially related to the main content (e.g., related articles, ad sidebar). |
search |
<search> (HTML 2023) or <form role="search"> |
Anywhere containing search input controls. | Dedicated search interface for site or section. |
region |
<section aria-label="..."> |
Must have an accessible name via aria-label or aria-labelledby. |
High-importance generic section deemed worthy of fast-navigation. |
The Critical Disambiguation Rule: Multiple Landmark Labels
If a web page contains more than one landmark of the exact same role (e.g., three <nav> elements: Primary Header, Secondary Sidebar, and Footer Links), assistive technology will announce all three simply as "navigation".
To prevent user confusion, every duplicate landmark must have a distinct, concise accessible name:
<!-- Primary Site Navigation -->
<nav aria-label="Primary navigation">
<ul>...</ul>
</nav>
<!-- In-Page Breadcrumb Navigation -->
<nav aria-label="Breadcrumb">
<ol>...</ol>
</nav>
<!-- Footer Legal Navigation -->
<nav aria-label="Legal and policy">
<ul>...</ul>
</nav>
[!IMPORTANT] Do not include the word "navigation" in the
aria-label!
Screen readers automatically append the role name. If you writearia-label="Breadcrumb navigation", VoiceOver will announce: "Breadcrumb navigation, navigation". Instead, writearia-label="Breadcrumb".
The <section> Landmark Exception Rule
In the W3C HTML Accessibility API Mappings (HTML-AAM), the <section> element does NOT compute to a landmark role by default.
<section>WITHOUTaria-labeloraria-labelledby= Computed role isgeneric(no landmark created).<section>WITHaria-labeloraria-labelledby= Computed role isregion(elevated to a landmark).
<!-- Generic structural group: NOT a landmark -->
<section>
<p>Some grouped text...</p>
</section>
<!-- Elevated Landmark: Screen readers list this under Landmarks -->
<section aria-labelledby="pricingHeading">
<h2 id="pricingHeading">Tiered Enterprise Pricing</h2>
</section>
💻 Interactive Code Playground
Starter Code
Line-by-Line Code Breakdown
- Line 26 (
<header>): Acts as the top-levelbannerlandmark because it is a direct child of<body>. - Line 30 (
<search>): Modern HTML5 standard landmark for search interfaces (compiles torole="search"in modern browsers). - Line 39 (
<nav aria-label="Main">): Explicitly disambiguated so screen readers announce "Main, navigation". - Line 49 (
<main id="main-content">): Designates the primary page payload. Essential for skip-navigation links. - Line 54 (
<section aria-labelledby="liveMetrics">): Because it is explicitly labeled by the<h2>, the browser elevates this<section>to aregionlandmark. - Line 60 (
<aside aria-label="System Status...">): Represents thecomplementarylandmark. - Line 67 (
<footer>): Computes to thecontentinfolandmark because it lives at the root<body>level. - Line 70 (
<nav aria-label="Footer Legal">): A second navigation landmark, safely distinguished from the"Main"navigation above.
Expected Browser Render Output
+-----------------------------------------------------------------------------+
| CloudMetrics Enterprise [ Search docs... ] [ Search ] |
+-----------------------------------------------------------------------------+
| Dashboards Infrastructure Alerts Settings |
+-----------------------------------------------------------------------------+
| | |
| Infrastructure Cluster Health | Active Incidents |
| Real-time cluster telemetry... | All services operating |
| | normally. |
| Live Cluster Throughput | |
| Current ingress: 4.8 GB/s | |
+-----------------------------------------------------------------------------+
| © 2026 CloudMetrics Inc. | Privacy Policy • Terms of Service |
+-----------------------------------------------------------------------------+🏋️ Hands-On Exercise
🎯 The Challenge: Architect the Developer Portal Landmarks
You are tasked with reviewing an unorganized, non-semantic customer portal built with <div> containers. Sighted users can navigate it visually, but blind screen reader users report getting lost because no landmarks exist.
Instructions:
- Refactor the root containers into proper semantic landmark elements (
<header>,<nav>,<main>,<aside>,<footer>). - Add a dedicated
<search>landmark containing a labeled search field. - Disambiguate the header navigation and sidebar navigation using
aria-label. - Turn the "API Status" section into an accessible
regionlandmark labeled viaaria-labelledby.
🏁 Starter Code Sandbox
⚠️ Common Pitfalls
- Multiple Unlabeled
<nav>Elements: Placing 3 or 4<nav>tags on a page withoutaria-label. The screen reader user hears "navigation", "navigation", "navigation" with zero clue which one is header, sidebar, or footer. - Over-using
<section>Landmarks: Addingaria-labelto every single<section>on a long landing page. If a page has 30 landmarks, landmark navigation becomes as cluttered and useless as having none. Reserveregionfor 2–4 truly high-value functional sections. - Nesting Landmarks Incorrectly: Putting
<header>inside<main>and assuming it will compute tobanner. According to HTML-AAM specs,<header>inside<main>or<article>is not abannerlandmark; it is just a generic header container.
💡 Pro Tips
- The "Skip to Main Content" Bypass: Always pair your
<main id="main-content">landmark with a visual skip-link right at the top of<body>:
This allows keyboard-only (sighted) users who don't use screen reader landmark shortcuts to skip the 50-link navigation bar in one keystroke.<a href="#main-content" class="skip-link">Skip to main content</a> - Audit Landmarks with Browser Extensions: Use the Accessibility Insights for Web or axe DevTools browser extensions. They feature a "Landmarks" visualization tool that draws colored bounding boxes around all active landmarks on your page.
📌 Key Takeaways
- ARIA Landmarks (
banner,main,navigation,contentinfo,complementary,search,region) provide high-speed keyboard shortcuts for AT users. - Native HTML5 tags (
<header>,<main>,<nav>,<footer>,<aside>,<search>) implicitly create landmarks when used at the document root level. - When multiple landmarks of the same type exist, you must differentiate them using
aria-labeloraria-labelledby. - Do not include the role name inside
aria-label(use"Site", not"Site navigation"). <section>only becomes an ARIAregionlandmark if it possesses an accessible name.- --