Доступность сайта по WCAG: контраст, навигация с клавиатуры и скринридеры — чек-лист доработок

Цель доработки B2B-сайта по доступности — не идеал, а соответствие базовой планке WCAG 2.2 AA. Жёстких требований всего три: контраст основного текста не ниже 4.5:1, все кликабельные элем...

WCAG 改造三件套:对比度、键盘、屏幕阅读器WCAG retrofit: contrast, keyboard, screen reader 反直觉:做无障碍不是做慈善,它和语义化 SEO、AI 引用是同一件事Counter-intuitive: a11y is not charity — it is the same work as SEO and AI citation 改造项Item 硬指标Hard bar 对比度Contrast 正文 ≥ 4.5:1Body text ≥ 4.5:1 大字 ≥ 3:1Large text ≥ 3:1 UI 边框 ≥ 3:1UI borders ≥ 3:1 灰字浅底是重灾区Gray on pale is the top fail 键盘导航Keyboard 所有可点元素可 Tab 到Every target reachable by Tab 焦点环必须可见Focus ring must be visible 无键盘陷阱No keyboard trap 鼠标划过来自己测一遍Tab through by hand 屏幕阅读器Screen reader 每张图有 altalt on every image 标题层级不跳级Heading order no skips 图标按钮有 aria-labelaria-label on icon buttons 装饰图 alt 留空Decorative images alt=”” 验收工具:axe 插件自动扫 + 键盘手动走查 + NVDA/VoiceOver 听一遍Test: axe auto-scan + keyboard walkthrough + NVDA/VoiceOver pass 自动工具能抓约 30% 至 40% 的问题,剩下必须手动——别把 axe 绿了当通过Automation catches only 30%-40%; the rest is manual 落地顺序:先修对比度与标题层级(半天),再修键盘焦点(一天),最后补 aria 与 alt(两天)Order: contrast/headings first, keyboard focus next, aria/alt last 目标先定 WCAG 2.2 AA,不追 AAA——AA 是法规与主流客户问卷的共同基线Target WCAG 2.2 AA, not AAA; AA is the common baseline
Три задачи по WCAG: пороги контраста, проверка навигации с клавиатуры и семантики для скринридеров

Доступность сайта по WCAG: контраст, навигация с клавиатуры и скринридеры — чек-лист доработок

Сначала вывод: Цель доработки B2B-сайта по доступности — не идеал, а соответствие базовой планке WCAG 2.2 AA. Жёстких требований всего три: контраст основного текста не ниже 4.5:1, все кликабельные элементы проходятся клавишей Tab и фокус виден, у каждого значимого изображения есть alt, а уровни заголовков не пропускаются. Если вы работаете один, планируйте так: контраст и уровни заголовков — полдня, фокус клавиатуры — день, aria и alt — два дня. Примерно за четыре дня можно закрыть все проблемы уровня P0. Контринтуитивный момент: доступность, семантическое SEO и удобство для цитирования ИИ — по сути одна и та же работа.

Почему B2B-сайту тоже нужна доступность

Многие думают, что доступность — это благотворительность для людей с инвалидностью и к B2B-сайту, который продаёт оборудование и собирает заявки, отношения не имеет. Это верно лишь наполовину. Реальных причин три: в анкетах поставщика от крупных заказчиков из Европы и США вопрос «соответствует ли сайт WCAG» уже стал обязательным; часть штатов США и закупки ЕС предъявляют требования к доступности для государственных и публичных контрактов; а главное — семантичный HTML одинаково удобен и для поисковиков, и для ИИ-краулеров.

Контринтуитивный вывод здесь такой:Доработка по доступности — не дополнительные расходы: это тот же код, что нужен для SEO, структурированных данных и цитирования ИИ. Заменить div-кнопки на настоящий button, добавить alt к изображениям, выстроить иерархию размеров шрифта — для скринридера это необходимость, а для Google и больших моделей это плюс к пониманию структуры страницы. Что именно входит в объём работ, смотрите Доступность сайта (WCAG): что обязательно, а что можно отложить.

