Gernar
Frontend DeveloperHTML и доступность

Интервью-вопрос

Что такое семантические теги

Семантические теги описывают роль частей страницы: где основное содержимое, навигация, самостоятельный блок или раздел. На практике это влияет на доступность, поддержку кода и риск неверной структуры, а не только на SEO.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше сказать, что такое семантические теги?

Вы сейчас отвечаете на базовый вопрос и не хотите свести ответ только к SEO.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Семантический тег отвечает на вопрос, что это за часть страницы. Он не говорит, как блок выглядит. Один и тот же визуальный блок можно сверстать по-разному. Правильный выбор зависит от смысла контента.

Например, меню сайта лучше описать как <nav>, основное содержимое как <main>, а нейтральную обертку для grid или flex как <div>. Так браузер, вспомогательные технологии и разработчики получают более точную информацию о структуре страницы.

На интервью важно не просто перечислить теги. Сильнее звучит мысль: семантика уменьшает количество ручных ролей, помогает навигации по странице и делает код честнее. Если роли у блока нет, не нужно выдумывать ее ради красивого HTML.

Как выбрать подходящий тег

Короткий алгоритм выбора

1Это основное содержимое страницы?
Используйте main. Обычно он один и не включает шапку, футер и глобальную навигацию.
2Это важный блок навигации?
Используйте nav. Если навигаций несколько, дайте им понятные подписи через aria-label или заголовок.
3Контент можно понять отдельно от страницы?
Используйте article для поста, новости, отзыва или карточки, которую можно переиспользовать в ленте.
4Это тематическая часть документа с собственным заголовком?
Используйте section. Если заголовка нет и смысла как раздела нет, section скорее всего лишний.
5Блок нужен только для сетки, отступов или группировки стилей?
Оставьте div. Лишняя семантика хуже нейтрального контейнера, потому что добавляет неверный смысл.

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

При этом не нужно превращать семантику в соревнование на меньшее число div. Нейтральный контейнер лучше, чем тег с неверной ролью. Ошибка в семантике может мешать пользователю скринридера быстрее, чем обычный <div> без роли.

Пример плохой и более безопасной разметки

Плохой пример: все важные части страницы спрятаны в одинаковых контейнерах. Визуально это может работать, но структура для доступности и поддержки почти не читается.

<!-- Плохо: смысл блоков есть только в class -->
<div class="header">
  <div class="menu">...</div>
</div>
<div class="content">
  <div class="post">...</div>
</div>
<div class="footer">...</div>

Лучше явно описать роли там, где они действительно есть.

<header>
  <nav aria-label="Основная навигация">...</nav>
</header>

<main>
  <article>
    <h1>Как выбрать тариф</h1>
    <p>...</p>
  </article>
</main>

<footer>...</footer>

В этом варианте пользователь может быстрее перейти к навигации или основному содержимому. Разработчик тоже видит структуру без чтения всех классов. Но если внутри <main> нужен контейнер только для отступов, там спокойно может остаться <div class="container">.

Семантика и доступность

Браузер строит DOM, а затем на его основе формирует accessibility tree. В это дерево попадают роли, имена, состояния и связи элементов. Семантические теги часто дают правильную роль автоматически.

Например, <nav> становится навигационной областью, <main> основной областью, а <button> интерактивной кнопкой с ожидаемой клавиатурной поддержкой. Если сделать кнопку через <div>, придется вручную добавить роль, tabIndex, обработку Enter и Space, состояние disabled и видимый фокус. Это больше кода и больше шансов получить UI, который работает мышью, но ломается для клавиатуры и скринридера.

В React это особенно легко спрятать в компоненте. Если компонент называется Button, но внутри рендерит <div>, проблема уедет во все места использования. Безопаснее, чтобы базовые компоненты рендерили нативные элементы и принимали правильные HTML-атрибуты.

Важно сказать спокойно: семантический HTML не решает всю доступность. Нужны еще подписи полей, правильный порядок фокуса, видимый focus state, тексты ошибок и понятные имена областей. Но без хорошей семантики база страницы становится слабее.

SEO и поддержка кода

Семантическая разметка может помогать поисковым системам лучше понимать структуру страницы, но не стоит продавать ее как магический SEO-инструмент. На интервью безопаснее сказать, что это один из факторов качества HTML, а не гарантия роста позиций.

Более практичный плюс для frontend-разработчика в поддержке. Когда в коде есть <main>, <nav>, <article> и понятные заголовки, проще менять страницу без поломки смысла. Когда все является <div>, роль блока приходится угадывать по className, CSS и соседнему коду.

Что сказать на интервью

Можно ответить так:

Семантические теги это элементы HTML, которые описывают назначение контента. Я использую main для основного содержимого, nav для навигации, header и footer для вводной и нижней части страницы или раздела, article для самостоятельного блока, section для тематического раздела. Это делает структуру понятнее, помогает доступности и уменьшает необходимость вручную добавлять роли через ARIA.

Если хотите усилить ответ, добавьте границу:

При этом я не заменяю все div на семантические теги. Если контейнер нужен только для layout или стилизации, div нормален. Опасно не отсутствие красивого тега, а неверная роль, которая создает шум в accessibility tree.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Выбирать тег по внешнему виду

    Нельзя брать <header> только потому, что блок находится сверху, или <section> только потому, что дизайнер нарисовал отдельную карточку. Семантика описывает роль контента. Без этого легко создать неверную структуру. Скринридер может представить обычный блок как важную область, хотя такого смысла там нет.

  2. 2

    Заменять все div на семантические теги

    <div> не является плохим тегом. Он подходит для контейнеров, сеток, wrappers и блоков без самостоятельного смысла. Если заменить каждый контейнер на <section> или <article>, страница станет шумной и менее понятной для вспомогательных технологий.

  3. 3

    Путать article и section

    <article> нужен для самостоятельного содержимого, а <section> для тематического раздела внутри документа. Если карточка продукта сама по себе не является публикацией или независимым материалом, <article> может быть лишним. На интервью удобно объяснить критерий: можно ли вынести блок отдельно и сохранить смысл.

  4. 4

    Считать ARIA заменой нормальному HTML

    ARIA помогает уточнить роль, имя или состояние, но не делает плохую разметку автоматически хорошей. Например, <button> уже поддерживает фокус, клавиатуру и ожидаемое поведение, а <div role="button"> требует доработок. Без них появится недоступный интерактивный элемент. Пользователь не сможет нормально попасть на него с клавиатуры или активировать Enter и Space. Безопаснее оставить нативный <button>, в том числе внутри React-компонента.

  5. 5

    Забывать про заголовки и подписи

    Семантический тег сам по себе не решает всю доступность. У разделов должны быть понятные заголовки. У нескольких навигаций нужны различимые имена. У форм нужны связанные label. Иначе дерево ролей есть, но пользователю все равно трудно понять, куда он попал.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми вас могут проверить по семантике HTML и доступности.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание