Технический SEO-аудит: что проверять

Системный чек-лист: как за один проход найти технические проблемы, которые мешают сайту в поиске.

Технический аудит — проверка сайта по уровням «доступность → индексируемость → разметка → производительность». Идём сверху вниз: бессмысленно чинить разметку у недоступной страницы.

Уровень 1: доступность

Может ли бот вообще получить страницу?

  • Код ответа 200 для рабочих страниц, 404 для несуществующих, 301 для переездов. Опасный антипаттерн — «soft 404»: страница ошибки отдаётся с кодом 200.
  • Сайт работает по HTTPS, нет смешанного контента.
  • robots.txt не закрывает лишнего; нужные разделы доступны.
  • Нет длинных цепочек редиректов (A → B → C → D).

Уровень 2: индексируемость

  • На индексируемых страницах нет случайного <meta name="robots" content="noindex">.
  • У каждой страницы корректный <link rel="canonical">, дубли схлопнуты.
  • Есть актуальный sitemap.xml без 404 и редиректов внутри.
  • Важный контент присутствует в сыром HTML (или быстро рендерится).

Уровень 3: разметка и контент

  • Уникальный осмысленный <title> и meta description на каждой странице.
  • Ровно один <h1>, логичная иерархия h2/h3.
  • У значимых картинок есть alt.
  • Структурированные данные (JSON-LD) валидны.

Уровень 4: производительность и мобильность

  • Core Web Vitals в зелёной зоне (LCP, CLS, INP).
  • Адаптивная вёрстка, наличие <meta name="viewport">.

Как работает под капотом: быстрый автоаудит

Часть проверок легко автоматизировать. Вот учебная функция, которая по «карте» страницы оценивает базовую SEO-гигиену — наглядно показывает, какие сигналы вообще проверяются:

def audit(page):
    issues = []
    if page["status"] != 200:
        issues.append(f"код ответа {page['status']} (ожидался 200)")
    if not page.get("title"):
        issues.append("нет <title>")
    elif len(page["title"]) > 60:
        issues.append("title длиннее 60 символов")
    if not page.get("description"):
        issues.append("нет meta description")
    if page.get("noindex"):
        issues.append("страница закрыта noindex")
    if page.get("h1_count", 0) != 1:
        issues.append(f"h1 на странице: {page.get('h1_count', 0)} (нужен ровно 1)")
    if not page.get("canonical"):
        issues.append("нет canonical")
    return issues

good = {"status": 200, "title": "Гайд по SEO", "description": "Описание...",
        "noindex": False, "h1_count": 1, "canonical": "/seo"}
bad =  {"status": 200, "title": "", "description": "",
        "noindex": True, "h1_count": 3, "canonical": ""}

print("Хорошая страница:", audit(good) or "проблем нет")
print("Плохая страница:")
for i in audit(bad):
    print("  -", i)

Вывод:

Хорошая страница: проблем нет
Плохая страница:
  - нет <title>
  - нет meta description
  - страница закрыта noindex
  - h1 на странице: 3 (нужен ровно 1)
  - нет canonical

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

  • Soft 404. Несуществующая страница отдаёт код 200 — бот считает её рабочей и засоряет индекс.
  • Начинать с мелочей. Тюнинг alt-ов у картинок на странице, закрытой noindex, — пустая трата времени. Идите по уровням сверху вниз.
  • Аудит одной страницы. Проблемы часто системные (шаблон, фреймворк). Проверяйте типовые шаблоны, а не один URL.

Итог

  • Аудит идёт по уровням: доступность → индексируемость → разметка → производительность.
  • Сначала чините блокеры (коды ответа, robots, noindex), потом разметку и скорость.
  • Большинство проблем — в шаблонах; проверяйте типовые страницы, а не единичные URL.
Проверьте себя
1. Что такое «soft 404» и почему это плохо?
AСтраница 404 с красивым дизайном
BНесуществующая страница, отдающая код 200 — бот считает её рабочей и засоряет индекс
CРедирект с 404 на главную
DСтраница, которая грузится дольше 4 секунд
2. С чего начинать технический SEO-аудит?
AС тонкой настройки alt-атрибутов у картинок
BС проверки доступности: коды ответов, HTTPS, robots.txt, редиректы
CС анализа внешних ссылок
DС переписывания текстов под ключевые слова
3. Почему стоит проверять типовые шаблоны, а не единичные URL?
AЕдиничные URL нельзя открыть в браузере
BТехнические проблемы обычно системные — заложены в шаблоне или фреймворке
CGoogle индексирует только шаблоны
DТак быстрее заполнить sitemap