Категория доработки Жёсткое требование WCAG 2.2 AA Частая ошибка Стоимость исправления
Контраст текста Основной текст ≥ 4.5:1, крупный ≥ 3:1 Светло-серый текст на белом, около 2.5:1 Полдня
Фокус клавиатуры Все интерактивные элементы доступны по Tab и фокус виден outline:none убирает рамку фокуса Один день
Alt изображения У информативных изображений описательный alt, у декоративных — пустой alt везде «image» или пустой Два дня
Иерархия заголовков h1 → h2 → h3 без пропусков Прыжок с h2 сразу на h4 Полдня
Подписи полей формы У каждого поля ввода видимая подпись label Вместо подписи только placeholder Один день

Шаг первый: поднять контраст до 4.5:1

Контраст — самый простой показатель для измерения и самопроверки. Правило простое: для крупного текста от 18 пунктов (примерно 24 пикселя) или жирного текста от 14 пунктов (примерно 18,66 пикселя) требуется 3:1; для остального текста, мелкого шрифта и надписей на кнопках — 4,5:1. Серый мелкий текст на светлом фоне — самая частая ошибка на сайтах: дизайнер ради «премиального вида» делает основной текст цветом #888 на фоне #f5f5f5, а реальный контраст получается чуть больше 2:1.

Для самопроверки не нужно покупать инструменты: установите в браузере расширение axe или WAVE, и сканирование в один клик подсветит все элементы с недостаточной контрастностью. При исправлении не меняйте дизайн целиком — просто затемните те несколько цветов, которые не проходят: основной текст с #888 до #555 обычно уже даёт 4,5:1, а затраты почти нулевые. Это тот же подход, что и в оптимизации производительности — сначала брать низко висящие плоды, см.Core Web Vitals— там описано, как расставлять приоритеты по выгоде.

Тип элемента Требование контрастности AA Как проверить Частые способы исправления
Основной мелкий текст ≥ 4.5:1 axe/WAVE отмечает автоматически Затемнить цвет текста на один шаг
Крупные заголовки ≥ 3:1 То же Обычно уже соответствует
Текст на кнопках ≥ 4.5:1 Проверять вместе с фоном Затемнить текст кнопки или фон
Границы и иконки интерфейса ≥ 3:1 Контраст с соседним фоном Затемнить цвет границы
Текст в неактивном состоянии Можно не исправлять Убедитесь, что элемент действительно неактивен Не обязательно менять

Три. Второе: уберите мышь и пройдите весь сайт с клавиатуры

Способ проверки клавиатурной навигации только один: отключите мышь и пройдите с помощью Tab, Shift+Tab, Enter и Esc четыре страницы — главную, список товаров, карточку товара и форму обратной связи — от начала до конца. Вы сразу обнаружите три типа проблем: фокусное кольцо убито CSS-правилом outline: none, и непонятно, где вы находитесь; выпадающее меню написано на чистом JS, и с клавиатуры в него не попасть; после открытия модального окна фокус застревает внутри и не выходит — это называется клавиатурной ловушкой.

Сценарий первый: «псевдокнопка», сделанная из div. Дизайнер для экономии времени сделал div с обработчиком клика — пользователь с клавиатуры не может ни перейти на него через Tab, ни активировать через Enter. Исправление — не дописывать JS, а просто заменить на нативный button: он изначально поддерживает клавиатуру и имеет доступное имя.Сценарий второй: фокусное кольцо не видно. Во многих глобальных стилях прописано *:focus { outline: none }, что удаляет стандартную рамку фокуса браузера. Правильно — сохранить чёткий стиль фокуса, например синюю внешнюю обводку 2px, а не удалять её полностью. О том, как сочетать семантику и структурированные данные, см.Структурированные данные Schema.

Пункт проверки клавиатурой Критерий нормы Признак несоответствия Способ исправления
Порядок Tab Совпадает с визуальным порядком чтения Перескакивает, не доходит до кнопок Изменить порядок DOM или tabindex
Видимость фокуса У текущего элемента фокуса чёткая обводка outline удалён, ничего не видно Добавить стиль :focus-visible
Выпадающий список Раскрытие выбора стрелками Работает только мышью Заменить на нативный select или добавить поддержку клавиатуры
Модальное окно Фокус переходит в окно, Esc закрывает Фокус застревает и не выходит Реализовать захват и освобождение фокуса
Ссылка для перехода На длинных страницах есть «перейти к основному содержимому» Каждый раз десятки переходов по вкладкам навигации Добавьте ссылку skip to content

Четвёртое, третье дело: сделать так, чтобы скринридер понимал страницу

