Техническое SEO
Семантические теги HTML5: полное руководство с примерами

Семантические теги HTML5 — это фундамент правильной разметки страницы: они объясняют браузеру, поисковику и скринридеру, что находится на странице, не требуя CSS-классов или комментариев. Разбираем все ключевые теги, показываем правильную вложенность, типичные ошибки и реальное влияние семантики на SEO и доступность.
До HTML5 веб состоял из div и span с CSS-классами вроде .header, .sidebar, .footer. Поисковые роботы и скринридеры вынуждены были угадывать, что есть что. HTML5 ввёл семантические теги — элементы, несущие смысл сами по себе, независимо от CSS. Тег <article> означает самостоятельный материал. Тег <nav> — навигация. Тег <aside> — дополнительный контент, связанный с основным, но необязательный для понимания.
Структурные теги страницы
HTML5 ввёл набор тегов для разметки крупных регионов страницы. Они формируют скелет документа, который браузер, поисковик и вспомогательная технология могут обойти без чтения CSS.
- <header>
- Вводная часть ближайшего секционного контекста — страницы или раздела. На уровне страницы — шапка с логотипом, навигацией, поиском. Внутри <article> — заголовок, метаданные, автор. Может быть несколько <header> на странице, если они в разных секциях.
- <nav>
- Блок навигационных ссылок. Не каждый набор ссылок — <nav>. Только основные навигационные маршруты: главное меню, хлебные крошки, пагинация. Ссылки в подвале на политику конфиденциальности — не <nav>. Скринридеры используют <nav> для быстрого перехода к навигации.
- <main>
- Уникальный основной контент страницы. Только один <main> на документ. Содержимое <main> не должно повторяться на других страницах сайта (шапка, подвал, боковая панель — повторяются, поэтому они вне <main>). Скринридеры прыгают прямо к <main> по горячей клавише.
- <footer>
- Подвал ближайшего секционного контекста. На уровне страницы — контакты, копирайт, ссылки. Внутри <article> — информация об авторе, теги, дата обновления. Как и <header>, может присутствовать в нескольких секциях.
- <article>
- Самостоятельный, независимо распространяемый материал: статья блога, новость, пост форума, карточка товара, комментарий. Ключевой тест: если вырвать <article> из контекста и опубликовать отдельно — он будет иметь смысл? Если да — это <article>.
- <section>
- Тематически однородный раздел документа, у которого нет более специфичного тега. Всегда должна иметь заголовок (<h2>–<h6>). Если заголовка нет — скорее всего нужен <div>. Не используйте <section> как замену <div> для стилизации.
- <aside>
- Контент, косвенно связанный с основным: врезки, боковые панели, рекламные блоки, биографии авторов, связанные материалы. Внутри <article> — примечание, цитата, не критичная для понимания основного текста. На уровне страницы — боковая колонка.
Базовый скелет любой страницы выглядит так — и это уже семантически корректная разметка:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Название страницы</title>
</head>
<body>
<header>
<a href="/"><img src="logo.svg" alt="Название компании"></a>
<nav aria-label="Основная навигация">
<ul>
<li><a href="/blog">Блог</a></li>
<li><a href="/services">Услуги</a></li>
<li><a href="/contacts">Контакты</a></li>
</ul>
</nav>
</header>
<main>
<!-- Уникальный контент страницы -->
</main>
<footer>
<p>© 2026 Название компании</p>
<nav aria-label="Вспомогательная навигация">
<a href="/privacy">Конфиденциальность</a>
<a href="/sitemap">Карта сайта</a>
</nav>
</footer>
</body>
</html>Теги для контента: article, section, h1–h6, p
Теги структурного уровня задают регионы страницы. Теги уровня контента описывают природу самого содержимого. Разберём комбинацию, которая встречается на каждой странице блога.
<!-- Страница статьи блога -->
<main>
<article>
<header>
<h1>Как выбрать правильный тег HTML</h1>
<p>Опубликовано: <time datetime="2026-05-22">22 мая 2026</time></p>
<address>
Автор: <a rel="author" href="/authors/pavlo">Павел Борушко</a>
</address>
</header>
<section>
<h2>Почему семантика важна</h2>
<p>Текст раздела...</p>
</section>
<section>
<h2>Основные теги</h2>
<p>Текст раздела...</p>
<aside>
<p>Примечание: спецификация HTML Living Standard обновляется постоянно.</p>
</aside>
</section>
<footer>
<p>Теги: <a href="/tags/html">#html</a>, <a href="/tags/seo">#seo</a></p>
</footer>
</article>
<!-- Связанные статьи -->
<aside aria-label="Связанные материалы">
<h2>Читать также</h2>
<ul>
<li><a href="/blog/heading-structure">Структура заголовков</a></li>
<li><a href="/blog/schema-org-json-ld">Schema.org разметка</a></li>
</ul>
</aside>
</main>Когда section, а когда div
Правило простое: если у блока есть смысловое имя — это <section>. Если блок нужен только для стилизации или JavaScript-хука — это <div>.
<!-- ПРАВИЛЬНО: section с заголовком -->
<section>
<h2>Преимущества продукта</h2>
<ul>
<li>Быстрая доставка</li>
<li>Гарантия 2 года</li>
</ul>
</section>
<!-- ПРАВИЛЬНО: div для стилизации -->
<div class="cards-grid">
<article>...</article>
<article>...</article>
<article>...</article>
</div>
<!-- НЕПРАВИЛЬНО: section без заголовка -->
<section class="cards-grid">
<article>...</article>
</section>
<!-- НЕПРАВИЛЬНО: div там, где есть смысл -->
<div id="about">
<!-- Раздел «О компании» — нужен <section> -->
<h2>О компании</h2>
<p>...</p>
</div>Медиа, данные и утилитарные теги
HTML5 добавил теги для конкретных типов данных — они дают поисковикам дополнительные сигналы без Schema.org разметки.
<figure> и <figcaption>
Самостоятельный медиа-контент с подписью. Изображения, диаграммы, таблицы, фрагменты кода — всё, что связано с основным текстом, но может быть перемещено или вынесено в приложение без потери смысла. <figcaption> — официальная подпись к <figure>. Google использует <figcaption> как альтернативное описание изображения при анализе изображений.
<time>
Машиночитаемая дата или время. Атрибут datetime в формате ISO 8601 позволяет поисковику точно определить дату публикации или события независимо от отображаемого формата. Google явно рекомендует использовать <time> для дат статей при разметке типа Article.
<address>
Контактная информация для ближайшего <article> или документа в целом. Внутри <article> — контакты автора. На уровне страницы — контакты компании. Не используйте <address> для обычных почтовых адресов вне контекста контактной информации автора или организации.
<details> и <summary>
Нативный раскрывающийся виджет без JavaScript. <summary> — видимый заголовок. <details> — скрытое содержимое. Браузер обрабатывает open/close автоматически. Поисковики индексируют содержимое <details> даже в закрытом состоянии. Отлично подходит для FAQ и спойлеров.
<mark>
Выделение текста как релевантного в текущем контексте — например, результатов поиска или ключевых слов в цитате. Не путайте с <strong> (важность) и <em> (акцент). <mark> — это «помечено как релевантное», а не «важно» или «выделено для красоты».
<data> и <output>
<data value="42">Сорок два</data> — связывает человекочитаемый текст с машиночитаемым значением. <output> — результат вычисления или действия пользователя. Оба тега редко используются в контентных сайтах, но незаменимы в веб-приложениях с формами и калькуляторами.
<figure> с подписью:<!-- figure + figcaption для изображения -->
<figure>
<img
src="/images/html5-structure.webp"
alt="Схема семантической структуры HTML5 страницы"
width="800" height="450"
>
<figcaption>Рис. 1 — Типичная семантическая структура HTML5 документа</figcaption>
</figure>
<!-- figure + figcaption для кода -->
<figure>
<pre><code class="language-html"><article>...</article></code></pre>
<figcaption>Пример: минимальная разметка статьи</figcaption>
</figure>
<!-- time с атрибутом datetime -->
<p>
Статья обновлена:
<time datetime="2026-05-22T10:30:00+03:00">22 мая 2026</time>
</p>
<!-- details + summary (FAQ без JS) -->
<details>
<summary>Что такое семантический HTML?</summary>
<p>Разметка, где каждый тег передаёт смысл содержимого,
а не только его внешний вид.</p>
</details>
<!-- mark для выделения поиска -->
<p>Результаты по запросу «<mark>семантические теги</mark>» — 42 статьи</p>Вложенность и комбинации: реальные примеры
Семантическая сила HTML5 раскрывается не в отдельных тегах, а в их правильной комбинации. Разберём типичные архитектуры страниц.
Страница листинга блога
<main>
<header>
<h1>Блог о SEO</h1>
<p>Практические статьи о продвижении сайтов</p>
</header>
<!-- Список статей — каждая карточка это article -->
<section aria-label="Список статей">
<article>
<header>
<h2><a href="/blog/semantic-html5">Семантические теги HTML5</a></h2>
<p>
<time datetime="2026-05-22">22 мая 2026</time>
· <span>18 мин чтения</span>
</p>
</header>
<p>Семантические теги HTML5 — фундамент правильной разметки страницы...</p>
<footer>
<a href="/blog/semantic-html5">Читать далее</a>
</footer>
</article>
<article>
<header>
<h2><a href="/blog/heading-structure">Структура заголовков</a></h2>
<p>
<time datetime="2026-04-10">10 апреля 2026</time>
· <span>12 мин чтения</span>
</p>
</header>
<p>H1 на странице один. H2 делит контент на разделы...</p>
<footer>
<a href="/blog/heading-structure">Читать далее</a>
</footer>
</article>
</section>
<!-- Пагинация -->
<nav aria-label="Пагинация">
<a href="?page=1" aria-current="page">1</a>
<a href="?page=2">2</a>
<a href="?page=3">3</a>
</nav>
</main>Карточка товара с отзывами
<main>
<article itemscope itemtype="https://schema.org/Product">
<!-- Главная часть товара -->
<header>
<h1 itemprop="name">Беспроводные наушники SoundMax Pro</h1>
<p itemprop="description">40 часов без подзарядки, активное шумоподавление...</p>
</header>
<!-- Изображение товара -->
<figure>
<img
src="/products/soundmax-pro.webp"
alt="Беспроводные наушники SoundMax Pro — вид спереди"
itemprop="image"
width="600" height="600"
>
<figcaption>SoundMax Pro в трёх цветах: чёрный, белый, синий</figcaption>
</figure>
<!-- Цена -->
<section aria-label="Цена и покупка">
<p>
<data value="9990" itemprop="price">9 990 ₽</data>
</p>
<button type="button">Добавить в корзину</button>
</section>
<!-- Характеристики -->
<section>
<h2>Характеристики</h2>
<dl>
<dt>Время работы</dt><dd>40 часов</dd>
<dt>Подключение</dt><dd>Bluetooth 5.3</dd>
<dt>Вес</dt><dd>250 г</dd>
</dl>
</section>
<!-- Блок отзывов — каждый отзыв это article внутри article -->
<section aria-label="Отзывы покупателей">
<h2>Отзывы</h2>
<article>
<header>
<strong>Анна К.</strong>
<time datetime="2026-04-15">15 апреля 2026</time>
</header>
<p>Отличные наушники, звук чистый. Шумодав работает отлично.</p>
</article>
<article>
<header>
<strong>Михаил Р.</strong>
<time datetime="2026-03-28">28 марта 2026</time>
</header>
<p>40 часов — это реально. Брал в командировку, хватило на неделю.</p>
</article>
</section>
</article>
</main>Лендинг с секциями и боковой панелью
<body>
<header>
<nav aria-label="Основная навигация">
<!-- логотип + меню -->
</nav>
</header>
<main>
<!-- Hero-секция -->
<section aria-labelledby="hero-title">
<h1 id="hero-title">SEO-продвижение для вашего бизнеса</h1>
<p>Увеличиваем органический трафик с гарантией результата</p>
<a href="#contacts" role="button">Получить аудит</a>
</section>
<!-- Услуги -->
<section>
<h2>Наши услуги</h2>
<ul role="list">
<li>
<article>
<h3>Технический аудит</h3>
<p>Полная проверка технического состояния сайта...</p>
</article>
</li>
<li>
<article>
<h3>Контентная стратегия</h3>
<p>Семантическое ядро и план публикаций...</p>
</article>
</li>
</ul>
</section>
<!-- Основной контент + боковая панель -->
<div class="layout-two-col">
<section>
<h2>Кейсы</h2>
<!-- ... -->
</section>
<aside aria-label="Контакты">
<h2>Связаться с нами</h2>
<address>
<p>Email: <a href="mailto:[email protected]">[email protected]</a></p>
<p>Telegram: <a href="https://t.me/seohead">@seohead</a></p>
</address>
</aside>
</div>
</main>
<footer>
<nav aria-label="Карта сайта">
<ul>
<li><a href="/blog">Блог</a></li>
<li><a href="/glossary">Глоссарий</a></li>
</ul>
</nav>
<p><small>© 2026 seohead.tech</small></p>
</footer>
</body>Несколько <nav> на странице: хлебные крошки и пагинация
<!-- Можно иметь несколько <nav> — важно различать их через aria-label -->
<!-- Хлебные крошки -->
<nav aria-label="Хлебные крошки">
<ol>
<li><a href="/">Главная</a></li>
<li><a href="/blog">Блог</a></li>
<li aria-current="page">Семантические теги HTML5</li>
</ol>
</nav>
<!-- Основная навигация в <header> -->
<nav aria-label="Основная навигация">
<ul>
<li><a href="/blog" aria-current="page">Блог</a></li>
<li><a href="/services">Услуги</a></li>
</ul>
</nav>
<!-- Пагинация в конце листинга -->
<nav aria-label="Страницы блога">
<a href="?page=1" rel="prev" aria-label="Предыдущая страница">←</a>
<a href="?page=1">1</a>
<span aria-current="page">2</span>
<a href="?page=3">3</a>
<a href="?page=3" rel="next" aria-label="Следующая страница">→</a>
</nav>
<!-- Внутристраничная навигация (оглавление) -->
<nav aria-label="Содержание статьи">
<ol>
<li><a href="#structural-tags">Структурные теги</a></li>
<li><a href="#content-tags">Теги для контента</a></li>
<li><a href="#nesting-examples">Примеры вложенности</a></li>
</ol>
</nav>Влияние на SEO: что реально получает поисковик
Семантическая разметка напрямую влияет на то, как Googlebot понимает, индексирует и представляет страницу в результатах поиска. Вот конкретные механизмы.
Выделение главного контента
Google использует <main> для определения основного контента страницы. Контент в шапке, подвале и <aside> получает меньший вес при ранжировании. Если весь текст находится в <div class="main">, Google тратит дополнительный ресурс на понимание структуры.
Атрибуция даты и автора
Тег <time datetime="2026-05-22"> даёт Google точную дату публикации, что влияет на понимание свежести контента. <address> с rel="author" связывает статью с автором. Оба сигнала используются при формировании rich snippets в поиске.
Расширенные сниппеты
<details> + <summary> индексируются Google и могут появляться как раскрывающиеся блоки в результатах поиска (People Also Ask). <figure> + <figcaption> влияют на индексацию изображений и их отображение в Google Images.
Внутренняя перелинковка
Ссылки внутри <nav> получают навигационный контекст. Ссылки внутри <article> — контентный. Googlebot учитывает положение ссылки на странице при оценке её веса. Ссылка из основного текста <article> ценнее ссылки из <aside>.
Частые ошибки в семантической разметке
Большинство ошибок возникает из привычки к div-вёрстке или из неправильного понимания назначения тегов.
<!-- ОШИБКА 1: <section> вместо <div> для стилизации -->
<section class="flex-wrapper"> <!-- нет заголовка = не section -->
<img src="photo.jpg" alt="">
</section>
<!-- ПРАВИЛЬНО -->
<div class="flex-wrapper">
<img src="photo.jpg" alt="Описание фото">
</div>
<!-- ОШИБКА 2: <article> для карточки без самостоятельного смысла -->
<article class="feature-card">
<span class="icon">⚡</span>
<h3>Быстрая доставка</h3>
</article>
<!-- ПРАВИЛЬНО: карточка-преимущество — это li или div, не article -->
<li class="feature-card">
<span class="icon" aria-hidden="true">⚡</span>
<h3>Быстрая доставка</h3>
</li>
<!-- ОШИБКА 3: <header> как синоним <div class="header"> -->
<header class="section-header">
<h2>Наши преимущества</h2>
</header>
<!-- ПРАВИЛЬНО: <header> нужен только если у секции есть вводная группа -->
<section>
<h2>Наши преимущества</h2> <!-- h2 сразу, без header-обёртки -->
...
</section>
<!-- ОШИБКА 4: два <main> -->
<main>Основной контент</main>
<main>Тоже важный контент</main> <!-- невалидно! -->
<!-- ПРАВИЛЬНО: один <main>, дополнительное — в <aside> -->
<main>Основной контент</main>
<aside>Дополнительный контент</aside>
<!-- ОШИБКА 5: <address> для адреса офиса в тексте -->
<address>ул. Ленина, 1, Москва</address> <!-- не в контексте автора/организации -->
<!-- ПРАВИЛЬНО -->
<p>Адрес офиса: ул. Ленина, 1, Москва</p>
<!-- или в footer как контактная информация сайта: -->
<footer>
<address>
<a href="mailto:[email protected]">[email protected]</a>
</address>
</footer>Ещё одна частая проблема — пустые alt-атрибуты или их отсутствие. Изображения внутри <figure> должны иметь либо осмысленный alt, либо alt="" (если изображение декоративное и описано <figcaption>). Никогда не опускайте атрибут alt полностью — это нарушение доступности и HTML-валидации.
<!-- Декоративное изображение: alt пустой, figcaption описывает -->
<figure>
<img src="chart.png" alt="" role="presentation">
<figcaption>График роста органического трафика за 6 месяцев: +340%</figcaption>
</figure>
<!-- Информативное изображение: alt полный -->
<figure>
<img
src="html5-tags-map.png"
alt="Карта семантических тегов HTML5: header, nav, main, article, section, aside, footer"
>
<figcaption>Рис. 2 — Полная карта семантических элементов HTML5</figcaption>
</figure>
<!-- Ошибка: нет alt совсем -->
<img src="diagram.png"> <!-- невалидно! -->