Разработка · 4 мин

Семантический HTML: как разметить страницу по смыслу

Как выбрать HTML-элементы для навигации, карточек и действий, проверить дерево доступности и не сломать поведение при рефакторинге.

Тематическая иллюстрация к материалу: Семантический HTML: как разметить страницу по смыслу

Редакция Romanov Lab · Опубликовано

У двух страниц может быть одинаковый скриншот и совершенно разное поведение. На одной «Подробнее» — ссылка, которую можно открыть в новой вкладке; на другой — блок с обработчиком щелчка. На одной заголовки образуют понятное оглавление; на другой их роль выполняют жирные абзацы. Семантическая разметка определяет назначение элементов, а CSS отвечает за внешний вид. Для разработчика это способ сохранить контракт интерфейса при изменении дизайна.

Начните с карты содержания

До написания компонентов перечислите области страницы: общая навигация, основное содержание, дополнительные материалы и подвал. Затем отдельно выпишите действия и переходы. Для перехода по адресу обычно нужна ссылка с href, для действия внутри интерфейса — button. Список однотипных предложений удобно описывать списком, сопоставление характеристик по строкам и столбцам — таблицей. div остаётся нормальным контейнером там, где дополнительного смысла нет.

Руководство W3C по структуре страницы связывает области и логические заголовки с навигацией по содержанию. Практический вывод: выбирать h2 ради размера шрифта нельзя. Уровень следует из вложенности темы; размер задаётся стилем. Несколько областей навигации стоит различать понятными названиями, например «Основная навигация» и «Разделы статьи».

Учебный пример: страница услуги ремонта

Представим вымышленную страницу с описанием услуги, этапами, ценами и вопросами. Её основной заголовок — название услуги. Этапы и цены являются соседними разделами второго уровня. Отдельная операция внутри раздела цен может иметь заголовок третьего уровня. Рекламная карточка в середине текста не получает высокий уровень только потому, что визуально крупнее.

Ссылка «Условия гарантии» ведёт на самостоятельную страницу. Кнопка «Показать расчёт» раскрывает результат на текущей. Если расчёт открывается в модальном окне, одного правильного тега мало: нужен отдельный сценарий фокуса и закрытия. Семантика даёт основу, но не реализует всю логику сложного виджета автоматически.

<main id="content">
  <h1>Ремонт оборудования</h1>
  <section aria-labelledby="steps-title">
    <h2 id="steps-title">Этапы работ</h2>
    <ol>
      <li>Диагностика</li>
      <li>Согласование сметы</li>
    </ol>
  </section>
  <a href="/guarantee/">Условия гарантии</a>
  <button type="button">Показать расчёт</button>
</main>

Это фрагмент структуры, а не готовый калькулятор. В реальном шаблоне идентификаторы должны оставаться уникальными. Если компонент раздела повторяется, генерация одинакового steps-title свяжет области с неправильным заголовком. Проверку уникальности включают в тест страницы, а не только изолированного компонента.

Не превращайте каждый контейнер в область

section полезен для тематической части документа, article — для относительно самостоятельного материала. Замена всех div на section создаёт шум. Названные области должны помогать найти значимый фрагмент, а не перечислять каждую рамку и отступ. header внутри статьи и общая шапка страницы также имеют разный контекст; механическая замена тегов не гарантирует ожидаемое дерево доступности.

Нативный элемент предпочтительнее имитации: role="button" сообщает роль, но сам по себе не добавляет клавиатурное поведение кнопки. По определению семантики в MDN, смысл элемента не определяется его визуальным оформлением. Поэтому исправление имитации лучше начинать с замены основы, затем проверять CSS и обработчики, а не добавлять всё новые ARIA-атрибуты.

Как провести рефакторинг без неожиданностей

Сначала зафиксируйте действующие сценарии: переходы, отправку форм, аналитику, порядок фокуса. Меняйте один тип компонента за раз. У button внутри формы явно задайте type="button", если он не отправляет данные. После замены проверьте стандартные стили браузера: новый тег может изменить рамку, шрифт или вертикальное выравнивание. У ссылки убедитесь, что обработчик не запрещает обычное открытие в новой вкладке.

Не меняйте логический порядок DOM только ради мобильного макета. Если CSS визуально переставляет карточки, чтение и клавиатурное перемещение могут идти по другому маршруту. На учебной странице этапы должны оставаться в последовательности «диагностика — смета», даже когда сетка перестраивается.

Проверка результата

  • Прочитайте страницу без стилей: порядок содержания и списков остаётся понятным.
  • Просмотрите заголовки отдельно: они образуют логическую иерархию, а не набор рекламных фраз.
  • Проверьте роли и доступные имена в дереве доступности браузера.
  • Пройдите действия клавиатурой, включая Enter и пробел там, где это ожидается.
  • Проверьте ссылки через контекстное меню и открытие в новой вкладке.
  • Прогоните HTML-валидатор и проверьте отсутствие вложенных интерактивных элементов.

Приёмка завершается сравнением поведения до и после изменения. Семантика не обещает прироста поисковых позиций и не заменяет полный аудит доступности. Её самостоятельный результат — понятная структура и предсказуемые базовые элементы, на которых проще строить интерфейс.

Официальные источники

Нужен план для вашего проекта? Напишите нам в Telegram или по электронной почте. Обсудим разработку, продвижение или поддержку сайта.

Читайте также