Кратко
СкопированоСемантическая вёрстка — особый подход к написанию HTML-разметки страниц. При этом подходе разработчик опирается не на содержание сайта, а на смысловое предназначение каждого блока и логическую структуру страницы.
Семантические теги
СкопированоВ современном стандарте HTML есть большое количество семантических тегов под разные логические блоки веб-документа. Приведу список семантических тегов, разделяющих HTML-документ на секции:
<article>— тег для создания самостоятельных блоков контента. Его содержимое может быть карточкой статьи в блоге, карточкой товара, рекламным баннером и любым другим самодостаточным логическим блоком.<aside>— тег для дополнительного контента, используется для создания «сайдбара» или бокового меню на сайтах.<nav>— контейнер для навигации со ссылками на другие страницы и разделы сайта.<section>— логический контейнер для объединения содержимого по смыслу. Его часто путают с<article>.<section>используют для отделения одной смысловой части от другой, а<article>— самодостаточный контейнер со своим содержимым.<main>— контейнер для основного содержимого страницы.<header>— тег для выделения вводного содержимого или навигации. Не привязан к конкретному месту страницы или внутри её отдельной секции, но традиционно используется для создания основной навигации по сайту — «шапки». Также можно использовать для оборачивания оглавления раздела, заголовка статьи с вводной информацией о ней и т. д.<footer>— тег с информацией о разделе. Например, это могут быть данные о том, когда была написана статья, её авторе и пр. Тоже не имеет жёсткой привязки к положению на странице или отдельной секции, к которой относится.
К примеру, здесь у <article> есть дата начала старта курса, которую можно поместить в «подвал» карточки:
<article> <header> <h2>SEO для начинающих</h2> <span class="author">Иван Иванович</span> </header> <p> Благодаря этому курсу вы научитесь задавливать конкурентов с помощью ссылочной массы, а не качественного контента. </p> <footer> <time datetime="2023-02-13"> 13 февраля 2023 </time> </footer></article>
<article>
<header>
<h2>SEO для начинающих</h2>
<span class="author">Иван Иванович</span>
</header>
<p>
Благодаря этому курсу вы научитесь задавливать конкурентов
с помощью ссылочной массы, а не качественного контента.
</p>
<footer>
<time datetime="2023-02-13">
13 февраля 2023
</time>
</footer>
</article>
Кроме семантических тегов, выделяющих целые разделы документа, есть ещё и контентные. Например:
<h1>-<h6>— для определения заголовков на странице.<h1>используют для заголовка в документе, который является основным для всего документа или раздела. Остальные теги служат для подзаголовков, которая обозначает иерархию и структуру содержимого.<button>— для кнопок. Можно использовать для отправки форм, выполнения команд или вызова функций через JavaScript.<img>— для вставки изображений в документ.<table>— для таблиц. Состоят из нескольких элементов для структурирования данных:<tr>для строк,<th>для заголовочных ячеек и<td>для стандартных ячеек.<ul>— определяет неупорядоченный список, который обычно отображается с маркерами.<a>— для ссылок, с помощью которых пользователи переходят от одного документа к другому.<p>— для абзаца текста. Абзацы являются основными блоками текста в HTML и используются для разделения содержимого на управляемые и логически разграниченные секции. Они упрощают чтение и делают текст понятным.
Список всех тегов найдёте в HTML Living Standard.
Почему важна семантика
СкопированоРассмотрим причины, зачем нужна семантическая вёрстка.
Поддержка и читаемость кода
СкопированоПри использовании семантических тегов легче поддерживать исходный код проекта. Куда удобнее ориентироваться в коде, если он состоит из семантических тегов. Так любому члену команды будет понятна логика и структура интерфейса.
Семантические теги экономят время разработчиков и уменьшают количество строк кода в файлах. Например, в <button> и <input> уже встроены обработчики событий, которые не нужно предусматривать разработчику. К примеру, чтобы воспроизвести нативное поведение кнопки, нужно слушать события keydown при нажатии на Enter и keyup для пробела и Enter.
Доступность
СкопированоСемантика — основа доступных интерфейсов. Зрячим пользователям часто легче ориентироваться по сайту, чем тем, кто его не видит. Люди со слепотой и слабовидящие используют скринридеры и экранные лупы для чтения содержимого страницы. В этом случае семантическая HTML-разметка улучшает их пользовательский опыт и не создаёт барьеры, из-за которых люди с инвалидностью не могут пользоваться сайтом в принципе.
Дело в том, что в семантические теги уже встроены роли, состояния и свойства. Роли помогают пользователям вспомогательных технологий понять, что это за элемент, и как им управлять. Состояния и свойства дают дополнительную информацию об элементах интерфейса. Например, скринридер расскажет про <button>, что это кнопка, а пользователи голосового управления кликнут по ней с помощью команды «кнопка, клик». У чекбоксов есть состояния checked и unchecked. Благодаря им не только визуально, но и на слух понятно, какой чекбокс выбран, а какой нет. Пример свойства — уровень заголовка. У тегов <h1>−<h6> есть свойство level по умолчанию. Скринридеры зачитывают уровень заголовка вместе с его ролью: заголовок первого уровня или заголовок четвёртого уровня.
Другая важная часть семантики — улучшение навигации для скринридеров. Теги вроде <header> и <footer> — ориентиры. Это значит, что пользователи могут быстро перемещаться по ним с помощью особых горячих клавиш. Дополнительно можно открыть список со всеми ориентирами со страницы, а также с заголовками, кнопками и ссылками. Кстати, перемещение по заголовкам в мире скринридеров — один из самых популярных методов поиска информации по странице.
Семантическая вёрстка также помогает избежать переписывания кода (рефакторинга) в будущем, если начнёте улучшать доступность сайта.
Напоследок, не придётся оптимизировать сайт под режим принудительных цветов. Самая популярная разновидность — режим высокой контрастности в Windows. В нём цвета в системе и на сайтах ограничиваются до небольшой палитры. Eсли кнопка свёрстана на <div>, в таком режиме система не заменит ваш цвет на системный.
Поисковая оптимизация
СкопированоСемантика нужна и для поисковой оптимизации сайтов, которую коротко называют SEO. Уровень доступности сайта сам по себе — один из факторов ранжирования в поисковых системах. Правильное использование семантических тегов приводит к более доступному интерфейсу для пользователей и при этом помогает обходить другие в поисковой выдаче.
Семантическая вёрстка помогает и самим поисковым движкам. Они не понимают сам текст, его контекст и то, насколько он важен. Семантические теги дают поисковым системам нужный контекст, помогают понять содержимое сайта и проиндексировать его относительно других со схожей тематикой. При этом хорошие альтернативные описания alt к картинкам и закрытые субтитры к видео в <track> дают поисковым роботам ещё больше информации. Это поможет сайту попасть и в текстовую поисковую выдачу, и в выдачу при поиске по картинкам.
Структура сайта и соответствующие семантические теги не влияют на положение в выдаче, но повышают вероятность перехода на сайт. Например, в Google под название сайта попадают заголовки второго уровня, если используете тег <h2>. Пользователям легче понять структуру сайта и сделать выбор в его пользу, особенно когда на других сайтов вообще нет заголовков.
Навигация по сайту — важный фактор для продвижения сайта и простой способ повлиять на построение внутренних ссылок. Навигация <nav> со списком ссылок <a> в меню и футере поможет быстрее попасть в выдачу, чем ссылки в основной части страниц.
Пара полезных ссылок:
- Intro To Why Accessibility is Important for Good SEO.
- SEO and Accessibility Are Symbiotic.
- 7 tactics that benefit both accessibility and SEO.
- Accessibility is the Future of Search.
Как семантически разметить страницу
СкопированоРазберём по шагам.
Первый шаг. Смотрим на крупные блоки всего сайта и выделяем их под теги для блоков. Например, <header>, <footer>, <main>, <nav> или <aside>. Обычно эти блоки повторяются на всех страницах.
Можете использовать правило большого пальца. Если тянет добавить к <div> классы вроде header, sidebar, content, post и footer, лучше использовать теги <header>, <aside>, <main>, <article> и <footer>.

