Skip to content
easeweb
Search topics

Menu-only sites with no search or site map

A shop's only way to its products is a menu of categories, so anyone who can't guess which category holds an item has nowhere else to look.

WCAG 2.2
SC 2.4.5AA
Required by
Section 508 · EN 301 549 (EU)
Broken
The accessibility problem illustrated: Cognitive:Which one has the napkins?
01

The problem

People who can't guess which menu category holds what they want have no other way to find it.

02

Try it

Find the shop’s linen napkins.

On the broken side, the menu under Shop is the only way in. Apply a fix to add a search box, a site map in the footer, or links from one product to the next, and find the napkins again. The panel under the window lists the ways in, and the one you used.

Broken Can you fix this?

Ways to find a page: the menu

Only one way to most products: the menu

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Add a second way to every page besides the menu: a site search, a site map, or links between related pages.

  1. 1Every page can be reached in at least two ways.
  2. 2A search or a site map, if there is one, is on every page, in the same place.
  3. 3Steps in a process, such as checkout, are the only exception.
Before A menu and nothing else
<header class="site-header">  <a href="/" class="logo">Fernhill</a>  <nav aria-label="Main">    <ul>      <li>        <button type="button" aria-expanded="false"          aria-controls="menu-shop">Shop</button>        <ul id="menu-shop" hidden>          <li><a href="/shop/kitchen">Kitchen</a></li>          <li><a href="/shop/table">Table</a></li>          <li><a href="/shop/bath">Bath</a></li>          <li><a href="/shop/bedroom">Bedroom</a></li>        </ul>      </li>      <li><a href="/sale">Sale</a></li>      <li><a href="/journal">Journal</a></li>      <li><a href="/about">About</a></li>    </ul>  </nav>  <a href="/basket">Basket</a></header>…<footer>  <a href="/delivery">Delivery</a>  <a href="/returns">Returns</a>  <a href="/contact">Contact us</a></footer>
After

A site search in the header

<header class="site-header">  <a href="/" class="logo">Fernhill</a>  <nav aria-label="Main">    …  </nav>  <search class="site-search">    <form action="/search" method="get">      <label for="site-search">Search the shop</label>      <input id="site-search" name="q" type="search">      <button type="submit">Search</button>    </form>  </search>  <a href="/basket">Basket</a></header>

Fixing this with an AI coding assistant? Get this guide as Markdown, or get every guide in your coding agent.

04

Verify the fix

4 checks, no mouse.

Test with: Keyboard, Screen reader

0 of 4 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after any change to the menu, the search index or the site's sections.

Limits

This is a starting pattern, not a guarantee for every site. 2.4.5 asks for more than one way, not for good ones: a search that finds nothing useful technically passes, and still fails the people it is for. Steps in a process, such as checkout, are exempt, so don't put a search into the payment step to satisfy it. Test the whole site with the people who will use it, especially people who find menus hard.

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