Website Accessibility: The Baseline Every Site Needs
Contrast, keyboard navigation, alt text, semantics and focus states. Which parts of WCAG genuinely affect users — and why accessibility also helps SEO.
Most teams first hear about their accessibility problems not from an audit but from an email: someone could not finish an order because they could not tell which field held the error, or could not dismiss a modal without a mouse. Accessibility is not a separate mode for a separate audience — it tests whether the interface survives any deviation from the ideal scenario. What follows is the baseline we treat as non-negotiable on every project: contrast, keyboard, focus, semantics and alt text. No academic retelling of WCAG — just the numbers and the order to fix things in.
4.5:1
minimum contrast for body text
3:1
for large text and interface elements
24px
minimum target size under WCAG 2.2
~30%
of issues caught by scanners; the rest by hand
Who this actually affects
Framing accessibility as "something blind users need" shrinks the problem roughly tenfold. Permanent impairments — vision, hearing, motor control, attention — are only part of it. The rest is temporary or situational, and every one of your customers has been there.
- Sunlight on the screen. A 3:1 contrast that looked elegant in a dark studio is an empty rectangle outdoors.
- One hand occupied. Someone holding a child or a handrail thumbs at the screen — and misses a 20×20 pixel button.
- Sound off. Nobody in an open-plan office or on a train watches a video without captions.
- Keyboard instead of mouse. Not only people with motor impairments, but anyone filling a form with Tab — and every automated test you will ever write.
- Weak network, old phone. An interface that exists purely in JavaScript does not work when only part of it loads — see our piece on mobile-first design.
Accessibility is not a mode for one group of people. It is structural tolerance: how much of the interface still works once conditions stop being ideal.
The formal target is WCAG 2.2 level AA. Level A is too permissive — it tolerates text sitting at the edge of legibility. AAA is close to unreachable on a commercial site and rarely worth chasing. AA is the threshold you can hit without rewriting the product, and the one most regulations point at.
Contrast and colour: the cheapest win available
Contrast is the one part of accessibility you can measure as a number and fix in a day, which is why it comes first. The rule is short: 4.5:1 for regular text, 3:1 for large text (from 24px, or 19px bold), and 3:1 for anything non-textual that carries meaning — icons, input borders, focus indicators.
| What you check | AA minimum | The usual failure |
|---|---|---|
| Body text at 16px | 4.5:1 | Light grey #999999 on white lands near 2.8:1 |
| Headings from 24px | 3:1 | White text over a light photo with no scrim |
| Text on a brand-colour button | 4.5:1 | White on yellow or teal is often under 2:1 |
| Input borders, icons, focus rings | 3:1 | A #E5E7EB border on white is roughly 1.2:1 |
| Form field placeholders | 4.5:1 | Placeholder used instead of a label — two failures at once |
A note for brands: test contrast while the palette is being chosen, not after the design is signed off. A brand colour that fails 4.5:1 against white either gets a darkened variant for text, or stays reserved for large areas and graphics — more on that in our piece on choosing brand colours.
Keyboard, focus and target sizes
One trial settles it: open your own site, push the mouse aside, and try to reach checkout using only Tab, Enter, Space and the arrow keys. Most sites break by the third step — the focus highlight vanishes, a modal will not close, or a dropdown opens on hover only.
/* Never do this: it removes focus for everyone not using a mouse */
*:focus { outline: none; }
/* Do this instead: a visible ring, keyboard navigation only */
:focus-visible {
outline: 3px solid #0097b2;
outline-offset: 2px;
border-radius: 4px;
}
/* Respect the system-level reduced motion preference */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}- Tab order must match visual order. A block moved with CSS but left last in the markup makes focus jump around. Positive
tabindexvalues make this worse — use only0and-1. - A "skip to main content" link as the first element on the page. With a 25-item menu that saves 25 keystrokes on every page.
- Modals trap focus deliberately, close on Esc, and return focus to the control that opened them.
- Hover can never be the only interaction. A menu that opens on hover alone is unreachable by touch and by keyboard.
- Targets start at 24×24 pixels under WCAG 2.2 — in practice aim for 44×44. Expand the hit area with a pseudo-element rather than inflating the icon.
Semantics, alt text and forms
A screen reader does not see the design — it reads the markup. A div with a click handler therefore does not exist as a button: unreachable by keyboard, deaf to Enter, announcing no role. This is the most common structural failure, and one tag fixes it.
<!-- Unreachable by keyboard, announced as nothing -->
<div class="btn" onclick="submit()">Send</div>
<!-- Works out of the box: focus, Enter, Space, button role -->
<button type="submit">Send</button>
<!-- An icon-only control needs an accessible name -->
<button type="button" aria-label="Close dialog">
<svg aria-hidden="true" focusable="false">...</svg>
</button>The baseline every page needs
- One
h1per page, heading levels with no gaps: neverh4straight afterh2 - Landmark elements:
header,nav,main,footer— one primary of each <html lang="en">with a correct code on every language version- Every form field has a
<label for>; a placeholder is not a label - Error text next to the field, not just a red border or a message at the top
autocompleteattributes on name, email, phone and address fields- Meaningful alt text, with empty
alt=""on purely decorative images - Link text that makes sense out of context: "Delivery terms", not "read more"
- Captions on video and a text alternative for audio content
Alt text deserves its own note, because it is written badly more often than anything else. Good alt describes the purpose of the image in that position, not its contents: for a header logo, the company name; for a product photo, the product plus its key attribute; for an icon inside a labelled button, nothing at all. Do not begin with "image of" — the element type is announced anyway. And do not stuff keywords there; that stopped working fifteen years ago.
How to test, and why overlay widgets do not work
Order matters here. Automated scanners look for what can be formalised, and in our experience catch roughly a third of real problems. They find contrast failures and missing alt attributes. They do not find meaningless alt text, an illogical focus order, or a form that cannot be completed from the keyboard.
- 1
A keyboard-only run
Home page to order confirmation without touching the mouse. The cheapest test there is, and the one that finds most. Repeat it whenever a new page template ships.
- 2
An automated scan
Lighthouse or the axe DevTools extension: ten minutes per template, catching contrast, unlabelled buttons, duplicate
idvalues and broken heading hierarchies. - 3
Zoom and narrow viewport
Zoom to 200%, then check at 320 pixels wide. Text that clips or forces horizontal scrolling is a failure — and a direct hit to mobile conversion.
- 4
A quick screen reader pass
VoiceOver on macOS opens with Cmd+F5; NVDA on Windows is free. Listen through the home page and one service page: headings, links, the form. Twenty minutes teaches more than any checklist.
- 5
Guard against regression
Accessibility rarely breaks at launch — it breaks six months of edits later. Fold the keyboard run and a contrast check into routine maintenance.
Frequently asked questions about website accessibility
Which WCAG level should a commercial website target?
The practical target is WCAG 2.2 level AA. Level A allows contrast and guidance too weak to be useful, while AAA demands things like a 7:1 contrast ratio and simplified language that are unrealistic for most commercial sites. AA is achievable without rewriting the product, and it is the level most regulations reference.
Is accessibility a legal requirement?
That depends on the country and the sector. In the European Union, digital accessibility obligations cover a defined list of services — online retail, banking, transport and e-books among them — and apply to companies selling into that market wherever they are registered. Public-sector requirements exist in most jurisdictions, so the exact scope of your obligations is worth confirming with a lawyer.
What does it cost to make an existing site accessible?
Fixing contrast, alt text, form labels and focus states on a typical 20–40 page site takes 15–30 hours. It gets more expensive when design-system components have to change: custom dropdowns, sliders and modals assembled out of div elements need rebuilding. Building accessibility in during development costs roughly a quarter of what retrofitting costs later.
Do one-script accessibility widgets help?
No, and in many cases they cause harm. These overlays run on top of the page without changing its markup, so any element built without semantics stays inaccessible. The panel also tends to capture focus and conflict with the screen reader a visitor already runs at operating-system level.
Does accessibility affect search rankings?
There is no ranking factor literally called accessibility, but the overlap is large. Semantic heading hierarchy, meaningful alt text, descriptive link text, a correct language attribute and video captions help search engines parse a page exactly as they help a screen reader. Accessible sites also hold up better on engagement metrics, because fewer people fail to complete an action.
In short
- Aim at WCAG 2.2 level AA: 4.5:1 for text, 3:1 for large text and interface elements, targets from 24 pixels up.
- Start with contrast and
:focus-visible— one day of work for the biggest return per hour. - Use real
button,labeland ordered headings. Most accessibility problems are missing semantics, not hard technology. - Scanners catch about a third of issues. A keyboard-only run and twenty minutes with a screen reader find the rest.
- Overlay widgets do not make a site accessible. Fix the markup instead of masking it.
Related reading
Mobile-First Design: Why 70% of Your Traffic Decides Everything
Most of your visitors are on a phone. Most sites are still designed on a 27-inch monitor.
Colour Psychology in Branding, Minus the Mythology
"Blue means trust" is too simple. Here is what genuinely shapes how a palette is read.
SEO Checklist 2026: 60 Checks a Site Needs Before It Ranks
Not theory — the checklist we run every project through before launch. 60 items across six blocks.