Landmark one main
Quick winFound on 21% of audited stores.
Add a single `<main>` landmark element (or `role="main"`) to every page so that screen-reader users and assistive technologies can skip directly to the primary content.
What it is
Every web page should have one clearly marked "main content" region — the part of the page that is unique to that page, as opposed to the header, navigation, and footer that repeat everywhere. In HTML this is done with the `<main>` element (or by adding `role="main"` to a wrapper `<div>`). This marker is called a **landmark**. Screen readers and keyboard-only users rely on landmarks to jump around the page without having to tab through every single link and menu item first. The `landmark-one-main` rule fails when a page has zero `<main>` elements, or when it has more than one.
Why it matters
Without a main landmark, visually impaired shoppers using a screen reader (NVDA, JAWS, VoiceOver) cannot use the "skip to main content" shortcut — they are forced to listen to every navigation link on every page before reaching your products or checkout. This is a WCAG 2.1 Level A failure (Success Criterion 1.3.6 / ARIA Landmark Regions), meaning it carries legal accessibility risk in jurisdictions with web-accessibility laws (ADA, EN 301 549, EAA). Beyond compliance, a poor experience for assistive-technology users directly hurts conversions and brand trust. Fixing it is typically a one-line HTML change.
How to fix it
- Audit your page template/theme files to find the outermost wrapper `<div>` (or equivalent) that contains only the unique page content — not the header, navigation bar, or footer.
- Replace that wrapper's opening tag with `<main>` (and its closing tag with `</main>`), OR add `role="main"` and `id="main-content"` to the existing `<div>` if changing the tag would break your layout.
- Ensure there is exactly ONE `<main>` / `role="main"` element per page — remove or convert any duplicates.
- Add a visible or visually-hidden 'Skip to main content' anchor link at the very top of `<body>` pointing to `#main-content` so keyboard users can bypass repeated navigation (e.g., `<a href="#main-content" class="skip-link">Skip to main content</a>`).
- Save and publish, then re-test using a browser accessibility checker (axe DevTools browser extension or Chrome Lighthouse > Accessibility) to confirm the `landmark-one-main` rule now passes.
- Verify with a screen reader (VoiceOver on Mac/iOS, NVDA on Windows) that pressing the 'Regions' shortcut (e.g., R in NVDA browse mode) navigates directly to the main content area.
<main id="main-content" role="main">
<!-- All unique page content goes here -->
</main>
<!-- Skip link (add just after <body> opens): -->
<a href="#main-content" class="skip-link">Skip to main content</a>
<style>
.skip-link {
position: absolute;
left: -9999px;
top: auto;
width: 1px;
height: 1px;
overflow: hidden;
}
.skip-link:focus {
position: static;
width: auto;
height: auto;
}
</style>Fix it on your platform
Pick your platform for the exact steps.
How to fix landmark one main on Shopify
- Go to Online Store → Themes → Actions → Edit code.
- Open 'Layout' → `theme.liquid` (this is the master template wrapping every page).
- Locate the opening `<div>` (often `<div id="MainContent">` or similar) that wraps the `{{ content_for_layout }}` tag — this holds the unique page content.
- Change it to `<main id="main-content" role="main">` … `</main>`. If the `<div>` has important CSS classes, keep them: `<main id="main-content" role="main" class="your-existing-classes">`.
- Also add a skip link as the very first child of `<body>`: `<a class="skip-to-main visually-hidden" href="#main-content">Skip to main content</a>` and add CSS to make it visible on focus.
- Click Save, then test with the axe browser extension on any storefront page.
How to fix landmark one main on WooCommerce
- In WordPress Admin go to Appearance → Theme File Editor (or use a local FTP/SSH client). If your theme is a block theme, use Appearance → Editor instead.
- Open `header.php` (classic theme) — find the closing `</header>` tag and add `<main id="main-content" role="main">` immediately after it.
- Open `footer.php` — add the corresponding `</main>` tag immediately before the opening `<footer>` tag.
- Check `page.php`, `single.php`, `archive.php`, and `woocommerce/` templates to ensure none of them wrap content in a second `<main>` tag (some themes already include one — remove the duplicate).
- Add the skip link in `header.php` just after `<body <?php body_class(); ?>>`: `<a class="skip-link screen-reader-text" href="#main-content">Skip to main content</a>`.
- Save, then run Lighthouse Accessibility audit in Chrome DevTools to verify the fix.
How to fix landmark one main on BigCommerce
- Go to Storefront → Themes → Advanced → Edit Theme Files (Stencil CLI is preferred for version control).
- Open `templates/layout/base.html` — this is the master layout.
- Find the main content wrapper (usually `<div id="main-content">` or a `{{{snippet.page_wrapper}}}`); change it to `<main id="main-content" role="main">` … `</main>`.
- Add a skip link immediately after the opening `<body>` tag: `<a href="#main-content" class="skip-nav">Skip to main content</a>`.
- Push changes via Stencil CLI (`stencil push`) or save in the theme editor, then validate with the axe DevTools Chrome extension on your live storefront.
How to fix landmark one main on Wix
- Wix generates HTML automatically; you cannot edit raw HTML directly in Wix Classic Editor.
- In the Wix Editor, ensure your page structure uses a dedicated 'Page Content' section below the Header and above the Footer — Wix maps this to a `<main>` landmark in modern Wix rendering.
- Go to Settings (gear icon) → Accessibility and enable 'Skip to Content' — this adds a skip link and helps Wix correctly identify the main region.
- If you use Wix Studio, open the page, click on the main section, open the Inspector panel, and set the HTML tag to `<main>` under 'Advanced' → 'Semantic HTML Tag'.
- Re-publish the site and test with the axe browser extension.
How to fix landmark one main on Wix Studio
- Open the page in Wix Studio Editor.
- Click the primary content section (the body area between Header and Footer) to select it.
- In the right-hand Inspector panel, scroll to 'Advanced' → 'Semantic HTML Tag' and select `<main>` from the dropdown.
- Optionally set the element's ID to `main-content` for the skip link target.
- Ensure no other section on the page is also tagged as `<main>`.
- Publish and verify with the axe DevTools browser extension.
How to fix landmark one main on Squarespace
- Squarespace 7.1 templates already wrap page content in a `<main>` element in most themes — verify by running axe DevTools on your live site first.
- If the landmark is missing, go to Pages → select the page → click the gear icon → Advanced → and in the 'Page Header Code Injection' or 'Code Injection' (Settings → Advanced → Code Injection) add a `<style>` note that Squarespace does not allow direct HTML template editing.
- As a workaround, use a Code Block (Insert Point → +) at the very top of page content and insert `<a href="#main-content" class="skip-link" style="position:absolute;left:-9999px;">Skip to main content</a>` plus `<span id="main-content"></span>`.
- For deeper template changes, switch to Developer Mode (Settings → Advanced → Developer Mode) and edit `base.region` or the relevant `.region` file to wrap content in `<main id="main-content">`.
- Re-publish and re-test with axe DevTools.
How to fix landmark one main on Webflow
- Open your project in the Webflow Designer.
- In the Navigator panel, find the top-level `<div>` or `<Section>` that contains your page-unique content (below the Navbar component, above the Footer component).
- Click the element, then in the right-hand Settings panel (the gear icon) change the HTML Tag from `div` to `main`.
- Set the element ID to `main-content` (Settings panel → ID field) so a skip link can target it.
- Add a Text Link element as the very first child of `<body>` (before the Navbar): set its URL to `#main-content`, give it a class `skip-link`, and use Webflow's visibility settings (display: none / show on focus) to style it as a visually-hidden skip link.
- Publish and confirm with the axe browser extension.
How to fix landmark one main on Adobe Commerce (Magento)
- In your custom or child theme, locate `Magento_Theme/templates/root.phtml` (Magento 2) or `app/design/frontend/<Vendor>/<theme>/Magento_Theme/templates/root.phtml`.
- Find the main content wrapper — typically `<div id="maincontent" class="page-main">` — and change it to `<main id="main-content" role="main" class="page-main">` (keep existing classes for CSS compatibility).
- Also update the matching closing tag to `</main>`.
- In the same file, add a skip link just after `<body>`: `<a class="action skip" href="#main-content"><span>Skip to main content</span></a>` (Magento's blank theme includes CSS for `.action.skip` to be visually hidden until focused).
- Run `bin/magento cache:clean` and `bin/magento setup:static-content:deploy`, then verify with the axe extension.
How to fix landmark one main on Magento Open Source
- Follow the same steps as Adobe Commerce (Magento) above — the template path and process are identical for Magento Open Source 2.x.
- If you are on Magento 1.x, edit `app/design/frontend/<package>/<theme>/template/page/html/wrapper.phtml` and wrap the main content `<div>` with `<main role="main" id="main-content">` … `</main>`.
- Clear the Magento cache after saving.
How to fix landmark one main on PrestaShop
- In your theme folder (typically `themes/<your-theme>/`), open `templates/layouts/layout-full-width.tpl` (and any other layout `.tpl` files you use).
- Find the content wrapper — often `<div id="main">` — and change it to `<main id="main-content" role="main">`.
- Update the closing tag accordingly.
- Add a skip link in `templates/_partials/header.tpl` just after the `<body>` tag: `<a class="sr-only sr-only-focusable" href="#main-content">Skip to main content</a>`.
- Clear the PrestaShop cache (Advanced Parameters → Performance → Clear cache) and re-test.
How to fix landmark one main on OpenCart
- Open your theme's main layout file, typically `catalog/view/theme/<your-theme>/template/common/header.tpl` (OpenCart 2.x) or `header.twig` (OpenCart 3.x+).
- At the bottom of the header template (just before the main content inclusion), add `<main id="main-content" role="main">`.
- Open `catalog/view/theme/<your-theme>/template/common/footer.tpl` (or `.twig`) and add the closing `</main>` tag near the top, before the `<footer>` tag.
- Add a skip link as the first element after `<body>` in the header template.
- Refresh the OpenCart cache and verify with axe DevTools.
Does your site have this issue?
Run a free SEOLZ audit to find landmark one main — and every other issue — across your whole site in minutes.
Scan my site freeFrequently asked questions
What is Landmark one main?
Every web page should have one clearly marked "main content" region — the part of the page that is unique to that page, as opposed to the header, navigation, and footer that repeat everywhere. In HTML this is done with the `<main>` element (or by adding `role="main"` to a wrapper `<div>`). This marker is called a **landmark**. Screen readers and keyboard-only users rely on landmarks to jump around the page without having to tab through every single link and menu item first. The `landmark-one-main` rule fails when a page has zero `<main>` elements, or when it has more than one.
Why does landmark one main matter?
Without a main landmark, visually impaired shoppers using a screen reader (NVDA, JAWS, VoiceOver) cannot use the "skip to main content" shortcut — they are forced to listen to every navigation link on every page before reaching your products or checkout. This is a WCAG 2.1 Level A failure (Success Criterion 1.3.6 / ARIA Landmark Regions), meaning it carries legal accessibility risk in jurisdictions with web-accessibility laws (ADA, EN 301 549, EAA). Beyond compliance, a poor experience for assistive-technology users directly hurts conversions and brand trust. Fixing it is typically a one-line HTML change.
How do I fix landmark one main?
Add a single `<main>` landmark element (or `role="main"`) to every page so that screen-reader users and assistive technologies can skip directly to the primary content.
Authoritative references
- How to fix this specific rule — Deque/axe (rule reference)
- WCAG 2 overview — W3C WAI
- ARIA basics — MDN