Как автоматически исправить цепочки редиректов в Drupal с помощью Redirect Audit

alexei31/10/2026 - 17:23
Как автоматически исправить цепочки редиректов в Drupal с помощью Redirect Audit

Сайты на CMS Drupal могут накапливать цепочки редиректов с каждой миграцией и изменением контента; со временем их количество может достигать сотен или тысяч, что замедляет навигацию, вредит SEO и делает ручное исправление практически невозможным. Модуль Redirect Audit проверяет каждый редирект, автоматически сокращает цепочки до одного перехода и помечает циклы для ручного анализа. В этой статье рассматривается, какие проблемы решает этот модуль, как он это делает и каковы результаты на реальных сайтах.

В ходе жизненного цикла Drupal-сайта контент меняется, а сайт развивается, что требует технического обслуживания. Одной из возникающих проблем являются цепочки редиректов.

Почему Drupal-сайты накапливают сотни цепочек редиректов

Сайт с многолетней историей, прошедший через одну или несколько миграций или частые изменения контента автоматически накапливает редиректы. Каждое изменение алиаса (URL) и каждый перенос страницы оставляет за собой старый путь, пока их не становится сотни или даже тысячи. Новые проекты тоже приходят к этому результату по мере создания контента, добавления редиректов и перемещения страниц.

Эта проблема остается в тени. Никто не решает создавать цепочки редиректов; они появляются сами и со временем могут наслаиваться друг на друга. Ручная проверка таких цепочек невыполнима из-за затрат времени, поэтому они остаются в системе. Обычно такие ситуации обнаруживаются только во время аудитов сторонними инструментами — до этого момента редиректы остаются незамеченными.

Цепочки редиректов и зацикленные переходы убивают производительность, SEO и создают битые страницы

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

Googlebot может пройти до 10 редиреков в цепочке, прежде чем сдаться, но официальные рекомендации Google — перенаправлять на конечный пункт напрямую, а если это невозможно, то держать цепочку в пределах 3–5 переходов. Лимит в 10 переходов — это технический потолок; ущерб производительности и SEO начинается гораздо раньше.

Цикл — еще хуже. Он возникает, когда уже посещенный URL снова появляется в пути: а → б → а. Браузер следует по редиректам до тех пор, пока не сдается и не показывает ошибку ERR_TOO_MANY_REDIRECTS, поэтому пользователь так и не попадает на страницу.

Существуют инструменты, которые обнаруживают цепочки редиректов, но они не исправляют их

Такие инструменты, как Lighthouse, уже выявляют цепочки и помечают их как причину замедления. Обнаружение — наполовину решенная задача. Но ни один из этих инструментов не исправляет цепочку: не превращает несколько переходов в один, направляя каждый исходный редирект напрямую к финальному пункту. При наличии сотен цепочек именно это исправление имеет решающее значение.

Чтобы закрыть этот пробел, был создан модуль Redirect Audit. Он базируется на модуле Redirect (фундаменте управления редиректами в Drupal) и работает как полностью независимый модуль. Он совместим с Drupal 10, 11 и 12.

Redirect Audit сокращает цепочки до одного перехода

Модуль обнаруживает существующие редиректы, анализирует полный путь каждой цепочки и классифицирует каждый результат как цепочку или цикл.

Для цепочек он рабирает весь поток. Цепочка а → б → в → г превращается в редиректы а → г, б → г, в → г. Каждый редирект указывает прямо на конечный пункт, промежуточные переходы исчезают, и цепочка исчезает. Результатом становятся только прямые редиректы в один переход.

Особые случаи: внешние URL, длинные цепочки и многоязычные сайты

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

Цепочки, заканчивающиеся внешними URL

Цепочки, заканчивающиеся за пределами Drupal, также обрабатываются. Модуль не делает HTTP-запросов, поэтому он не может определить, возвращает ли конечный пункт валидную страницу, ошибку 404 или любую другую ошибку. Внешний URL считается валидным пунктом, который просто находится вне сайта. Модуль считает его концом цепочки, и цепочка все равно корректируется: а → б → в → внешний URL становится а → внешний URL, б → внешний URL, в → внешний URL. Та часть цепочки, которая относится к Drupal, оптимизируется даже если конечный ресурс находится снаружи.

Цепочки, превышающие лимит max_chain_depth

