Карточка кроссовок в международном магазине никогда не читается только человеком. Её одновременно разбирает браузер, озвучивает assistive technology - программа чтения с экрана - и обходит поисковый робот. Четыре потребителя, четыре способа восприятия - а исходник один: тот же HTML, структура, описание смысла.
Наивная реакция: аудиторий четыре - оптимизируем под каждую. Человеку красивую вёрстку, роботу ключевые слова и мета-теги, программе чтения подпорки из ARIA, локалям отдельные копии. И так выходит - за задачу свой специалист. Ломается там, где оптимизации противоречат: удобная роботу разметка непроходима для клавиатуры; ARIA поверх врёт про состояние; переводы в коде рассыпаются при смене языка.
Работает другое. Хорошая реализация делает один интерфейс - с понятной структурой и верным смыслом. Accessibility, SEO и internationalization сходятся в одних точках: сам документ, его URL, объявленный язык, структура заголовков, ссылки, состояние интерфейса, серверный HTML, качество контента. Это не три случайные дисциплины, а три проекции одного вопроса - насколько честно код описывает увиденное пользователем.
Определим три качества без мифов. Accessibility (доступность) - не режим для инвалидов и не отдельная версия сайта, а устойчивость интерфейса к разным способам восприятия и управления: мышью и клавиатурой, глазами и на слух. Кнопку в корзину можно нажать только мышью - интерфейс сломан для тех, кто мышью не пользуется.
SEO - не закупка ключевых слов и не обман алгоритма, а доступность содержимого для обнаружения, понимания и выбора: поисковик должен найти страницу, извлечь смысл и решить, что эта карточка отвечает на запрос. Работает то же, что и в доступности, - честная структура и читаемый контент, только потребитель другой.
Internationalization (i18n) - не боковой словарь переводов, а архитектура, где язык, формат и направление текста не зашиты в код. Цена видна, стоит карточке уехать за границу: меняются валюта и формат цены, порядок слов в дате, форма множественного числа (1 review, 5 reviews), а для арабской локали - направление макета справа налево. Учтено в архитектуре - локаль дёшева; зашито в вёрстку - каждый язык отдельная боль.
Почему все три из одного корня, видно по точкам пересечения. Единственный h1 - и ориентир для программы чтения, и сигнал темы для поиска. Осмысленный текст ссылки - и навигация для незрячего, и якорь для робота. Объявленный язык - и произношение синтезатором, и привязка к локали. Серверный HTML сразу - и быстрый доступ к контенту, и гарантия, что робот увидит содержимое, а не каркас.
| Точка пересечения | Что это даёт доступности | Что это даёт поиску и локали |
|---|---|---|
| Единственный h1 и уровни заголовков | Карта страницы для программы чтения | Сигнал темы и структуры для индексации |
| Осмысленный текст ссылки | Понятная навигация без контекста | Якорный текст, описывающий цель |
| Объявленный язык (атрибут lang) | Правильное произношение синтезатором | Верная привязка страницы к локали |
| Серверный HTML | Контент доступен сразу, без ожидания JS | Робот индексирует содержимое, а не пустой каркас |
У подхода есть цена. Он требует привычки думать не пикселями, а смыслом: сначала роль элемента (ссылка, кнопка, заголовок, список), потом внешний вид. Это медленнее, чем накидать div-ов со стилями, и без визуальной отдачи - структуры не видно. Оправдан везде, где у продукта больше одного пользователя и языка, - почти вся коммерческая разработка; экономить разумно лишь в прототипе.
Провал виден на кликабельном div вместо кнопки. Визуально он неотличим и работает мышью. Но роли нет - программа чтения не объявит его кнопкой; нет фокуса и клавиш - с клавиатуры не попасть; нет disabled - неясно, доступно ли действие; для поиска и локализации это немой кусок разметки. Один срезанный угол - и страница теряет три аудитории из четырёх. Отсюда правило на всю книгу: сперва честная структура, потом украшения поверх.