Пользователь скринридера слышит «семантический каркас» HTML, а не тот дизайн, который видите вы. Каркас держится на трёх вещах: alt-текст, иерархия заголовков и ARIA-атрибуты. alt — это не «дать картинке имя файла», а одной фразой объяснить, что она сообщает. А у декоративных разделителей должно быть alt=””, чтобы скринридер их пропускал и не читал слово «кнопка».

Иерархия заголовков — ещё одна зона бедствия. Часто, чтобы заголовок выглядел крупнее, верстальщики ставят h4 или даже p с CSS — и скринридер после h2 сразу читает h4, пользователь вообще не понимает структуру документа. Правило механическое: на странице один h1, под ним равнозначные h2, подразделы через h3, перепрыгивать нельзя. У кнопок-иконок (лупа, гамбургер-меню) нет текста, поэтому нужен aria-label, иначе скринридер прочитает только «кнопка» и пользователь не поймёт, что произойдёт по нажатию. О том, какие формулировки дружелюбны к зарубежным покупателям, читайте в гайд по тону для текстов на сайте.

Что проверить Правильный подход Частая ошибка Проверка инструментами
alt у инфографики Опишите ключевой вывод alt=”фото товара”, информации нет Что слышит скринридер
alt для декоративной картинки alt=”” оставить пустым Читает бессмысленное имя файла Проверьте, пропускается ли
Иерархия заголовков h1>h2>h3 по порядку с h2 сразу на h4 axe отмечает пропуск уровня
Кнопка-иконка Добавьте aria-label=”поиск” Читается только «кнопка» NVDA/VoiceOver
Таблицы Заголовки таблицы через th Всё свёрстано на td Читает ли строку с заголовком

Пятое, приёмка: автоматический прогон, потом ручная доводка

Последнее заблуждение — «если плагин axe показал зелёное, значит всё соответствует требованиям». Автоматические инструменты покрывают примерно 30–40% проблем доступности: контраст, отсутствующий alt, пропуск уровней заголовков они ловят, а клавиатурные ловушки, порядок фокуса и реальный опыт со скринридером — нет. Полная приёмка — это три обязательных шага: прогнать axe, вручную пройти клавиатурой четыре ключевые страницы и прослушать главную в NVDA (Windows) или VoiceOver (Mac).

По приоритету сначала берите то, что «не трогает дизайн, а только код»: контраст, иерархия заголовков, alt, фокусное кольцо. Здесь дизайнер не нужен, разработчик справится за два дня. Задачи с переделкой взаимодействия (кастомные выпадающие списки, управление фокусом в модальных окнах) — во вторую очередь: работы много, но таких мест мало. Цельтесь в WCAG 2.2 AA и не гонитесь за AAA: AAA требует контраста основного текста 7:1, а в реальном дизайне это часто идёт в ущерб внешнему виду, и затраты не окупаются.

Способ приёмки Что находит Доля покрытия Частота
Автопрогон axe/WAVE Контраст, отсутствие alt, пропуск уровней заголовков Примерно 30–40% Перед каждым релизом
Ручной обход клавиатурой Порядок фокуса, клавиатурные ловушки Автоматика не находит Раз в месяц
Прослушивание в NVDA/VoiceOver Опыт со скринридером, имена в aria Автоматика не находит Раз в квартал
Отзывы реальных пользователей Проблемы в реальном использовании Точнее всего, но медленнее всего Постоянно пополняем

FAQ: частые вопросы

