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 допустим?
Терпимо при ясных заголовках и ссылках; семантика упрощает поддержку.