The region rule flags visible content that is not inside any landmark – outside header, nav, main, footer or another page region. The fix is almost always a clean page skeleton in the template: one missing <main> or one misplaced element can produce hundreds of findings at once.
What the rule means
Landmarks divide a page into named regions. HTML provides them: <header> (banner), <nav>, <main>, <aside>, <footer> (content info), plus <section> and <form> once they have an accessible name. The rule expects every piece of visible content to sit in one of them.
Not reported: skip links, content inside iframes (axe tests those separately), buttons, dialogs (<dialog>, role="dialog"/"alertdialog") and live regions such as role="status" or aria-live="polite".
Note: this is a best practice, not a WCAG failure in itself. It supports two criteria – 1.3.1 Info and Relationships, because the structure becomes machine-readable, and 2.4.1 Bypass Blocks, because landmarks are one way to skip repeated content.
Who is affected
Mainly blind people using a screen reader, who jump from region to region – with D in NVDA or via the rotor in VoiceOver. Anything outside a landmark is skipped and easily missed. People using landmark-navigation browser extensions or voice control also benefit from clear regions.
Why the check fails
- No
<main>: the main content sits in<div id="content">. - Elements next to the header: a service menu, language switcher or social links placed directly in
<body>. - A copyright line or badges below the
<footer>. - Cookie banners or chat widgets appended to the end of
<body>by a third-party script, without a dialog role. - Page builders that output sections as bare
<div>s.
How to fix it
Build the skeleton in the page template, not page by page – that clears the findings everywhere at once.
<!-- Before: service links, content and copyright outside landmarks -->
<body>
<div class="logo">Example Ltd</div>
<p class="service-nav"><a href="/help/">Help</a></p>
<div id="content"><h1>Our products</h1></div>
<div class="copyright">© 2026 Example Ltd</div>
</body>
<!-- After: all content inside landmarks -->
<body>
<a class="skip-link" href="#content">Skip to content</a>
<header>
<div class="logo">Example Ltd</div>
<nav aria-label="Service"><a href="/help/">Help</a></nav>
</header>
<main id="content"><h1>Our products</h1></main>
<footer><p>© 2026 Example Ltd</p></footer>
</body>
Three rules of thumb:
- Exactly one
<main>per page. - Name multiple navigations (
aria-label="Main menu","Service") so they can be told apart. - Don't overdo it: not every section needs a landmark; too many regions clutter the screen reader's list.
For third-party banners: have them implemented as a real dialog (<dialog> or role="dialog" with a name) or placed inside a landmark.
How to test it manually
- In NVDA, press Insert + F7 and choose "Landmarks"; in VoiceOver, open the rotor with VO + U. A landmark-navigation browser extension also works.
- Check: is there exactly one main region? Are similar regions named differently?
- Walk through the visible page: does every piece of content clearly belong to a region?
- The rule only checks whether content is inside landmarks, not whether it is in the right one. Navigation inside the footer landmark passes the rule but still confuses people.
Related WCAG criterion
None directly – region is a best practice. It relates to 1.3.1 Info and Relationships and 2.4.1 Bypass Blocks; for 2.4.1 a working skip link is usually sufficient too.
How Reviseberg reports it
Reviseberg runs region on every crawled page. Because each element outside a landmark counts separately, you often see hundreds of occurrences on nearly every page – typically caused by a single template. The issue list shows the rule as a best practice with its severity, the number of elements and pages, and the points a fix gets you back; it never counts towards a WCAG criterion or appears in a compliance report. The detail view shows the selector and HTML snippet of each occurrence and every affected page. You can mark a finding as "ignore" or "false positive" with a reason, for example for a widget you cannot change.