Параметр max_chain_depth ограничивает количество переходов, которые анализирует модуль, с настройкой по умолчанию 10. Этот лимит был выбран для обеспечения консистентности с остальными процессами модуля, настроенными для работы в рамках ресурсов любой среды.

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

Многоязычные сайты: решение проблемы ложноположительных результатов

Многоязычные сайты выявили важный нюанс в ходе разработки. Редиректы между переводами одного и того же узла (например, с испанского алиаса на английский) сначала определялись как цепочки или даже циклы. В анализ был добавлен параметр языка, и он стал отдельным столбцом на панели мониторинга, благодаря чему каждый язык теперь рассматривается как независимая страница, и ложные срабатывания исчезли.

Обработка циклов: помечаются для человека, не исправляются автоматически

О циклах сообщается в отчете, и предупреждение добавляется в отчет о состоянии Drupal (Status Report), чтобы они оставались видимыми. Они никогда не исправляются автоматически: программно невозможно определить, какой конечный пункт должен быть правильным или какой из редиректов действительно нужно сохранить. Такое решение остается за человеком.

Предупреждение носит чисто информативный характер. Оставленные неисправленными циклы не вызывают ошибок и не пишутся в логи; сайт просто сохраняет те же циклы, что были у него изначально. Кнопка «Clear» (Очистить) на панели мониторинга просто очищает таблицу и скрывает предупреждение — это полезно, когда в результатах остались только циклы. Она не выполняет никаких других функций.

Запуск: Drush, панель мониторинга и Cron

Три команды Drush покрывают базовый функционал: drush ras scans, drush raf fixes и drush rai shows (показывает всю информацию в деталях).

Панель мониторинга (Dashboard) покрывает всё остальное вне консоли. Она отображает таблицу с типом редиректа (цикл или цепочка), исходным языком, исходным алиасом, промежуточными редиректами и финальным редиректом, а также три кнопки: Audit (Аудит), Fix (Исправление) и Clear (Очистка).

Панель мониторинга Redirect Audit со столбцами URL, кодов состояния и деталей перенаправления
Панель мониторинга Redirect Audit со столбцами URL, кодов состояния и деталей перенаправления

В качестве продвинутого варианта можно использовать cron. Он может постоянно поддерживать оптимизацию редиректов через автоматическое сканирование изменений редиректов и автоматические корректировки. Автоматическое исправление разрешает только цепочки, никогда не затрагивает циклы, и по умолчанию отключено. Рекомендация состоит в том, чтобы сначала провести ручной аудит и проверить результаты, прежде чем разрешать что-либо менять автоматически.

Две настройки управляют потребляемыми ресурсами. Batch Size определяет, сколько редиректов анализируется за одну партию (по умолчанию 50, диапазон 1–500), чтобы держать потребление памяти под контролем, а размер страницы панели мониторинга по умолчанию составляет 20 элементов (диапазон 5–100).

Страница настроек аудита с опциями размера пакета, максимальной глубины и количества элементов на страницу
Страница настроек аудита с опциями размера пакета, максимальной глубины и количества элементов на страницу

Примеры из реальной жизни

На сайте с 1 429 редиректами аудит завершился менее чем за 20 секунд. На другом сайте с 4 679 редиректами аудит занял менее 30 секунд и обнаружил 139 цепочек редиректов и ни одного цикла; исправление затем выполнилось менее чем за 10 секунд (быстрее, чем сам аудит). В обоих проектах сканирование плюс исправление заняли менее минуты.

Полный процесс с первого раза — от перехода на страницу проекта до установки через Composer, включения модуля, сканирования и исправления через панель — обычно занимает менее 2 минут. На более слабых ресурсах это время может увеличиться примерно до 2–5 минут для обоих процессов. Это оценки, а не фиксированные значения, и все тесты проводились с настройками по умолчанию: пакеты по 50 редиректов и максимальная глубина в 10 переходов.

Заключение

Цепочки редиректов — известная проблема с множеством детекторов и почти без автоматических средств исправления. Redirect Audit закрывает этот пробел: он исправляет цепочки автоматически за секунды, сокращая каждый редирект до одного перехода, и помечает циклы, чтобы человек мог решить, что с ними делать. Он подходит для трех сценариев работы: разовой очистки, полного аудита существующих редиректов или непрерывной оптимизации через cron.