Context & History of ARIA Landmark Roles
ARIA (Accessible Rich Internet Applications) was introduced by the W3C to bridge the gap between modern web applications and assistive technologies. Landmark roles, a core part of the ARIA specification, provide named regions such as banner, navigation, main, and search. These landmarks enable screen reader users to jump directly to important sections of a page, improving navigation speed and overall user experience. Early browsers lacked native support for many dynamic components, prompting developers to rely on ARIA to convey meaning where native HTML fell short.
Implementation & Best Practices
Before diving into each landmark, follow this roadmap: first, audit your page structure using the browser’s accessibility inspector second, replace generic div containers with semantic HTML elements whenever possible third, add explicit role attributes only when no native element provides the needed semantics finally, label each landmark with aria-label or aria-labelledby to give screen readers a clear name.
Banner Landmark
The banner landmark identifies the site header. Use the native <header> element, which implicitly carries this role. If you must use another element, add role="banner" explicitly.
<header>
<a class="logo" href="/">
<span class="visually-hidden">Mr. Pineapple's Pizzeria</span>
</a>
</header>
Key takeaway: Prefer <header> over a generic div to get an implicit banner role.
Navigation Landmark
The navigation landmark groups site links. The <nav> element already has this role, but when multiple navigation blocks exist, differentiate them with aria-label or aria-labelledby.
<nav aria-label="Primary">
<ul>
<li><a aria-current="page" href="/">Home</a></li>
<li><a href="/menu">Our pizzas</a></li>
<li><a href="/contact">Get in touch</a></li>
</ul>
</nav>
Key takeaway: Use aria-label to give each navigation landmark a unique, descriptive name.
Search Landmark
There is no native element with a built‑in search role, so assign role="search" to a <form> that contains the search field.
<form role="search" action="/search" method="get">
<label for="query">Find your perfect pizza</label>
<input type="search" id="query" name="query" />
</form>
Key takeaway: Explicitly set role="search" on the form to expose a searchable region to assistive tech.
Main Landmark
The main landmark should appear only once per page and contain the primary content. Use the native <main> element.
<main>
...
</main>
Key takeaway: A single <main> element improves focus navigation for screen readers.
Region Landmark
Sections of content that are not covered by other landmarks can be marked as a region. Pair a <section> with aria-labelledby (or aria-label) to give it a name.
<section aria-labelledby="pizzas-heading">
<h2 id="pizzas-heading">Our pizzas</h2>
<ul>
<li>Margherita with pineapple</li>
<li>Veggie with pineapple</li>
<li>Meaty with pineapple</li>
</ul>
</section>
Key takeaway: Naming regions with aria-labelledby helps users understand the purpose of each content block.
For deeper performance insights that complement accessibility work, see our guide on accelerating JavaScript development with Bun. Additionally, learning how the Page Visibility API can be used to manage resources will further enhance the experience for all users.