Заголовки H1–H6: семантическая иерархия документа и типичные ошибки
1. Архитектура и принцип работы
Робот разбирает DOM и строит дерево заголовков: H1 — корень, H2 — дочерние узлы, H3 — их потомки и так далее. Дальше алгоритм сопоставляет текст заголовков с целевыми запросами страницы, проверяет, что контент под каждым H-тегом соответствует его смыслу. Для SEO важно: один H1 на страницу, отсутствие пропусков уровней (H2 → H4), осмысленный текст вместо «Заголовок 1», равномерное покрытие подразделов. Иерархия влияет на формирование сниппетов, быстрых ссылок и оглавлений в выдаче, а также на индексацию длинных лендингов и статей. При аудите снимаем дерево заголовков по каждому URL, сверяем с картой запросов и \1: заголовок должен отвечать на конкретный интент, а не дублировать title. Отдельно проверяем скрытые H-теги в вёрстке, H1 внутри логотипа и заголовки в модальных окнах, которые попадают в DOM.
2. Математическая механика и триггеры ранжирования
Парсер строит последовательность уровней L = [l1, l2, …, ln] и проверяет её на монотонность: каждый следующий уровень не должен превышать предыдущий более чем на 1 (li+1 ≤ li + 1). Нарушение даёт «сиротский» скачок — типичный флаг в аудите. Считаем плотность заголовков: D = N_h / N_words × 1000 (заголовков на 1000 слов), комфортный диапазон 8–25. Проверяем уникальность H1: count(H1) = 1, иначе страница теряет главный семантический маркер. Сверяем пересечение токенов H1 с title и h1_similarity = |T_title ∩ T_h1| / |T_title ∪ T_h1|, норма 0.3–0.7 — полный дубль вредит. Длина H1: 30–70 символов, H2 — до 90. Валидируем через XPath //h1|//h2|//h3 и сверяем с визуальным рендером (headless-браузер), чтобы отловить H-теги, спрятанные через display:none или position:absolute.
3. Специфика в Яндекс (YATI) vs Google
Обе системы используют заголовки как сигнал структуры и релевантности, но акценты разные. Google активнее строит из H2/H3 расширенные сниппеты и «перепрыгивающие» ссылки на подразделы, поэтому чистая иерархия напрямую влияет на SERP-фичи. Яндекс сильнее опирается на заголовки при определении тематических блоков и в алгоритмах вроде нейросетевого ранжирования: текст H1–H3 попадает в признаки документа наравне с body. Google терпимее к нескольким H1 в HTML5-секциях (article/section), Яндекс в практике чаще трактует множественные H1 как шум. Для обоих критичны пропуски уровней и пустые заголовки. Вывод для аудита: делаем консервативную схему — один H1, последовательные H2–H3, что устраивает и Google, и Яндекс без компромиссов.
4. Нормативы SLA и диагностическая матрица
| Параметр / Метрика | Эталон по SLA | Критическая ошибка |
|---|---|---|
| Количество H1 на страницу | 1 | 0 или ≥2 |
| Пропуски уровней (H2→H4) | 0 | ≥1 на URL |
| Плотность заголовков на 1000 слов | 8–25 | <3 или >40 |
5. Пошаговый инженерный протокол внедрения
- Снять дерево заголовков по всем URL через краулер и headless-рендер, выгрузить в таблицу с уровнем, текстом, позицией в DOM и видимостью.
- Сверить каждый H1/H2 с картой запросов: заголовок должен закрывать интент кластера, а не быть маркетинговым слоганом.
- Починить иерархию: убрать дубли H1, устранить скачки уровней, заменить пустые и декоративные заголовки на осмысленные.
- Настроить регулярный мониторинг: алерт при появлении второго H1, пропуске уровня или H-теге внутри скрытых блоков.
Правило валидации иерархии: для последовательности уровней L проверяем li+1 ≤ li + 1 и count(H1) == 1. Пример проверки на Python: levels = [1,2,2,3,2]; ok = all(b <= a + 1 for a, b in zip(levels, levels[1:])) and levels.count(1) == 1. Для XPath-снимка: //h1 | //h2 | //h3 | //h4 | //h5 | //h6, далее фильтр по computed style display != none.
6. Типичные ошибки при оптимизации
- Несколько H1 на странице или H1 в логотипе/шапке — робот теряет главный маркер темы, сниппет формируется по случайному блоку.
- Скачки уровней H2 → H4 и заголовки ради вёрстки («Заголовок 2») — ломают дерево, парсер не связывает подраздел с родителем.
- H-теги на скрытых элементах, в модалках и табах без логики — попадают в DOM, раздувают структуру и создают дубли с видимым контентом.
