Skip navigation links solve one of the most common frustrations faced by keyboard-only users and screen reader users: having to tab through dozens — sometimes hundreds — of repetitive navigation links on every single page before reaching the actual content. Without a mechanism to bypass these repeated blocks, users who cannot use a mouse are forced to press the Tab key repeatedly just to get past headers, navigation bars, and sidebars that appear identically on every page of a site.
This technique is explicitly referenced in WCAG 2.1 under Success Criterion 2.4.1 (Bypass Blocks), which requires that a mechanism be available to bypass blocks of content repeated across multiple pages. A skip navigation link is the most straightforward and widely recommended way to satisfy this criterion at the Level A conformance level — the minimum standard for web accessibility.
Why skip navigation links matter
Sighted mouse users can visually scan a page and click wherever they want. Keyboard users don’t have that luxury. They navigate sequentially through focusable elements using the Tab key. On a typical website with a global header containing a logo, search bar, main navigation with dropdowns, and utility links, a keyboard user might need to press Tab 30 to 50 times before reaching the first interactive element in the main content area. Multiply that by every page visit, and the experience becomes exhausting and exclusionary.
Screen reader users face a similar challenge. While modern screen readers offer heading navigation and landmark shortcuts, not all users are proficient with these advanced features, and not all websites use proper semantic landmarks. A skip link provides a reliable, universal escape hatch.
Without skip navigation links:
- Keyboard users waste significant time and effort on every page load.
- Screen reader users hear the same navigation content announced repeatedly.
- Users with motor impairments who rely on switch devices or sip-and-puff controllers face physical strain from excessive interactions.
- The site fails WCAG 2.1 Level A Success Criterion 2.4.1, which can have legal and compliance implications.
How skip navigation links work
Basic mechanism
A skip navigation link is simply an <a> element placed as the first focusable item in the page’s <body>. It points to an id on the main content container. When a keyboard user presses Tab upon loading a page, this link receives focus first. Pressing Enter activates it and moves focus to the target element, skipping everything in between.
Visibility approaches
There are two common visibility strategies:
-
Visible on focus only — The link is visually hidden by default using CSS and becomes visible when it receives keyboard focus. This is the most popular approach because it keeps the visual design clean for mouse users while remaining fully accessible.
-
Always visible — The link is permanently visible at the top of the page. Some organizations choose this approach for maximum transparency.
The “visible on focus” pattern uses CSS to position the link off-screen, then bring it back on-screen when the :focus or :focus-visible pseudo-class is active.
Multiple skip links
On complex pages, you may offer multiple skip links — for example, “Skip to main content,” “Skip to search,” or “Skip to footer.” These should be grouped in a list or a small navigation region and remain concise to avoid creating a new barrier.
Focus target considerations
The target element should either be natively focusable or have tabindex="-1" added so that focus can be programmatically moved to it. Using a <main> element with tabindex="-1" is a robust approach. Without tabindex="-1" on a non-interactive target, some browsers will scroll to the element but not move keyboard focus, causing the next Tab press to jump back to the top of the page.
Code examples
Bad example — no skip link
<body>
<header>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
<li><a href="/services">Services</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>
</header>
<main id="main-content">
<h1>Welcome to Our Site</h1>
<p>Main page content starts here.</p>
</main>
</body>
In this example, a keyboard user must tab through every navigation link before reaching the main content. There is no bypass mechanism.
Bad example — skip link with broken focus management
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
<header>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
</header>
<div id="main-content">
<h1>Welcome</h1>
</div>
</body>
Here the target is a <div>, which is not natively focusable. Without tabindex="-1", some browsers will not move focus to it, so pressing Tab after activating the skip link may send focus back to the top of the page.
Good example — skip link with proper styling and focus management
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
<header>
<nav aria-label="Main navigation">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
<li><a href="/services">Services</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>
</header>
<main id="main-content" tabindex="-1">
<h1>Welcome to Our Site</h1>
<p>Main page content starts here.</p>
</main>
</body>
.skip-link {
position: absolute;
top: -100%;
left: 0;
padding: 0.75rem 1.5rem;
background: #000;
color: #fff;
font-size: 1rem;
z-index: 1000;
text-decoration: none;
}
.skip-link:focus {
top: 0;
outline: 3px solid #ffdd00;
outline-offset: 2px;
}
In this good example:
-
The skip link is the first focusable element in the
<body>. - It is visually hidden off-screen by default but slides into view when focused via keyboard.
-
The
<main>element hastabindex="-1", ensuring browsers properly move focus to it. -
A high-contrast focus indicator is provided via
outline, satisfying focus visibility guidelines. -
The
aria-labelon<nav>provides additional context for screen reader users navigating by landmarks.
This pattern is lightweight, requires no JavaScript, and reliably satisfies WCAG 2.4.1 across all major browsers and assistive technologies.
Related terms
Help us improve this glossary term
Scan your site
Rocket Validator scans thousands of pages in seconds, detecting accessibility and HTML issues across your entire site.