Доступність сайту: базовий рівень, який має бути в кожного
Контраст, клавіатурна навігація, alt-тексти, семантика й фокус. Що з WCAG реально впливає на користувачів і чому доступність допомагає ще й SEO.
Найчастіше про проблеми з доступністю дізнаються не з аудиту, а з листа: людина не змогла завершити замовлення, бо не побачила, у якому полі помилка, або не змогла закрити спливне вікно без миші. Доступність — це не окремий режим для окремої аудиторії, а перевірка того, чи витримує інтерфейс хоч якесь відхилення від ідеального сценарію. Далі — базовий рівень, який ми вважаємо обов’язковим на кожному проєкті: контраст, клавіатура, фокус, семантика й alt-тексти. Без академічного переказу WCAG, з конкретними числами та порядком дій.
4.5:1
мінімальний контраст для основного тексту
3:1
для великого тексту та елементів інтерфейсу
24px
мінімальна зона натискання за WCAG 2.2
~30%
проблем ловить автоматика, решту — руками
Кого це стосується насправді
Уявлення «доступність потрібна незрячим» звужує задачу приблизно вдесятеро. Постійні порушення — зір, слух, моторика, увага — це лише частина. Решта випадків тимчасові або ситуативні, і в них хоч раз опинявся кожен ваш клієнт.
- Сонце на екрані. Контраст 3:1, який виглядав стильно в темній кімнаті, на вулиці перетворюється на порожній прямокутник.
- Одна рука зайнята. Людина з дитиною на руках або в транспорті тицяє великим пальцем — і промахується по кнопці 20×20 пікселів.
- Звук вимкнено. Відео без субтитрів у стрічці не подивиться ніхто, хто зараз в офісі або в метро.
- Клавіатура замість миші. Це не лише люди з порушеннями моторики, а й будь-хто, хто заповнює форму з Tab, і будь-який автотест.
- Погана мережа й старий телефон. Якщо інтерфейс тримається виключно на JavaScript, при частковому завантаженні він просто не працює — про це детальніше в матеріалі про mobile-first підхід.
Доступність — це не режим для окремої групи. Це запас міцності інтерфейсу: наскільки він ще працює, коли умови перестали бути ідеальними.
Формально орієнтир — WCAG 2.2 рівня AA. Рівень A замалий (він дозволяє, наприклад, сірий текст на межі читабельності), рівень AAA на комерційному сайті майже недосяжний і не потрібен. AA — це той поріг, який реально впроваджується без переписування продукту й на який посилається більшість регуляторних вимог.
Контраст і колір: найдешевша перемога
Контраст — єдина частина доступності, яку можна виміряти числом і виправити за один день. Тому з неї варто починати. Правило коротке: 4.5:1 для звичайного тексту, 3:1 для великого (від 24px або від 19px жирним) і 3:1 для всього, що не текст, але несе сенс — іконок, меж полів, індикаторів фокуса.
| Що перевіряєте | Мінімум AA | Типова помилка |
|---|---|---|
| Основний текст 16px | 4.5:1 | Світло-сірий #999999 на білому дає близько 2.8:1 |
| Заголовок від 24px | 3:1 | Білий текст на світлому фото без затемнення |
| Текст на кнопці бренд-кольору | 4.5:1 | Білий на жовтому чи бірюзовому — часто менше 2:1 |
| Межі полів, іконки, стан фокуса | 3:1 | Рамка #E5E7EB на білому — приблизно 1.2:1 |
| Плейсхолдер у полі форми | 4.5:1 | Плейсхолдер використали замість підпису — подвійна помилка |
Практична порада для брендів: перевіряйте контраст ще на етапі вибору палітри, а не коли дизайн уже затверджено. Фірмовий колір, який не проходить 4.5:1 з білим, доведеться або затемнювати для тексту, або залишати виключно для великих площин і графіки. Ми розбираємо це докладніше в матеріалі про вибір кольорів для бренду.
Клавіатура, фокус і зони натискання
Просте випробування: відкрийте свій сайт, відкладіть мишу й спробуйте пройти шлях до оформлення замовлення самим лише Tab, Enter, Space та стрілками. Більшість сайтів ламаються на третьому кроці — зникає підсвітка фокуса, спливне вікно неможливо закрити, а випадне меню відкривається тільки при наведенні курсора.
/* Так робити не можна: фокус зникає в усіх, хто не користується мишею */
*:focus { outline: none; }
/* Так правильно: помітна рамка лише при навігації з клавіатури */
:focus-visible {
outline: 3px solid #0097b2;
outline-offset: 2px;
border-radius: 4px;
}
/* Поважайте системне налаштування «зменшити рух» */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}- Порядок обходу дорівнює візуальному порядку. Якщо блок пересунули через CSS, а в розмітці він залишився в кінці — фокус стрибатиме.
tabindexз додатними значеннями не рятує, а погіршує: використовуйте лише0і-1. - Посилання «Перейти до основного вмісту» першим елементом сторінки. На сайті з меню на 25 пунктів це економить користувачеві 25 натискань на кожній сторінці.
- Модальні вікна тримають фокус усередині й закриваються по Esc, а після закриття повертають фокус на кнопку, яка їх відкрила.
- Наведення курсора не може бути єдиним способом взаємодії. Меню, що розкривається лише по hover, на сенсорному екрані й з клавіатури недоступне взагалі.
- Зона натискання — від 24×24 пікселів за WCAG 2.2, а на практиці цільтеся у 44×44. Збільшити зону можна псевдоелементом, не роздуваючи саму іконку.
Семантика, alt-тексти й форми
Скрінрідер не бачить дизайн — він читає розмітку. Тому div зі слухачем кліку для нього не існує як кнопка: до нього не можна дійти клавіатурою, він не реагує на Enter і не має ролі. Це найпоширеніша структурна помилка, і виправляється вона одним тегом.
<!-- Не працює з клавіатури, не оголошується як кнопка -->
<div class="btn" onclick="submit()">Надіслати</div>
<!-- Працює одразу: фокус, Enter, Space, роль button -->
<button type="submit">Надіслати</button>
<!-- Кнопка без тексту потребує доступної назви -->
<button type="button" aria-label="Закрити вікно">
<svg aria-hidden="true" focusable="false">...</svg>
</button>Мінімум, який має бути на кожній сторінці
- Один
h1на сторінку, рівні заголовків без пропусків: післяh2не йдеh4 - Орієнтири розмітки:
header,nav,main,footer— по одному основному на сторінку <html lang="uk">з правильним кодом мови, і свій код на кожній мовній версії- Кожне поле форми має
<label for>; плейсхолдер підписом не є - Тексти помилок поруч із полем, а не лише червона рамка чи повідомлення зверху
- Атрибут
autocompleteна полях імені, пошти, телефону й адреси - Змістовні alt-тексти: для декоративних картинок — порожній
alt="" - Текст посилання зрозумілий поза контекстом: «Умови доставки», а не «детальніше»
- Субтитри до відео та текстова версія для аудіо
Про alt-тексти окремо, бо їх пишуть найгірше. Правильний alt описує призначення зображення в цьому місці, а не його вміст: для логотипа в шапці це назва компанії, для фото товару — назва й ключова характеристика, для іконки всередині кнопки — нічого, бо назву дає сама кнопка. Не починайте з «фото» чи «зображення» — скрінрідер і так оголосить тип елемента. І не переносьте в alt ключові слова: це не працює як SEO-прийом уже років п’ятнадцять.
Як перевіряти і чому віджети-накладки не працюють
Порядок перевірки має значення: автоматичні сканери шукають те, що можна формалізувати, і за нашим досвідом ловлять приблизно третину реальних проблем. Контраст і відсутні alt вони знайдуть. Безглуздий alt, нелогічний порядок фокуса чи форму, яку неможливо заповнити з клавіатури, — ні.
- 1
Прохід лише з клавіатури
Від головної до підтвердження замовлення без миші. Найдешевший тест, який знаходить найбільше. Робіть його після кожного релізу нового шаблону сторінки.
- 2
Автоматичний сканер
Lighthouse або розширення axe DevTools: 10 хвилин на сторінку, знаходить контраст, порожні кнопки, дублікати
id, порушення ієрархії заголовків. - 3
Масштаб і вузький екран
Збільште сторінку до 200% і окремо перевірте ширину 320 пікселів. Текст, що обрізається або вимагає горизонтальної прокрутки, — порушення, і водночас пряма шкода мобільній конверсії.
- 4
Швидка перевірка скрінрідером
VoiceOver на macOS вмикається за Cmd+F5, NVDA на Windows безкоштовна. Прослухайте головну й одну сторінку послуги: заголовки, посилання, форму. Двадцять хвилин дають більше розуміння, ніж будь-який чекліст.
- 5
Регресія в підтримці
Доступність ламається не на релізі, а через півроку правок. Внесіть перевірку клавіатури й контрасту у звичайний цикл підтримки — інакше все повернеться.
Часті питання про доступність сайтів
Який рівень WCAG потрібен комерційному сайту?
Практичний орієнтир — WCAG 2.2 рівня AA. Рівень A припускає надто слабкі вимоги до контрасту й підказок, а AAA вимагає, зокрема, контрасту 7:1 і спрощеної мови, що для більшості комерційних сайтів нереалістично. Досягти AA можна без переписування продукту, і саме на цей рівень посилається більшість регуляторних вимог.
Чи є доступність юридичною вимогою?
Це залежить від країни та сфери діяльності. У Європейському Союзі вимоги до цифрової доступності поширюються на визначений перелік послуг — зокрема онлайн-торгівлю, банківські сервіси, транспорт та електронні книги — і стосуються компаній, які продають на цей ринок, незалежно від місця реєстрації. Для державного сектору вимоги діють у більшості юрисдикцій, тож конкретний обсяг зобов’язань варто уточнити з юристом.
Скільки коштує зробити наявний сайт доступним?
Виправлення контрасту, alt-текстів, підписів у формах і станів фокуса на типовому сайті з 20–40 сторінок займає 15–30 годин роботи. Дорожче виходить, коли доводиться змінювати компоненти в дизайн-системі: власні випадні списки, слайдери й модальні вікна, зібрані на div, треба переписувати. Закладати доступність під час розробки дешевше приблизно вчетверо, ніж повертатися до неї потім.
Чи допомагають віджети доступності, які додаються одним скриптом?
Ні, і в багатьох випадках вони шкодять. Такі накладки працюють поверх сторінки й не змінюють її розмітку, тому елементи, зроблені без семантики, залишаються недоступними. Крім того, панель нерідко перехоплює фокус і конфліктує з екранним читачем, яким людина вже користується у своїй системі.
Чи впливає доступність на позиції в пошуку?
Прямого фактора ранжування під назвою «доступність» не існує, але перетин великий. Семантична ієрархія заголовків, змістовні alt-тексти, зрозумілі тексти посилань, коректний атрибут мови й субтитри до відео допомагають пошуковим системам розібрати сторінку так само, як допомагають скрінрідеру. Плюс доступні сайти зазвичай стабільніші за поведінковими показниками, бо менше людей не можуть завершити дію.
Коротко
- Цільтеся у WCAG 2.2 рівня AA: 4.5:1 для тексту, 3:1 для великого тексту й елементів інтерфейсу, зона натискання від 24 пікселів.
- Почніть із контрасту й
:focus-visible— це один день роботи й найбільший ефект на вкладену годину. - Використовуйте справжні
button,labelі заголовки за ієрархією. Більшість проблем доступності — це відсутня семантика, а не складні технології. - Автоматичні сканери ловлять близько третини проблем. Прохід клавіатурою й двадцять хвилин зі скрінрідером знаходять решту.
- Віджети-накладки не роблять сайт доступним. Виправляйте розмітку, а не маскуйте її.
Схожі матеріали
Mobile-first дизайн: чому 70% трафіку вирішує все
Більшість ваших відвідувачів — з телефона. Але більшість сайтів досі проєктують на 27-дюймовому моніторі.
Психологія кольору в брендингу: без міфів і езотерики
«Синій = довіра» — надто спрощено. Розбираємо, що насправді впливає на сприйняття палітри.
SEO-чекліст 2026: 60 пунктів для сайту, який має ранжуватися
Не теорія, а чекліст, за яким ми проходимо кожен проєкт перед запуском. 60 пунктів у шести блоках.