Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Практика

Автоматическая проверка редиректов

Один раз проверить перенаправления недостаточно. Настроим автоматический контроль, который срабатывает при любой поломке.

Почему нужна автоматика

Перенаправления живут годами, а конфигурация сервера меняется постоянно: новые правила, обновления, переезд на другой хостинг. Любое изменение может сломать старые правила, и никто этого не заметит, пока не упадёт трафик. Регулярная проверка по списку превращает такие поломки в ежедневное оповещение.

ТаблицасоответствийСкриптпроверкиЗапускпо расписаниюОповещениео сбоях
ТаблицасоответствийСкриптпроверкиЗапускпо расписаниюОповещениео сбоях
Как устроена автоматическая проверка

Что считать успехом

Критерии успешной проверки
ПроверкаОжиданиеСигнал проблемы
Код ответа старого адреса301 или 308302, 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

Строка запускает проверку ежедневно в шесть утра, но в первые месяцы после переезда лучше делать это чаще. Расписание можно настроить и в любых других планировщиках, а результат отправлять в рабочий чат или на почту: оповещения о падении трафика.

Как разбирать сбои

  1. Сгруппируйте сбои по типу: код, шаблон адреса, раздел.
  2. Если сбоев много и они однотипны, причина в общем правиле сервера: безопасная проверка правил.
  3. Единичные сбои чаще связаны с ошибками в таблице: исправьте и повторите.
  4. Зафиксируйте результат и дату изменения правил.

Связанные материалы. Разовую проверку списка адресов выполняет скрипт проверки кодов ответа, сверку двух обходов — статья про сравнение адресов после переезда, а все перенаправления сайта разом — отдельный разбор.

Ограничения и доработки

  • Скрипт проверяет только адреса из таблицы: новые правила и новые старые адреса нужно добавлять в неё.
  • Для цепочек добавьте следование по перенаправлениям с подсчётом шагов и ограничением на число переходов.
  • Часть серверов отвечает иначе на запросы без браузерных заголовков: сравните результат с проверкой в браузере.
  • Ограничьте частоту запросов: тысячи адресов подряд создают заметную нагрузку.

Результаты каждого запуска сохраняйте с датой: по ним видно, когда именно правило перестало работать, и это резко сокращает время поиска причины.

Частые вопросы

Зачем проверять перенаправления регулярно?

Конфигурация сервера меняется, и любое изменение может незаметно сломать старые правила; регулярная проверка находит поломку за день, а не после падения трафика.

Что считать успешной проверкой?

Код 301 или 308, адрес назначения из таблицы соответствий, один шаг и конечная страница с ответом 200.

Как часто запускать проверку?

Ежедневно в первые месяцы после переезда, затем раз в неделю; после любых изменений конфигурации — внепланово.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

Читайте также