Identify Purpose
The purpose of user interface components, icons, and regions can be determined programmatically — extending 1.3.5 beyond form fields to the whole interface.
Who this affects
Users with cognitive disabilities who rely on personalisation tools that swap in familiar symbols, simplify layouts, or hide non-essential regions.
The failure and the fix
Each example below is a self-contained page, loaded in a frame so its markup cannot affect this page. Open either one on its own to test it with a keyboard or screen reader.
Fails 1.3.6
Open the failing example in a new tab
fail.html — the problem
<h1>Your account</h1>
<!-- 1.3.6 extends 1.3.5 from form fields to the WHOLE interface: regions,
controls and icons must all have a programmatically determinable purpose,
so that personalisation tools can act on them - swapping in symbols a user
recognises, simplifying the layout, or hiding non-essential regions.
FAILURE 1: the page is built entirely from divs. There are no landmarks,
so a personalisation tool cannot tell the navigation from the main content
from the advertising, and cannot hide the parts the user does not need. -->
<div class="bar">
<div><a href="#a">Home</a></div>
<div><a href="#a">Orders</a></div>
<div><a href="#a">Settings</a></div>
</div>
<!-- FAILURE 2: icon-only controls whose purpose exists only as a glyph. There
is no name and no role beyond "button", so nothing can substitute a
symbol the user finds easier to recognise. -->
<div class="bar">
<button type="button" class="button button--secondary">🏠</button>
<button type="button" class="button button--secondary">🔍</button>
<button type="button" class="button button--secondary">🗑</button>
<button type="button" class="button button--secondary">⚙</button>
</div>
<div>
<div style="font-size:1.2rem;font-weight:700">Recent orders</div>
<div>Order #1041 — 3 March</div>
</div>
<div>Advertisement: buy a tote bag.</div>
<p id="a">Section.</p>
Meets 1.3.6
Open the passing example in a new tab
pass.html — the fix
<!-- FIX 1: real landmarks. A personalisation tool can now distinguish
navigation from main content from complementary material, and can hide or
reorder them on the user's behalf. -->
<header>
<nav aria-label="Main">
<ul class="bar">
<li><a href="#a">Home</a></li>
<li><a href="#a">Orders</a></li>
<li><a href="#a">Settings</a></li>
</ul>
</nav>
</header>
<main>
<h1>Your account</h1>
<!-- FIX 2: every icon control has a text name, and the icon is hidden from
assistive technology. The purpose is now in the accessibility tree, so a
tool can replace the glyph with a symbol set the user recognises -
Bliss, Widgit, or simply larger plain words. -->
<ul class="bar">
<li><button type="button" class="button button--secondary">
<span aria-hidden="true">🏠</span><span class="visually-hidden">Home</span></button></li>
<li><button type="button" class="button button--secondary">
<span aria-hidden="true">🔍</span><span class="visually-hidden">Search</span></button></li>
<li><button type="button" class="button button--secondary">
<span aria-hidden="true">🗑</span><span class="visually-hidden">Delete</span></button></li>
<li><button type="button" class="button button--secondary">
<span aria-hidden="true">⚙</span><span class="visually-hidden">Settings</span></button></li>
</ul>
<section aria-labelledby="orders-h">
<h2 id="orders-h">Recent orders</h2>
<p>Order #1041 — 3 March</p>
</section>
</main>
<!-- FIX 3: non-essential content is in a complementary landmark, clearly
labelled, so it can be identified and suppressed. -->
<aside aria-labelledby="ad-h">
<h2 id="ad-h">Advertisement</h2>
<p>Buy a tote bag.</p>
</aside>
<footer>
<p id="a">Riverline Books</p>
</footer>
<!-- Honest note: 1.3.6 was written with a "personalisation semantics"
specification in mind that has not been widely implemented, so there are
few tools today that consume this metadata. It is still worth doing, for
two reasons: the landmark and naming work benefits screen reader users
immediately under 1.3.1 and 4.1.2, and it costs almost nothing once you
are writing semantic HTML anyway. -->
How to test it
Check that landmarks, controls, and icons carry semantics or ARIA that identify their purpose, so a personalisation layer can act on them.
-
Automated
Landmark presence can be checked automatically; semantic correctness of every component's declared purpose cannot.
This demo's failure is not machine-detectable. axe's landmark-one-main and region rules would catch the missing landmarks here, but both are tagged best-practice rather than as WCAG rules, so a scan scoped to conformance never runs them. And the deeper requirement - that a personalisation tool could identify each control's purpose - is not something any rule evaluates.
Relevant axe rules:
landmark-one-mainregion
-
Keyboard
Unplug the mouse. Move through the page with Tab, Shift+Tab, Enter, Space and the arrow keys. See the keyboard testing script.
-
Screen reader
Listen to both examples with NVDA, JAWS, VoiceOver or TalkBack and compare what is announced. See the screen reader cheat sheets.
-
Visual
Zoom to 200% and 400%, narrow the viewport to 320 px, and apply the text-spacing overrides. See the visual testing procedures.
Related criteria
In the specification
- Understanding 1.3.6 Identify Purpose — the W3C explanation, intent and exceptions
- 1.3.6 in the WCAG 2.2 Recommendation — the normative wording
WCAG 2.2 Demo Suite