Screen readers have a shortcut to pull up a landmarks list — VoiceOver's rotor, NVDA's landmarks list, and so on. A page built entirely out of `<div>`s leaves that list empty, forcing a user to read from the very top just to find where the content starts. `<header>` (banner), `<nav>` (navigation), `<main>`, `<aside>` (complementary), and `<footer>` (contentinfo) each carry an implicit ARIA role, so using them populates that list automatically.
`<main>` should appear once per page, and if there's more than one `<nav>`, `aria-label` should tell them apart ('Primary' vs 'Footer'). Explicit ARIA roles like `role="main"` achieve the same thing, but native semantic tags are the first choice whenever they're available.
The demo shows the same layout two ways: an all-`<div>` page (empty landmarks list) and one built with semantic tags, where the list sweeps through banner → navigation → main → contentinfo in order.
When to use
Start every new page's layout skeleton with semantic tags — it's accessibility you get for free, independent of styling. If you have two or more nav elements, always give each an aria-label.