Яндекс.Вебмастер — удобный инструмент, но он показывает лишь часть картины. Данные в нём агрегированы, задержаны на несколько дней и не дают полной информации о поведении робота. Логи веб-сервера — это сырой, необработанный поток данных о каждом запросе к вашему сайту. Здесь видно всё: как часто приходит Яндекс.Бот, какие страницы запрашивает, с какими кодами ответа уходит, сколько времени занимает обработка запроса.
В этой статье разберём, как читать и анализировать логи сервера с точки зрения SEO.
Что такое access log и где его найти
Access log (журнал доступа) — файл, в котором веб-сервер записывает информацию о каждом HTTP-запросе. Стандартное расположение:
- Apache:
/var/log/apache2/access.logили/var/log/httpd/access_log - Nginx:
/var/log/nginx/access.log - Определить точное расположение: посмотрите в конфиге сервера директиву
access_log.
На хостингах логи обычно доступны в панели управления (cPanel, ISPmanager) или по SFTP в папке logs/.
Формат строки access log
Стандартная строка access log выглядит так:
77.88.5.224 - - [22/Feb/2026:10:15:32 +0300] "GET /catalog/phones/ HTTP/1.1" 200 45231 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
Разберём по частям:
77.88.5.224— IP-адрес робота.[22/Feb/2026:10:15:32 +0300]— дата и время запроса.GET /catalog/phones/ HTTP/1.1— метод, URL, версия протокола.200— HTTP-код ответа.45231— размер ответа в байтах."-"— реферер (откуда пришёл запрос)."Mozilla/5.0 ... YandexBot/3.0 ..."— User-Agent.
IP-адреса Яндекс.Бота
Яндекс не использует один фиксированный IP. Диапазоны IP-адресов публикуются на странице Яндекса для вебмастеров. Основные диапазоны YandexBot: 77.88.x.x, 5.255.x.x, 37.9.x.x, 84.201.x.x.
Надёжнее фильтровать по User-Agent, содержащему YandexBot.
Фильтрация запросов от YandexBot
Через командную строку (bash)
Отфильтровать все запросы от YandexBot:
grep "YandexBot" /var/log/nginx/access.log > yandex_bot.log
Посмотреть количество запросов за день:
grep "YandexBot" /var/log/nginx/access.log | grep "22/Feb/2026" | wc -l
Топ-20 самых запрашиваемых URL:
grep "YandexBot" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
Статистика по HTTP-кодам:
grep "YandexBot" /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c | sort -rn
Медленные страницы (если время ответа логируется):
grep "YandexBot" /var/log/nginx/access.log | awk '{if($NF > 2000) print $0}' | sort -k$NF -rn | head -20
Что искать в логах: ключевые метрики
1. Общая активность краулера
Подсчитайте количество запросов от YandexBot за день. Сравните с несколькими предыдущими неделями. Резкое падение активности может означать:
- Проблемы с доступностью сервера.
- Изменения в robots.txt, случайно заблокировавшие бота.
- Снижение авторитетности сайта в глазах Яндекса.
- Ошибки сервера (5xx), из-за которых Яндекс решил снизить частоту краулинга.
2. Распределение HTTP-кодов
Здоровое распределение кодов для SEO:
- 200 OK — основная масса, 90%+.
- 301/302 — редиректы, должны быть минимизированы.
- 404 — страницы не найдены. Редкие 404 допустимы, массовые — проблема.
- 5xx — ошибки сервера. Должны стремиться к нулю.
Если 10–20% запросов от YandexBot возвращают 5xx — Яндекс снизит частоту краулинга. Если продолжатся — может временно исключить сайт из активного краулинга.
3. URL с высокой частотой запросов
Посмотрите, какие страницы Яндекс запрашивает чаще всего. Это подскажет:
- Что Яндекс считает важным на вашем сайте.
- Нет ли «ловушек» (например, фильтры генерируют бесконечные URL).
- Правильно ли работают редиректы.
Если в топе запрашиваемых URL — страницы с GET-параметрами (?sort=price&order=asc), значит робот тратит бюджет на мусорные URL.
4. Страницы, которые робот НЕ запрашивает
Это обнаружить сложнее — нужно сравнить список всех URL сайта (из sitemap) с URL из логов. Страницы, которых нет в логах — те, что робот не обнаружил или не считает нужным обходить.
Возможные причины:
- Нет внутренних ссылок на страницу.
- Страница закрыта в robots.txt (возможно, случайно).
- Плохая структура внутренней перелинковки — робот «не добирается» до глубоко вложенных страниц.
5. Скорость ответа сервера
Если в вашем формате логирования есть время обработки запроса — обязательно анализируйте его. YandexBot учитывает скорость ответа при определении частоты краулинга.
Nginx: время в секундах записывается в переменную $request_time. Добавьте её в формат логирования:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
6. Цепочки редиректов
Найдите URL, которые возвращают 301 или 302 боту. Особенно опасны цепочки редиректов (A → B → C → D): они тратят краулинговый бюджет и замедляют передачу веса ссылок.
grep "YandexBot" /var/log/nginx/access.log | awk '{print $9, $7}' | grep "^301\|^302" | head -50
Инструменты для анализа логов
GoAccess
Быстрый и удобный анализатор логов с веб-интерфейсом и терминальным режимом:
goaccess /var/log/nginx/access.log --log-format=COMBINED
Показывает в реальном времени: топ URL, распределение статусов, User-Agent, скорость и многое другое. Можно экспортировать в HTML-отчёт.
Screaming Frog Log File Analyser
Платный десктопный инструмент специально для SEO-анализа логов. Удобно:
- Объединять данные из логов и краулинга сайта.
- Находить URL в логах, которых нет в sitemap.
- Видеть динамику краулинга по времени.
ClickFlow
ClickFlow предоставляет автоматический анализ краулинговых данных: не нужно вручную ковыряться в сырых логах — платформа агрегирует данные и показывает проблемные паттерны в понятном виде. Можно увидеть динамику краулинга, топ ошибок, страницы с самым частым краулингом, и получить рекомендации по оптимизации.
Python-скрипты
Для регулярного анализа удобно написать скрипт на Python с использованием pandas:
import pandas as pd
import re
def parse_log_line(line):
pattern = r'(\S+) \S+ \S+ \[([^\]]+)\] "(\S+) (\S+) \S+" (\d+) (\d+) "([^"]*)" "([^"]*)"'
match = re.match(pattern, line)
if match:
return {
'ip': match.group(1),
'time': match.group(2),
'method': match.group(3),
'url': match.group(4),
'status': int(match.group(5)),
'size': int(match.group(6)),
'referer': match.group(7),
'user_agent': match.group(8)
}
with open('access.log') as f:
lines = f.readlines()
records = [parse_log_line(l) for l in lines if 'YandexBot' in l]
df = pd.DataFrame([r for r in records if r])
print("Статусы ответов:")
print(df['status'].value_counts())
print("\nТоп-20 URL:")
print(df['url'].value_counts().head(20))
Практический план работы с логами
Еженедельно:
- Проверить объём краулинга (количество запросов YandexBot в день).
- Проверить процент ошибок 5xx.
- Посмотреть на топ-30 самых запрашиваемых URL — нет ли мусора.
Ежемесячно:
- Сравнить URL в логах с sitemap — найти пропущенные страницы.
- Проверить цепочки редиректов.
- Проанализировать скорость ответа сервера по URL.
- Найти страницы с массовыми 404 — настроить редиректы или убрать ссылки.
После любых крупных изменений:
- После изменений в robots.txt — убедиться, что бот не заблокирован.
- После перезапуска сервера — проверить, не появились ли ошибки.
- После редизайна или миграции — убедиться, что все редиректы работают корректно.
Анализ логов сервера — это SEO-практика, которую применяют единицы специалистов, хотя она даёт уникальный инсайт в поведение краулера. Потратив несколько часов на настройку процесса, вы получите инструмент, который регулярно помогает находить и устранять проблемы до того, как они скажутся на позициях.