HTML-структура документа

HTML-документ — каркас страницы: doctype, html, head, body. Робот и браузер читают разметку до CSS и часто до JS. Сломанный каркас даёт непредсказуемые сниппеты, дубли title и трудности отладки в Search Console.

<!DOCTYPE html>
<html lang="ru">
<head>… charset, title, meta …</head>
<body>… контент …</body>
</html>
  • Один head и один body.
  • lang="ru" (или нужный язык) на корне.
  • Мета и title — в head, основной текст — в body.

Head: что должно быть

Charset, viewport, title, description, canonical, подключение CSS. Аналитика — с defer/async, где возможно. Частый баг CMS: title или meta оказываются в body после некорректного include.

Meta для выдачи — см. мета-теги title, description и Open Graph. Устаревшие теги в теле — устаревшие HTML-теги. Иерархия заголовков в body — H1–H6.

Семантика body

Используйте header, nav, один main, section, footer. Заголовки — по уровням без пропусков. Кнопки — button или a, не безликие div с onclick.

Микроразметка дополняет видимый контент, не подменяет его — см. Schema.org.

Валидация

ПроблемаРиск
Дубли idЛомает якоря и скрипты
Незакрытые тегиСломанное DOM-дерево
Несколько H1Размытый главный заголовок

Проверьте HTML lang и Charset. После правки шаблона — бесплатная проверка.

Шаблоны CMS и вложенность

WordPress, Bitrix и другие CMS иногда выводят куски head через хуки в body. Симптом — дубли meta и «title не совпадает с вкладкой». Решение на уровне темы: один layout, один wp_head, без ручных вставок в контент.

Скрипты аналитики в head без defer блокируют первую отрисовку. Перенос в конец body или async/defer — часть «структуры документа», хотя тег formally в body. Проверяйте порядок после каждого нового виджета.

Доступность начинается со структуры: skip-link к main, landmark-роли, label у форм. Это не «балл SEO», но снижает отказы и жалобы на неудобство — косвенный плюс.

Проверьте JSON-LD отдельно от HTML: schema в head или body допустима, но дублирующий title в разметке и в tag title путает отладку. Один источник правды для заголовка — в CMS.

Доступность начинается со структуры: skip-link к main, landmark-роли, label у форм. Это не «балл SEO», но снижает отказы и жалобы на неудобство — косвенный плюс.

Проверьте JSON-LD отдельно от HTML: schema в head или body допустима, но дублирующий title в разметке и в tag title путает отладку. Один источник правды для заголовка — в CMS.

Доступность начинается со структуры: skip-link к main, landmark-роли, label у форм. Это не «балл SEO», но снижает отказы и жалобы на неудобство — косвенный плюс.

Проверьте JSON-LD отдельно от HTML: schema в head или body допустима, но дублирующий title в разметке и в tag title путает отладку. Один источник правды для заголовка — в CMS.

Доступность начинается со структуры: skip-link к main, landmark-роли, label у форм. Это не «балл SEO», но снижает отказы и жалобы на неудобство — косвенный плюс.

Проверьте JSON-LD отдельно от HTML: schema в head или body допустима, но дублирующий title в разметке и в tag title путает отладку. Один источник правды для заголовка — в CMS.

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

Обязателен ли <main>?

Не всегда формальный штраф, но сильно упрощает структуру для a11y и парсеров.

Несколько <body>?

Нельзя — признак поломки шаблона или склейки фрагментов.

Валидность W3C = позиции?

Нет напрямую; важна предсказуемость разбора и отсутствие критичных ошибок.

Div-soup допустим?

Терпимо при ясных заголовках и ссылках; семантика упрощает поддержку.