Интервью-вопрос
Что такое семантика в HTML
Семантика в HTML это выбор тегов по смыслу содержимого. На интервью покажите, что вы думаете не только о верстке, но и о доступности, клавиатуре, тестах и поддержке кода.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
Семантика отвечает на простой вопрос: что это за часть интерфейса по смыслу. Не какой у нее цвет. Не какой класс удобнее для CSS. А какую роль этот элемент играет для пользователя и документа.
Например, список ссылок на разделы сайта лучше описать как <nav>. Основную уникальную часть страницы лучше поместить в <main>. Отправку формы лучше делать через <button type="submit">, а не через кликабельный <div>.
На интервью можно сказать так: семантический HTML отвечает за смысловую структуру, а CSS отвечает за внешний вид. Если смешать эти слои, интерфейс может выглядеть нормально, но стать неудобным для клавиатуры, скринридера, автотестов и поддержки.
Почему это важно на практике
Семантика влияет не только на аккуратность кода. Нативные элементы уже дают готовое поведение. <button> получает фокус с клавиатуры и активируется Enter или Space. <label> связывает текст с полем формы. <h1> - <h6> создают структуру заголовков, по которой удобно перемещаться.
Это особенно важно для доступности. Скринридер строит представление страницы на основе дерева доступности. Если вся страница сделана из <div>, пользователю сложнее найти основное содержимое, навигацию, форму или кнопку.
Семантика помогает избежать и обычных UI-багов. Кнопка без type внутри формы может случайно отправить данные. Ссылка с href="#" вместо действия меняет URL, сбивает клавиатурную навигацию и портит аналитику клика. Правильный тег помогает выбрать нужное поведение еще до обработчиков.
Для команды это тоже практично. По разметке быстрее понятно, где навигация, где основной контент, где независимый блок, а где просто контейнер для раскладки. При рефакторинге меньше шансов случайно сломать поведение.
Как выбирать подходящий тег
Начинайте не со списка тегов, а с назначения блока. Если элемент что-то делает, чаще всего это кнопка. Если ведет по адресу, это ссылка. Если группирует поля ввода, нужны форма, label и связанные элементы. Если блок нужен только для grid или flex, семантический тег может быть лишним.
Как выбрать семантический элемент
Используйте <main>, обычно один видимый main на странице.Используйте <nav>, а при нескольких меню дайте им понятные aria-label.Используйте <article> для поста, новости, комментария или карточки с самостоятельным смыслом.Используйте <section> и добавьте заголовок или доступное имя.Оставьте <div> или <span>, не добавляйте лишнюю семантику.Пример плохой и безопасной разметки
Плохой вариант ниже может казаться рабочим, если проверять только мышью. Но по семантике он слабый. Навигация, основная область и действие спрятаны в обычных <div>. Пользователь с клавиатуры может не попасть на псевдокнопку. Скринридер не увидит нормальную структуру страницы. Ссылки нельзя будет открыть в новой вкладке или скопировать как обычный URL.
<!-- Плохо: смысл спрятан в class и onClick -->
<div class="header">
<div class="menu">
<span onclick="go('/')">Главная</span>
<span onclick="go('/pricing')">Тарифы</span>
</div>
</div>
<div class="content">
<div class="title">Настройки профиля</div>
<div class="save" onclick="saveProfile()">Сохранить</div>
</div>Безопаснее выбрать элементы по назначению. Внешний вид можно сделать таким же через CSS, но поведение и смысл будут правильнее. Если сохранение запускает запрос, отдельно добавьте состояние loading, disabled и обработку ошибки. Семантика не заменяет UI-состояния, но дает правильную основу для взаимодействия.
<header>
<nav aria-label="Основная навигация">
<a href="/">Главная</a>
<a href="/pricing">Тарифы</a>
</nav>
</header>
<main>
<h1>Настройки профиля</h1>
<button type="button" onclick="saveProfile()">Сохранить</button>
</main>В ответе на интервью не перечисляйте все теги HTML подряд. Лучше покажите принцип выбора и один пример, где неправильная разметка дает конкретный риск.
Роль div, span и ARIA
<div> и <span> не плохие элементы. Они нейтральные. Их нормально использовать для оберток, сетки, группировки без отдельного смысла или небольших inline-фрагментов.
Проблема начинается там, где нейтральный элемент заменяет подходящий нативный. Например, когда кнопку делают через <div>, ссылку через <span>, а поле формы оставляют без <label>.
ARIA не должна быть первым способом починить HTML. Правило native first обычно безопаснее: если есть подходящий нативный элемент, используйте его. ARIA добавляйте для уточнения имени, состояния или сложного виджета, когда нативной семантики не хватает.
Что сказать про SEO
Про SEO лучше говорить коротко и без обещаний. Семантическая разметка помогает поисковым системам лучше понимать структуру страницы: где заголовки, навигация, основной контент, повторяющиеся блоки. Но сама по себе она не гарантирует рост позиций.
На интервью формулируйте аккуратно: семантика полезна для машинного понимания документа, но главный frontend-риск обычно в доступности и поведении интерфейса. Такой ответ звучит точнее, чем фраза "семантика нужна для SEO".
Практический вывод для frontend-разработчика
Перед версткой задайте себе три вопроса. Что это за элемент по смыслу. Как пользователь будет с ним взаимодействовать. Есть ли нативный HTML-элемент, который уже дает нужную роль и поведение.
Если такой элемент есть, используйте его. Если нет, берите нейтральную обертку и добавляйте доступность осознанно. Так вы пишете код, который проще поддерживать и сложнее случайно сломать.
- 1Сверстать все блоки через div
- 2Добавить клики на неинтерактивные элементы
- 3Подписать смысл только через className
- 4Потом чинить клавиатуру и скринридеры вручную
- 1Определить смысл блока для пользователя
- 2Выбрать нативный HTML-элемент
- 3Проверить заголовки, label и порядок фокуса
- 4Добавлять ARIA только для недостающих состояний
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Делать интерактив через div
<div onClick>не становится кнопкой автоматически. У него нет нативного фокуса, клавиатурного поведения и понятной роли. Для действия используйте<button>, а если приходится делать кастомный элемент, добавьте роль,tabIndex, обработку Enter и Space, но лучше избегайте этого без необходимости. - 2
Называть семантику только SEO
SEO это только часть эффекта. Главный практический плюс для frontend-разработчика в доступности, предсказуемом поведении и понятной структуре для команды. Если сказать только про поисковики, ответ звучит поверхностно.
- 3
Использовать section как универсальный контейнер
<section>нужен для тематического раздела, а не для каждой обертки сетки. Если у блока нет темы и заголовка, чаще подходит<div>. Иначе страница получает шумную структуру, которая не помогает навигации. - 4
Путать ссылку и кнопку
<a>ведет к другому адресу или фрагменту страницы,<button>запускает действие. Если действие сделать ссылкой сhref="#", появляются лишние переходы, плохой UX с клавиатуры и нестабильные тесты. - 5
Исправлять HTML только через ARIA
ARIA может уточнить роль или состояние, но не заменяет нативное поведение.
role="button"не добавит отправку формы, фокус и обработку клавиш. Безопаснее выбрать правильный HTML-элемент с самого начала. - 6
Забывать type у кнопки в форме
У
<button>внутри формы по умолчанию типsubmit. Если кнопка открывает модалку, очищает поле или переключает вкладку, она может случайно отправить форму и вызвать лишний запрос. Для второстепенных действий пишите<button type="button">, а для отправки формы оставляйтеsubmitосознанно.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми проверяют понимание семантики, доступности и практических ограничений HTML.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Что такое HTML 😎
HTML описывает структуру и смысл содержимого страницы. В ответе важно связать разметку с DOM, доступностью, SEO и работой CSS и JavaScript.
Что такое семантические теги 😎
Семантические теги описывают смысл и роль частей страницы, а не только внешний вид. Разбираем, как ответить на интервью, когда выбирать header, main, nav, article, section и где div остается нормальным решением.