Skip to main content
Accessibility

Skip Navigation Link

  • navigation
  • keyboard
  • WCAG 2.4.1
  • usability
  • assistive-technology

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:

  1. 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.

  2. 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 has tabindex="-1", ensuring browsers properly move focus to it.
  • A high-contrast focus indicator is provided via outline, satisfying focus visibility guidelines.
  • The aria-label on <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.

Help us improve this glossary term

Was this guide helpful?

Scan your site

Rocket Validator scans thousands of pages in seconds, detecting accessibility and HTML issues across your entire site.

🌍 Trusted by teams worldwide

Validate at scale.
Ship accessible websites, faster.

Automated HTML & accessibility validation for large sites. Check thousands of pages against WCAG guidelines and W3C standards in minutes, not days.

Scheduled Reports
API Access
Open Source Standards
$7 / 7 days

Pro Trial

Full Pro access. Cancel anytime.

Start Pro Trial →

Join teams across 40+ countries