WCAG 2.1, 2.2, AA или AAA — что выбрать?
Берите WCAG 2.2 AA. Уровень AA — это базовая планка, на которую реально опираются госзакупки в Европе и США, анкеты поставщиков у крупных заказчиков и большинство судебных исков. AAA требует контраста основного текста 7:1 — это слишком сильно ограничивает дизайн, и большинству коммерческих сайтов это не нужно. Зафиксируйте цель на AA: 4,5:1 для основного текста и 3:1 для крупного — этого хватит, чтобы закрыть 95% анкет и требований соответствия. В версии 2.2 по сравнению с 2.1 добавились новые правила про внешний вид фокуса, перетаскивание и другое — просто делайте сразу по последней версии.
У нас небольшой сайт — сколько дней займёт доработка доступности?
Один человек или небольшая команда закрывает проблемы уровня P0 примерно за четыре дня: контраст и иерархия заголовков — полдня, фокус с клавиатуры — день, alt у изображений и aria у кнопок-иконок — два дня. Переделывать дизайн не нужно, правите только код. Сначала беритесь за механические пункты, которые не влияют на внешний вид, а переписывание интерактива (кастомные выпадающие списки, фокус в модальных окнах) оставьте на вторую очередь. Если весь сайт собран на популярной теме плюс несколько плагинов, многие проблемы уйдут после обновления темы, и реально времени уйдёт меньше четырёх дней.
Если плагин axe показывает всё зелёным, значит, мы соответствуем требованиям?
Нет. Автоматические инструменты покрывают лишь около 30–40% проблем: механические ошибки вроде контраста, отсутствующих alt и пропущенных уровней заголовков они ловят, а вот ловушки клавиатуры, разумный ли порядок фокуса и удобно ли звучит текст в скринридере — этого они не проверяют. Нужны два дополнительных шага: отложите мышь и пройдите Tab по четырём ключевым страницам, а затем полностью прослушайте главную в NVDA или VoiceOver. Зелёный результат автопроверки — это всего лишь треть работы.
Какой длины должен быть alt у изображения и что в нём писать?
Принцип такой: когда скринридер зачитывает alt, информация, которую несёт изображение, не должна теряться. Для главного фото товара пишите alt=”фланец из нержавеющей стали, модель такая-то, класс давления PN16″, а не “фото товара”. Если на картинке график, прямо в alt укажите ключевой вывод, например “рост на 18% год к году в 2024 году”. У чисто декоративных разделителей и фоновых текстур ставьте alt=””, чтобы скринридер их пропускал. Не пишите в alt лишние слова вроде “изображение:” или “нажмите”.
Мы используем готовую тему — нужно ли самим дорабатывать доступность?
Нужно, но работы немного. Сначала проверьте, заявлена ли поддержка WCAG на официальном сайте темы: большинство популярных коммерческих тем уже проходят AA. Вам остаётся своё: шаблоны страниц, которые вы добавили сами, плагины кастомных форм, свои кнопки-иконки — то, что тема не контролирует и где чаще всего всё ломается. Просканируйте axe те страницы, которые сделали сами, и закройте найденные проблемы — лезть в основные файлы темы не нужно.
Доступность конфликтует с SEO? Не придётся ли отказаться от дизайна?
Никакого конфликта нет — в большинстве случаев это одно и то же: семантические теги, alt-тексты и правильная иерархия заголовков помогают и поисковикам, и большим моделям одинаково хорошо понимать страницу. Единственное, где действительно нужен компромисс, — требование контраста уровня AAA; если делать по AA, дизайн вообще не пострадает. Единственное, что, возможно, придётся поправить, — убрать глобальный стиль с жёстко прописанным outline:none и заменить фокусное кольцо на стиль в цветах бренда: визуально разницы почти не будет.

В заключение

Адаптацию под доступность проще всего превратить в показуху «соответствуем ради соответствия»: прогнать плагин, сделать пару скриншотов и приложить их к отчёту. Гораздо полезнее разбить её на список задач P0, которые реально закрыть за три дня: сначала привести в порядок контраст и иерархию заголовков, затем пройти весь сайт с клавиатуры, и в конце дополнить alt и aria. После этого ваш сайт станет доступен для скринридеров, а поисковикам и AI-краулерам — понятнее.

Три шага на практике: первый — запустить axe по всему сайту и свести в таблицу проблемы с контрастом, отсутствующие alt и пропущенные уровни заголовков; второй — отложить мышь и пройти Tab’ом главную, страницу товара и страницу с формой, записав все места, где фокус застревает; третий — раз в месяц запускать автоматическую проверку перед публикацией и раз в квартал полностью прослушивать главную через скринридер. На мультиязычных сайтах следите ещё и за полнотой переводов alt и заголовков, см.Работа с графиками на многоязычном сайте.

Запомните одну фразу: доступность — это не заплатка для особых групп, а умение написать веб-страницу человеческим языком. Скринридер понимает — поисковик читает, AI приводит к вам.

crater
crater Эксперт Crater

Официальный аккаунт организации · crater Crater

环形山 (Crater) — компания, которая помогает выходить на зарубежные рынки: разработка сайтов на WordPress, Google SEO и комплексный рост в GEO. Мы работаем с умными устройствами, промышленным оборудованием, SaaS и новой энергетикой.

Возможности продуктаБелая книга по методологииОтраслевые отчёты
965篇分享
78статей в базе знаний