Почему нужна автоматика
Перенаправления живут годами, а конфигурация сервера меняется постоянно: новые правила, обновления, переезд на другой хостинг. Любое изменение может сломать старые правила, и никто этого не заметит, пока не упадёт трафик. Регулярная проверка по списку превращает такие поломки в ежедневное оповещение.
Что считать успехом
| Проверка | Ожидание | Сигнал проблемы |
|---|---|---|
| Код ответа старого адреса | 301 или 308 | 302, 200, 404, 5xx |
| Адрес назначения | Совпадает с таблицей соответствий | Другой адрес или главная страница |
| Число шагов | Один | Цепочка из двух и более перенаправлений |
| Конечная страница | Отвечает 200 | Ошибка или другое перенаправление |
| Время ответа | В пределах нормы | Резкий рост |
Скрипт проверки
import csv
import requests
def check(old, new):
r = requests.get(old, allow_redirects=False, timeout=10)
location = r.headers.get("Location", "")
ok = r.status_code in (301, 308) and location.rstrip("/") == new.rstrip("/")
return ok, r.status_code, location
failed = []
with open("mapping.csv", newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
ok, code, location = check(row["old"], row["new"])
if not ok:
failed.append((row["old"], code, location))
print(len(failed), "failed")
for item in failed[:20]:
print(item)
Скрипт читает таблицу соответствий, проверяет каждый старый адрес и собирает список сбоев. Он предполагает, что в таблице полные адреса; сравнение не учитывает регистр и параметры: для вашего сайта его нужно уточнить.
Запуск по расписанию
0 6 * * * cd /opt/seo && python3 check_redirects.py > last_run.txt
Строка запускает проверку ежедневно в шесть утра, но в первые месяцы после переезда лучше делать это чаще. Расписание можно настроить и в любых других планировщиках, а результат отправлять в рабочий чат или на почту: оповещения о падении трафика.
Как разбирать сбои
- Сгруппируйте сбои по типу: код, шаблон адреса, раздел.
- Если сбоев много и они однотипны, причина в общем правиле сервера: безопасная проверка правил.
- Единичные сбои чаще связаны с ошибками в таблице: исправьте и повторите.
- Зафиксируйте результат и дату изменения правил.
Связанные материалы. Разовую проверку списка адресов выполняет скрипт проверки кодов ответа, сверку двух обходов — статья про сравнение адресов после переезда, а все перенаправления сайта разом — отдельный разбор.
Ограничения и доработки
- Скрипт проверяет только адреса из таблицы: новые правила и новые старые адреса нужно добавлять в неё.
- Для цепочек добавьте следование по перенаправлениям с подсчётом шагов и ограничением на число переходов.
- Часть серверов отвечает иначе на запросы без браузерных заголовков: сравните результат с проверкой в браузере.
- Ограничьте частоту запросов: тысячи адресов подряд создают заметную нагрузку.
Результаты каждого запуска сохраняйте с датой: по ним видно, когда именно правило перестало работать, и это резко сокращает время поиска причины.
Частые вопросы
Зачем проверять перенаправления регулярно?
Конфигурация сервера меняется, и любое изменение может незаметно сломать старые правила; регулярная проверка находит поломку за день, а не после падения трафика.
Что считать успешной проверкой?
Код 301 или 308, адрес назначения из таблицы соответствий, один шаг и конечная страница с ответом 200.
Как часто запускать проверку?
Ежедневно в первые месяцы после переезда, затем раз в неделю; после любых изменений конфигурации — внепланово.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.