Второй шаг. Смотрим на содержимое страницы. Исходя из него размечаем заголовки <h1>-<h6>. Общепринято делать всего один заголовок первого уровня <h1> на странице. Также помните о правильном порядке заголовков.
Разберём на примере. На странице всего один заголовок первого уровня. Заголовки третьего уровня находятся в том же блоке, что и заголовок <h2>, являясь его подзаголовками. Третьей секцией снова идёт <h2> уже со своим содержимым.
<main> <section> <h1></h1> <p></p> </section> <section> <h2></h2> <p></p> <h3></h3> <p></p> <h3></h3> <p></p> </section> <section> <h2></h2> <p></p> </section></main>
<main>
<section>
<h1></h1>
<p></p>
</section>
<section>
<h2></h2>
<p></p>
<h3></h3>
<p></p>
<h3></h3>
<p></p>
</section>
<section>
<h2></h2>
<p></p>
</section>
</main>
Третий шаг. Обращаем внимание на небольшие смысловые разделы страницы. Списки, таблицы, примеры кода, параграфы текста, цитаты и похожие элементы оборачиваются в свои теги.
Четвёртый шаг. Разбираемся с самыми мелкими элементами: кнопками, временем, изображениями, ссылками, видео и тому подобным.
Примеры
СкопированоВёрстка с <div> и <span>
СкопированоЧасть разработчиков может подумать, что использовать теги для кнопок, изображений, ссылок, видео, таблиц и списков излишне. До сих пор часто замечаю, что многие используют <div> даже для вёрстки этих базовых блоков.
Давайте на примере разберёмся, как можно сверстать двумя способами: с семантикой и без. Для начала без семантики:
Не будем уделять внимание стилям, приведём только HTML-код из демо:
<div class="container"> <div class="header"> <div class="nav"> <a href="#" class="nav__item">Главная</a> <a href="#" class="nav__item">Блог</a> <a href="#" class="nav__item">Контакты</a> </div> </div> <div class="main"> <span class="heading">Курсы компании «Гарцующий пони»</span> <div class="wrapper"> <div class="card"> <div class="card__header"> <span class="card__heading">SEO для начинающих</span> <span class="card__author">Иван Иванович</span> </div> <div class="card__content"> <img src="./images/seo-course.png" alt="" class="card__img" decoding="async" > <span class="card__description"> Благодаря этому курсу вы научитесь задавливать конкурентов с помощью ссылочной массы, а не качественного контента. </span> </div> <div class="card__footer"> <span>13 февраля 2023</span> </div> </div> <div class="card"> <div class="card__header"> <span class="card__heading"> WordPress разработка </span> <span class="card__author">Ольга Ольгина</span> </div> <div class="card__content"> <img src="./images/wordpress-course.png" alt="" class="card__img" decoding="async" > <span class="card__description"> WordPress — топ за свои деньги. Изучите его, чтобы стать востребованным фрилансером. </span> </div> <div class="card__footer"> <span>23 октября 2023</span> </div> </div> <div class="card"> <div class="card__header"> <span class="card__heading">JavaScript для чайников</span> <p class="card__author">М. Михайловских</p> </div> <div class="card__content"> <img src="./images/javascript-course.png" alt="" class="card__img" decoding="async" > <span class="card__description"> Курс подойдёт для любых чайников: электрических, газовых и даже для кастрюлек, временно подменяющих сломанный чайник. </span> </div> <div class="card__footer"> <span>30 ноября 2023</span> </div> </div> </div> </div> <div class="footer"> <span class="copyright"> 2023. Разработано компанией <a class="copyright__link" href="#">«Гарцующий пони»</a> </span> </div></div>
<div class="container">
<div class="header">
<div class="nav">
<a href="#" class="nav__item">Главная</a>
<a href="#" class="nav__item">Блог</a>
<a href="#" class="nav__item">Контакты</a>
</div>
</div>
<div class="main">
<span class="heading">Курсы компании «Гарцующий пони»</span>
<div class="wrapper">
<div class="card">
<div class="card__header">
<span class="card__heading">SEO для начинающих</span>
<span class="card__author">Иван Иванович</span>
</div>
<div class="card__content">
<img
src="./images/seo-course.png"
alt=""
class="card__img"
decoding="async"
>
<span class="card__description">
Благодаря этому курсу вы научитесь задавливать конкурентов
с помощью ссылочной массы, а не качественного контента.
</span>
</div>
<div class="card__footer">
<span>13 февраля 2023</span>
</div>
</div>
<div class="card">
<div class="card__header">
<span class="card__heading">
WordPress разработка
</span>
<span class="card__author">Ольга Ольгина</span>
</div>
<div class="card__content">
<img
src="./images/wordpress-course.png"
alt=""
class="card__img"
decoding="async"
>
<span class="card__description">
WordPress — топ за свои деньги. Изучите его, чтобы стать
востребованным фрилансером.
</span>
</div>
<div class="card__footer">
<span>23 октября 2023</span>
</div>
</div>
<div class="card">
<div class="card__header">
<span class="card__heading">JavaScript для чайников</span>
<p class="card__author">М. Михайловских</p>
</div>
<div class="card__content">
<img
src="./images/javascript-course.png"
alt=""
class="card__img"
decoding="async"
>
<span class="card__description">
Курс подойдёт для любых чайников: электрических, газовых
и даже для кастрюлек, временно подменяющих сломанный чайник.
</span>
</div>
<div class="card__footer">
<span>30 ноября 2023</span>
</div>
</div>
</div>
</div>
<div class="footer">
<span class="copyright">
2023. Разработано компанией
<a class="copyright__link" href="#">«Гарцующий пони»</a>
</span>
</div>
</div>
Семантическая вёрстка
СкопированоВ предыдущем примере не использовались семантические элементы и всё свёрстано только на <div> и <span>. Теперь пример корректной семантической вёрстки:
Посмотрим на исходный код корректной семантической вёрстки:
<header class="header"> <nav class="nav"> <a href="#" class="nav__item">Главная</a> <a href="#" class="nav__item">Блог</a> <a href="#" class="nav__item">Контакты</a> </nav></header><main class="main"> <h1 class="heading">Курсы компании «Гарцующий пони»</h1> <div class="wrapper"> <article class="card"> <header class="card__header"> <h2 class="card__heading">SEO для начинающих</h2> <p class="card__author">Иван Иванович</p> </header> <div class="card__content"> <img src="./images/seo-course.png" alt="" class="card__img" decoding="async" > <p class="card__description"> Благодаря этому курсу вы научитесь задавливать конкурентов с помощью ссылочной массы, а не качественного контента. </p> </div> <footer class="card__footer"> <time class="card__date" datetime="2023-02-13" > 13 февраля 2023 </time> </footer> </article> <article class="card"> <header class="card__header"> <h2 class="card__heading">WordPress разработка</h2> <p class="card__author">Ольга Ольгина</p> </header> <div class="card__content"> <img src="./images/wordpress-course.png" alt="" class="card__img" decoding="async" > <p class="card__description"> WordPress — топ за свои деньги. Изучите его, чтобы стать востребованным фрилансером. </p> </div> <footer class="card__footer"> <time class="card__date" datetime="2023-10-23" > 23 октября 2023 </time> </footer> </article> <article class="card"> <header class="card__header"> <h2 class="card__heading">JavaScript для чайников</h2> <p class="card__author">М. Михайловских</p> </header> <div class="card__content"> <img src="./images/javascript-course.png" alt="" class="card__img" decoding="async" > <p class="card__description"> Курс подойдёт для любых чайников: электрических, газовых и даже для кастрюлек, временно подменяющих сломанный чайник. </p> </div> <footer class="card__footer"> <time class="card__date" datetime="2023-11-30" > 30 ноября 2023 </time> </footer> </article> </div></main><footer class="footer"> <p class="copyright"> 2023. Разработано компанией <a class="copyright__link"href="#">«Гарцующий пони»</a> </p></footer>
<header class="header">
<nav class="nav">
<a href="#" class="nav__item">Главная</a>
<a href="#" class="nav__item">Блог</a>
<a href="#" class="nav__item">Контакты</a>
</nav>
</header>
<main class="main">
<h1 class="heading">Курсы компании «Гарцующий пони»</h1>
<div class="wrapper">
<article class="card">
<header class="card__header">
<h2 class="card__heading">SEO для начинающих</h2>
<p class="card__author">Иван Иванович</p>
</header>
<div class="card__content">
<img
src="./images/seo-course.png"
alt=""
class="card__img"
decoding="async"
>
<p class="card__description">
Благодаря этому курсу вы научитесь задавливать конкурентов
с помощью ссылочной массы, а не качественного контента.
</p>
</div>
<footer class="card__footer">
<time
class="card__date"
datetime="2023-02-13"
>
13 февраля 2023
</time>
</footer>
</article>
<article class="card">
<header class="card__header">
<h2 class="card__heading">WordPress разработка</h2>
<p class="card__author">Ольга Ольгина</p>
</header>
<div class="card__content">
<img
src="./images/wordpress-course.png"
alt=""
class="card__img"
decoding="async"
>
<p class="card__description">
WordPress — топ за свои деньги. Изучите его,
чтобы стать востребованным фрилансером.
</p>
</div>
<footer class="card__footer">
<time
class="card__date"
datetime="2023-10-23"
>
23 октября 2023
</time>
</footer>
</article>
<article class="card">
<header class="card__header">
<h2 class="card__heading">JavaScript для чайников</h2>
<p class="card__author">М. Михайловских</p>
</header>
<div class="card__content">
<img
src="./images/javascript-course.png"
alt=""
class="card__img"
decoding="async"
>
<p class="card__description">
Курс подойдёт для любых чайников: электрических, газовых
и даже для кастрюлек, временно подменяющих сломанный чайник.
</p>
</div>
<footer class="card__footer">
<time
class="card__date"
datetime="2023-11-30"
>
30 ноября 2023
</time>
</footer>
</article>
</div>
</main>
<footer class="footer">
<p class="copyright">
2023. Разработано компанией
<a class="copyright__link"href="#">«Гарцующий пони»</a>
</p>
</footer>
Теперь используем подходящие по семантическому смыслу теги вместо не имеющих его <div> и <span>. Шапка, подвал, ссылки, заголовки — всё это размечено так, как должно.