Finding your way around a site is its own task, separate from reading any single
page. People do it differently: some scan a menu, some jump straight to a search box,
some recognise a familiar link in the same corner of every page. Accessibility here is
less about a single widget and more about the shape of the whole site — whether there
is more than one route to a page, whether the routes stay put, and whether the same
thing is named the same way wherever it appears.
When those expectations break, the cost lands hardest on people who rely on memory,
orientation, or assistive technology: a screen reader user who has learned the link
order, a person with a cognitive disability who recognises “Search” but not a bare
magnifier icon, a keyboard user counting tab stops. This lesson covers three
site-level defects and the WCAG success criteria that address each one.
What you’ll learn
Why a set of pages needs more than one way to reach each page —
such as a search and a sitemap alongside the menu (2.4.5); why repeated navigation
must appear in the same relative order on every page it occurs (3.2.3);
and why a component with the same function must carry a consistent label and
name everywhere it is used (3.2.4). These are AA criteria, and the fixes are
about structure and discipline, not extra ARIA.
Standards this lesson maps to
Standard
Criterion
Level
What it requires
WCAG 2.2
2.4.5 Multiple Ways
AA
More than one way is available to locate a page within a set of pages, except where the page is a step in a process.
WCAG 2.2
3.2.3 Consistent Navigation
AA
Navigational mechanisms repeated across pages appear in the same relative order each time, unless the user changes it.
WCAG 2.2
3.2.4 Consistent Identification
AA
Components with the same functionality across a set of pages are identified consistently (same name and label).
WCAG 2.2
2.4.6 Headings and Labels
AA
Headings and labels describe their topic or purpose, which supports finding and recognising controls.
EN 301 549
9.2.4.5 / 9.3.2.3 / 9.3.2.4 (incorporates WCAG)
—
European harmonised standard; references the WCAG A/AA set including these navigation criteria.
Section 508
502.3 / 504 (incorporates WCAG A & AA)
—
US federal ICT must meet WCAG 2.0 Level A and AA, including Multiple Ways and consistency.
ADA Title II
WCAG 2.1 AA (DOJ rule)
AA
US state/local government web content must conform to WCAG 2.1 AA.
The three problems we’ll fix
Each card below isolates one common site-level defect. For every issue you get a
plain-language statement of the problem, a Bad example (shown as
escaped, non-running code so it can’t harm this page), a Good
example, the copyable Code, and an ordered fix.
Only deep menus — no search or sitemap
WCAG 2.2 · 2.4.5AAEN 301 549Section 508ADA Title II
When the only route to a page is a multi-level
dropdown menu, anyone who can’t hold the whole hierarchy in mind, or can’t operate
a hover-revealed flyout, is stuck. Multiple Ways asks for at least two independent
ways to locate a page within the set — so the menu can stay, but it must be backed
by something like a site search, a sitemap, an A–Z index, or a clear set of
in-page links. The two ways must be genuinely different mechanisms; two menus that
lead to the same place don’t count. The one exception is a page that is a step
inside a process (a checkout step, a wizard), where extra routes could let people
skip required steps.
Bad
The deep menu is the sole way in. There is no search and no sitemap, so a
page buried three levels down has exactly one path to it (2.4.5).
bad-single-route.html
<nav aria-label="Primary">
<ul>
<li>Products
<ul><li>Hardware
<ul><li><a href="/products/hw/sensors">Sensors</a></li></ul>
</li></ul>
</li>
</ul>
</nav>
<!-- No search, no sitemap, no index: one route only -->
Good
The same menu is kept, but a site search and a link to a full sitemap give
two more independent ways to reach any page.
good-multiple-ways.html
<form role="search" action="/search">
<label for="site-search">Search the site</label>
<input type="search" id="site-search" name="q">
<button type="submit">Search</button>
</form>
<a href="/sitemap">Sitemap</a>
<!-- Menu (above) + search + sitemap = three ways in -->
Code
A sitemap page is just a structured, hierarchical list of links to the real
pages — easy to scan, fully keyboard-reachable, and a second mechanism in its
own right.
Provide at least two independent ways to find any page: keep the menu and
add a site search, a sitemap, an A–Z index, or related-links.
Make sure the two ways are genuinely different mechanisms — a duplicate
menu doesn’t satisfy 2.4.5.
Build the search as a real role="search" landmark with a
labelled input so it’s easy to find and operate.
Exclude only pages that are steps in a process (checkout, multi-step
forms), where alternate routes would let users skip steps.
Navigation re-ordered between pages
WCAG 2.2 · 3.2.3AAEN 301 549Section 508ADA Title II
People build a mental map of a site from its repeated
navigation: “About is the fourth link”, “Contact is last”. Consistent Navigation
requires that any navigation repeated across pages keeps the same relative
order each time it appears. If the order is shuffled from page to page —
alphabetised on one, sorted by popularity on the next — that map breaks, and the
cost falls on screen reader and keyboard users who navigate by position, and on
people with cognitive disabilities who rely on familiarity. Adding or removing an
item is fine; what matters is that the items that remain stay in the same relative
sequence. The only allowed reordering is one the user initiates.
Bad
The same five links appear on both pages, but the order is different. A user
who learned the sequence on the home page can’t rely on it elsewhere (3.2.3).
The relative order is identical on every page. The current page may be marked
with aria-current="page", but its position in the list does not
move.
good-consistent-nav.html
<!-- Identical order on home.html AND about.html -->
<nav aria-label="Primary"><ul>
<li><a href="/">Home</a></li>
<li><a href="/products">Products</a></li>
<li><a href="/about" aria-current="page">About</a></li>
<li><a href="/contact">Contact</a></li>
</ul></nav>
Code
Render navigation from one shared, ordered source — a partial or component —
so every page emits the same sequence. Items may be conditionally hidden, but
never re-sorted per page.
nav-from-source.html
<!-- Single ordered list, included on every page -->
<!-- nav-items: Home, Products, About, Contact (fixed) -->
<nav aria-label="Primary">
<ul>
<!-- loop renders items in declared order, every page -->
<li><a href="{{url}}"
{{#if current}}aria-current="page"{{/if}}>{{label}}</a></li>
</ul>
</nav>
How to fix
Define each repeated navigation block once and render it from that single
ordered source on every page.
Keep the relative order of items fixed; mark the current page with
aria-current="page" instead of moving it.
You may add or remove items between pages — just don’t re-sort the ones
that remain.
Allow reordering only when the user chooses it (for example a
“customise menu” feature), never automatically per page.
The same control labelled differently on different pages
WCAG 2.2 · 3.2.4AA2.4.6AAEN 301 549Section 508ADA Title II
Consistent Identification asks that a component which
does the same thing across a set of pages be identified the same way every time.
If a search button reads “Search” on one page, “Find” on another, and is a bare
magnifier icon with the accessible name “Submit” on a third, users can’t tell it’s
the same control. This hits screen reader users — who hear the accessible name, not
the icon — and people with cognitive disabilities, who recognise a control by its
wording. The text, the icon’s alternative text, and the accessible name all have to
agree, and stay the same wherever the control appears.
Bad
The same “add to cart” action is named three different ways across pages, and
one version is an icon whose accessible name doesn’t match the others (3.2.4).
The control carries the same visible text and the same accessible name on
every page, so it is recognisably one control doing one job.
good-consistent-label.html
<!-- Same label and accessible name on every page -->
<button>Add to cart</button>
<!-- If an icon is shown, it carries the same name -->
<button>
<img src="cart.svg" alt=""> Add to cart
</button>
Code
When an icon-only button is unavoidable, give it the same accessible name as
its text counterpart with aria-label, and keep that name in step
with every other instance of the control.
icon-button-name.html
<!-- Icon-only, but same accessible name as the text button -->
<button aria-label="Add to cart">
<svg aria-hidden="true" focusable="false">...</svg>
</button>
<!-- Reuse one component so the name can't drift -->
<!-- <AddToCartButton /> -->
How to fix
Decide on one label and one accessible name for each repeated control, and
use them everywhere that control appears.
Keep the visible text, any icon’s alternative text, and the accessible name
consistent with each other (2.4.6, 3.2.4).
For icon-only versions, give the same aria-label as the text
version so the names match across pages.
Build the control as a single shared component so its label can’t drift
between pages over time.
Recap
Offer more than one way to reach a page — typically the menu plus a search,
a sitemap, or a clear A–Z or index — unless the page is a step in a process
(2.4.5).
Keep repeated navigation in the same relative order on every page; reorder by
user choice only, never per page (3.2.3).
Give a control that does the same job the same accessible name and visible
label everywhere it appears (3.2.4).
The same discipline satisfies WCAG, EN 301 549, Section 508, and
ADA Title II at once — build the site’s structure consistently and you meet them
all.