How to Add a Skip to Main Content Link
Your audit found no "skip to main content" link: a hidden-until-focused anchor that lets keyboard and screen-reader users jump straight past repeated header and navigation markup to the page's actual content. Without one, a keyboard-only visitor has to tab through the entire menu on every single page just to reach what they came for. It satisfies WCAG 2.1 success criterion 2.4.1 (Bypass Blocks) and is a genuinely quick, low-risk fix: one link, one target, a few lines of CSS.
What this means
A skip link is the very first focusable element on the page, usually reading "Skip to main content" or "Skip to content." It's visually hidden by default and becomes visible only when it receives keyboard focus, the first Tab press from the top of the page. Activating it moves focus directly into the main content area, typically a <main> landmark or an anchor placed right at its start.
The audit checks whether the first item in your page's focus order is a link to an in-page target (#main, #content, #main-content, or similar) positioned before the primary navigation. Finding none is what triggers this notice. It's independent of whether you already have proper landmarks: you can have clean, semantic <main> and <nav> elements and still lack the one shortcut that lets a keyboard user actually skip past the nav to reach them.
This is a notice, the lowest severity tier the audit uses. Nothing is broken for a mouse or touch-screen visitor, and most sighted users will never know a skip link exists, which is intentional; it's built to be invisible until it's useful. It doesn't fail catastrophically or block anyone from eventually reaching the content. It's a well-defined, narrow gap that affects one specific group: people navigating by keyboard alone or with a screen reader.
If it's missing, the likely reason is unremarkable: most starter themes and page builders simply don't scaffold one by default, so it has to be added on purpose, whether by the theme, a plugin, or a few lines you write yourself.
Why it matters
For someone tabbing through a page instead of clicking, a skip link is the difference between one keystroke and dozens. A site with a header, utility bar, and a mega menu can easily put 20 to 50 focusable links before the main content starts. Without a skip link, a keyboard or screen-reader user re-tabs through all of them, on every page, every visit. That's not a minor inconvenience; it's friction that compounds across an entire session, and it's worse on exactly the sites with the heaviest navigation: ecommerce and publishers.
This maps directly to WCAG 2.1 Success Criterion 2.4.1, Bypass Blocks, a Level A requirement, meaning it sits in the baseline tier that most accessibility conformance statements and standards reference, including EN 301 549 in the EU and the technical guidelines commonly cited in ADA-related demand letters in the US. It's one of the most frequently checked items in an accessibility audit for a simple reason: it's easy to verify by tabbing once to see what appears, and cheap to fix, so leaving it out is a needless, low-effort-to-close gap.
Being honest about what this isn't: a skip link is not a Google ranking factor, and framing it as an SEO win would be a stretch. Its value is entirely about usability for keyboard and assistive-technology users and about closing a well-known, easily-checked accessibility gap. It's also fair to say it has essentially no bearing on AI answer engines; crawlers like GPTBot or PerplexityBot parse your DOM and text directly rather than tabbing through focus order, so this fix is for people, not for how machines read your page.
How to fix it
- 1
Add the link as the very first focusable element
Place an anchor as the first item inside
<body>, before the header and navigation:<a class="skip-link" href="#main-content">Skip to main content</a>. It has to come before the nav in DOM order, since the whole point is that it's the first stop when someone tabs from the top of the page. - 2
Give your main content a matching id and landmark
The target should be your
<main>element or a wrapper right at the start of the primary content:<main id="main-content" tabindex="-1">. Add a<main>landmark now if you don't have one yet. Thetabindex="-1"matters more than it looks: some browsers won't reliably move keyboard focus to a non-focusable target when the link is activated, and without it the link can scroll the page without actually moving focus. - 3
Hide it visually, but keep it in the focus order
Use the standard visually-hidden pattern (absolute positioning, clipped to 1px) rather than
display:noneorvisibility:hidden, either of which removes the link from the tab order entirely and defeats the purpose. Then add a:focusstyle that undoes the hiding, bringing it on-screen with a visible background and outline, so a keyboard user can actually see it appear when they land on it. - 4
Test it by tabbing, not by clicking
Load the page, click the address bar to reset focus to the top, then press Tab once. The skip link should appear on screen, usually top-left. Press Enter and confirm focus visibly lands inside the main content, not just that the page scrolls, so the very next Tab moves to the first control inside the content instead of back into the header.
- 5
Roll it out across every template
Since the header is usually one shared template, a single fix typically covers the whole site; check any page type that uses a different layout, landing pages or a checkout flow are common exceptions. If a page genuinely has more than one long block worth bypassing, such as a nav plus a lengthy filter sidebar, a short list of skip links to different targets is fine, but one link to main content is the minimum every page needs.
Example
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
<header>
<nav><!-- primary navigation --></nav>
</header>
<main id="main-content" tabindex="-1">
<!-- page content starts here -->
</main>
</body>
<style>
.skip-link {
position: absolute;
top: -40px;
left: 0;
background: #000;
color: #fff;
padding: 8px 16px;
z-index: 100;
transition: top 0.2s ease-in-out;
}
.skip-link:focus {
top: 0;
}
</style>A skip link that's off-screen by default and slides into view on keyboard focus, targeting a focusable main landmark.
Platform-specific steps
Themes tagged "accessibility-ready" in the WordPress theme directory, including recent default themes, generally already include a skip link; confirm by tabbing on your live site rather than assuming your theme has one. If it doesn't, add it via a child theme's header.php or a small must-use plugin that outputs the link markup and hooks in the accompanying CSS.
Dawn and most current Shopify themes render a built-in skip link, often labeled "Skip to content," near the top of theme.liquid. If your theme is older or heavily customized, check whether that markup survived the customization, and add it back in Edit Code if it's missing.
Current templates on both platforms generally include a skip mechanism as part of their built-in accessibility features (Wix's Accessibility Wizard, Squarespace's landmark handling). Verify by tabbing rather than assuming, since older templates or a heavy custom-code section can override or bury the default.
Add the anchor once at the top of your root layout (app/layout.tsx, _document.tsx, or an equivalent shared shell) so it applies to every route without being repeated per page.
Frequently asked
No, not unless they navigate by keyboard. It's hidden by design until it receives focus, so mouse and touch users never see it and it has no visual impact on your design.
It maps to WCAG 2.1 Success Criterion 2.4.1 (Bypass Blocks), a Level A requirement referenced by many accessibility standards and regulations, including EN 301 549 in the EU. Whether it's legally mandated for your specific site depends on your jurisdiction and situation, so treat this as a widely-expected baseline rather than formal legal advice.
No, not directly; it isn't a Google ranking factor. The value is real but it's about usability for keyboard and screen-reader users and closing a well-known accessibility gap, not search visibility.
One link to main content is the baseline every page needs. Add additional skip links only if a page has more than one substantial block worth bypassing, like a long primary nav plus an extensive filter sidebar. Beyond that, more links just add clutter to the very first tab stops.
Does your site have this issue?
Run a free, AI-powered audit and we’ll flag this and 150+ other checks in about a minute. No signup.