Menu

Семантическая верстка в HTML: теги, структура и доступность

Семантический HTML означает выбирать теги по тому, чем является содержимое, а не по тому, как оно выглядит. Разберем семантические теги разметки (header, nav, main, article, aside, footer), что они дают программам чтения с экрана и поисковикам и как проверить структуру страницы.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Что такое семантический HTML

Семантический HTML означает выбирать каждый тег по тому, чем является содержимое: навигация идет в <nav>, основное содержимое в <main>, запись блога в <article>. Теги выглядят как обычные блоки, но сообщают браузеру, программам чтения с экрана и поисковикам, что делает каждая часть страницы. Вот целая страница, собранная из семантических тегов разметки, где каждый обведен и подписан:

Удалите элемент <style>, и страница будет выглядеть как обычный текст, но структура останется для всех, кто читает код, и для программ, которые читают его, не глядя на пиксели.

Семантические теги разметки

ТегДля чегоОриентир для программ чтения с экрана
<header>Вступление страницы или статьи: логотип, заголовок, подпись автораbanner (только когда он не внутри article, aside, main, nav или section)
<nav>Блок основных навигационных ссылокnavigation
<main>Содержимое, уникальное для этой страницы, один раз на страницеmain
<article>Самостоятельный фрагмент, понятный сам по себе: запись, комментарий, карточка товарапо умолчанию нет
<section>Тематическая группа содержимого со своим заголовкомregion, только когда у него есть доступное имя
<aside>Связанный материал рядом с основным потоком: боковая панель, заметкаcomplementary
<footer>Завершающая информация страницы или статьи: копирайт, автор, ссылкиcontentinfo (только на уровне страницы)

У каждого тега есть отдельная страница с подробностями: header, nav, section и footer. Эта страница рассказывает, как они сочетаются.

Почему не просто div

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

Версия на div находит 0, семантическая версия находит 4. Именно это видят вспомогательные технологии: на семантической странице пользователь программы чтения с экрана может сразу перейти к навигации или основному содержимому, а на странице из div ему приходится прочитать все подряд. Имена классов вроде class="nav" для браузера ничего не значат.

<div> по-прежнему правильный выбор для блоков, которые нужны только для стилей или раскладки, как flex-обертка .cols в первом примере.

main, article и aside

<main> оборачивает то, что уникально для этой страницы, и встречается один раз. Внутри него <article> отмечает содержимое, которое имело бы смысл само по себе, если скопировать его на другой сайт, а <aside> отмечает материал, связанный со статьей, но который можно удалить, не сломав ее:

У статьи свои <header> и <footer>. Они не ограничены уровнем страницы: каждый из них открывает или завершает ближайшую статью или раздел. Элемент <time datetime> дает дату в машиночитаемом виде, а показывает ее в понятном человеку.

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

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

h4 под «Brewing» пропускает уровень. Замените его на h3, и структура станет чистой. Выбирайте уровни заголовков по структуре, а размер меняйте через CSS, если нужно крупнее или мельче.

Другие семантические теги

Семантика касается не только разметки страницы. Эти текстовые теги тоже несут смысл:

ТегСмысл
<strong>Важный текст (по умолчанию жирный)
<em>Смысловое ударение (по умолчанию курсив)
<figure> и <figcaption>Картинка, диаграмма или пример кода с подписью
<time datetime="...">Дата или время в машиночитаемом виде
<address>Контактные данные автора страницы или статьи
<mark>Выделенный текст, например совпадение при поиске
<abbr title="...">Сокращение с полной формой
<button>То, что выполняет действие

Наведите курсор на сокращение «W3C», чтобы увидеть полную форму во всплывающей подсказке.

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

  • Тег ради внешнего вида. <blockquote> нужен для цитат, а не для отступа; <h3> это уровень заголовка, а не средний жирный текст. Оформляйте через CSS.
  • Все обернуто в <section>. У раздела должны быть заголовок и тема. Если нужен блок для стилей, используйте <div>.
  • Больше одного видимого <main>. Оставьте один на страницу и никогда не вкладывайте его в <article>, <aside>, <header>, <nav> или <footer>.
  • Каждый список ссылок в <nav>. Оставьте его для основных блоков навигации, вроде меню сайта или оглавления. Нескольким ссылкам в подвале он не нужен.
  • Кликабельные элементы <div>. До <div onclick> нельзя добраться с клавиатуры. Используйте <button> для действий и <a href> для навигации.

Часто задаваемые вопросы

Что такое семантический HTML?

Семантический HTML это разметка, в которой каждый тег описывает смысл своего содержимого: <nav> для навигации, <article> для самостоятельного фрагмента, <button> для кнопки. Тогда браузер, программы чтения с экрана и поисковики понимают страницу, не угадывая по именам классов или стилям.

Какие семантические теги есть в HTML?

Теги разметки страницы: <header>, <nav>, <main>, <article>, <section>, <aside> и <footer>. К другим распространенным семантическим тегам относятся <figure>, <figcaption>, <time>, <address>, <strong>, <em> и заголовки от <h1> до <h6>.

Является ли div семантическим элементом?

Нет. У <div> нет собственного смысла; это универсальный блок для стилей и раскладки. Используйте его, когда не подходит ни один семантический тег, а <header>, <main>, <nav> и остальные, когда подходит.

Для чего нужен тег aside?

<aside> содержит материал, связанный с основным содержимым, но не входящий в его поток: боковую панель, блок связанных ссылок, пояснение к термину или выносную цитату. На уровне страницы программы чтения с экрана перечисляют его как дополнительный ориентир (complementary).

Сколько элементов main может быть на странице?

Один видимый <main> на страницу. Он оборачивает содержимое, уникальное для этой страницы, и не должен находиться внутри <header>, <nav>, <article>, <aside> или <footer>.

Помогает ли семантическая верстка SEO?

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

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