Skip to content

Missing skip links past repeated navigation

The skip link is hidden with display: none, and the content sits in a plain div, so nothing lets people jump past the menu.

01

The problem

Keyboard users must Tab through the whole menu on every page before they reach the content.

02

Try it

Press Tab until you reach the first product.

Count the stops before the content. On the fixed side, press Enter on the first stop.

Skip to content

Tab stops before the content: 0

Landmarks and headings a screen reader lists:

(none)

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Show the skip link on focus and point it at the main element, or mark up the page with landmarks and a heading.

  1. 1Content starts in a main element, so there is somewhere to jump to.
  2. 2A skip link is the first Tab stop, shown on focus, and moves focus to its target.
  3. 3Hide a skip link only visually, never with display: none.
Before A skip link nobody can reach

html

<a class="skip-link" href="#content">Skip to content</a><div class="header">  <a href="/">Fernway Garden</a>  <ul class="menu">…12 category links…</ul>  <input type="search" aria-label="Search">  <a href="/account">Account</a> <a href="/basket">Basket</a></div><div class="content">  <p class="title">Spring bulbs</p>  …</div>

css

.skip-link { display: none; }
After

A skip link shown on focus

html

<a class="skip-link" href="#main">Skip to main content</a><div class="header">…</div><main id="main" tabindex="-1">  <h1>Spring bulbs</h1>  …</main>

css

.skip-link {  position: absolute;  left: 8px;  top: 8px;  transform: translateY(-200%);}.skip-link:focus {  transform: none;}

04

Verify the fix

5 checks, no mouse.

Test with: Keyboard, Screen reader, Zoom

0 of 5 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the header or the layout changes.

Limits

This is a starting pattern, not a guarantee for every application. Pages with several repeated blocks, iframes or app shells may need more than one way past them. Test the complete journey on your real pages.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

Keep this fixed as your code changes.

Turn guides like this into rules your coding agents and CI follow, then have the result retested with a keyboard and screen readers.

How retests work