Тег main в HTML: для чего нужен и почему он один на странице

Тег <main> обозначает основное содержимое страницы - то, ради чего посетитель на неё пришёл, без шапки, подвала и боковых блоков. Тег парный, закрывающий </main> обязателен. Главная его особенность в том, что на странице он должен быть единственным, и этим <main> отличается от остальных семантических тегов.

Для чего нужен тег main в HTML

Оформления тег не добавляет: содержимое выглядит одинаково и в <main>, и в обычном <div>. Польза начинается там, где страницу разбирают программы.

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

HTML
<body>
  <header>...</header>
 
  <main>
    <h1>Заголовок страницы</h1>
    <p>Текст, ради которого страницу открыли.</p>
  </main>
 
  <footer>...</footer>
</body>

Пример: какую часть страницы занимает main

Результат
header - шапка, повторяется на всех страницах
main - уникальное содержимое этой страницы
footer - подвал, тоже повторяется везде

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

Ровно один. Это редкий случай в HTML, когда спецификация прямо ограничивает количество: у <header>, <nav> или <section> ограничений нет, а видимый <main> в документе допускается только один.

Логика простая: тег отвечает на вопрос "где здесь главное". Два ответа на этот вопрос смысла не имеют - скринридер не сможет выбрать, куда переносить фокус, а валидатор W3C выдаст ошибку.

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

HTML
<main>Экран, который сейчас открыт</main>
<main hidden>Другой экран приложения</main>
<main hidden>И ещё один</main>

Для обычного сайта на Blogger или любой другой CMS этот приём не нужен: там каждая страница загружается отдельно, и <main> на ней один.

Что размещают внутри main, а что оставляют снаружи

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

Что относится к основному содержимому, а что нет
Внутри main Снаружи main
Заголовок <h1> и текст страницы Логотип и название сайта
Статьи, карточки товаров, результаты поиска Главное меню в <nav>
Формы, относящиеся к этой странице Боковая колонка со ссылками на другие разделы
Иллюстрации и таблицы по теме страницы Подвал с контактами и копирайтом

Форма поиска - пограничный случай. В шапке сайта она относится к обвязке и остаётся снаружи. Но на странице результатов поиска она и есть основное содержимое, так что там её место внутри <main>. Смысл определяется страницей, а не самим блоком.

main рядом с header, footer, article и section

Соседей у тега два, и оба располагаются на одном уровне с ним, прямо внутри <body>: header сверху и <footer> снизу. А вот <article>, <section> и <aside> обычно находятся уже внутри <main> - они делят основное содержимое на части.

HTML
<body>
  <header>
    <nav>...</nav>
  </header>
 
  <main>
    <article>
      <section>...</section>
      <section>...</section>
    </article>
    <aside>Материалы по теме статьи</aside>
  </main>
 
  <footer>...</footer>
</body>

Обратное вложение запрещено: <main> не должен быть потомком <article>, <aside>, <footer>, header или nav. Причина та же, что и с количеством: основное содержимое документа не может находиться внутри его же обвязки.

Про <aside> стоит оговориться отдельно. Внутри <main> он уместен, когда относится к конкретной статье - врезка с материалами по теме. Общая боковая колонка сайта, одинаковая на всех страницах, выносится за пределы <main>, рядом с ним.

Самая заметная польза от <main> проявляется не на экране, а на клавиатуре. Посетитель, который перемещается по странице клавишей Tab, без специальной ссылки вынужден пройти всё меню, прежде чем доберётся до текста - и так на каждой странице сайта.

Нажимайте кнопку ниже и следите за счётчиком: слева страница без ссылки-перехода, справа - со ссылкой на <main>.

Перемещение по клавише Tab

Без ссылки-перехода

  1. Логотип
  2. Главная
  3. Блог
  4. Каталог
  5. О нас
  6. Контакты
  7. Поиск
  8. Основной текст

Нажатий: 0

Со ссылкой на main

  1. Перейти к основному содержимому
  2. Основной текст

Нажатий: 0

Счётчики на нуле. Нажимайте Tab и смотрите, за сколько шагов каждая страница доводит до текста.

Первое нажатие: слева фокус на логотипе, справа - на ссылке-переходе. Следующий шаг разведёт эти две страницы окончательно.

Справа фокус уже на основном тексте. Слева впереди ещё пункты меню и поиск - и так на каждой странице сайта.

Восемь нажатий против двух. Разницу даёт ссылка-переход, а она возможна только потому, что у основного содержимого есть адрес - id на теге main.

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

HTML
<a href="#content" class="skip-link">Перейти к основному содержимому</a>
 
<header>...</header>
 
<main id="content">...</main>

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

Три из четырёх ошибок ниже браузер покажет без единой жалобы - страница будет выглядеть правильно, а семантика окажется сломанной. Поэтому разметку с <main> стоит хотя бы раз прогнать через валидатор W3C.

ОшибкаЧто происходитКак исправить
На странице несколько видимых <main> Валидатор выдаёт ошибку, скринридер не может определить основной блок Оставить один, остальные заменить на <section> или <div>
<main> прописан внутри <header>, <footer> или <article> Основное содержимое оказывается частью обвязки, структура документа ломается Вынести <main> на верхний уровень, прямо внутрь <body>
В <main> попали шапка, меню или подвал Режим чтения и поисковый робот считают повторяющиеся блоки частью текста страницы Оставить внутри только уникальное содержимое
К тегу дописан role="main" Роль дублируется - тег уже имеет её по умолчанию Убрать атрибут

Вопросы и ответы

Поддерживают ли браузеры тег main?

Да, все современные браузеры поддерживают его с 2015 года. Отдельного внимания требовал только Internet Explorer 11 и более старые версии - там тегу дописывали role="main", чтобы скринридер его распознал. Сегодня этот приём не нужен.

Влияет ли тег main на SEO?

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

Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×