/tool/redirect-chain-checker/ работает ходит по цепочке сам
Впишите адрес — дальше по цепочке идёт наш сервер: по одному запросу на шаг, за Location автоматически не следуя, с проверкой каждого нового адреса заново, и так до двадцати шагов. По каждому шагу видно код и что он значит, версию протокола, время ответа, размер и все заголовки ответа целиком — включая те, из-за которых шаг вообще есть. Переходы, спрятанные в теле страницы, тоже попадают в цепочку. Списком проверяется до ста адресов сразу, результат выгружается в CSV.
Каждый ответ целиком: код и что он значит, версия протокола, время, куда ведёт и какие заголовки при этом отданы. Нажмите на шаг — развернутся все заголовки ответа, ничего не отобрано и не склеено: повторяющиеся Set-Cookie стоят отдельными строками, по строке на печенье.
Условное перенаправление видно только сравнением. Пройдём тот же адрес пятью подписями — Chrome, iPhone, два бота Google и YandexBot — и покажем, где они расходятся. Если сайт сам отдал заголовок Vary с упоминанием User-Agent, это первый признак, что расхождение будет.
| Подпись | Переходов | Конечный адрес | Код | Время |
|---|
Строки идут в том порядке, в каком вы их вставили. Кнопка «Скачать CSV» под панелью отдаёт эту таблицу файлом — с полными адресами, а не с укороченными.
| Адрес | Переходов | Коды по шагам | Замечание | Конечный адрес | Время |
|---|
Можно без протокола: example.com/old-page. Сервер сходит по первому адресу, посмотрит Location, сходит по следующему — и так до страницы, которая перенаправлением не отвечает.
Переезд на мобильную версию, отдельная цепочка для ботов, региональный редирект — всё это привязано к User-Agent. Кнопка «Сравнить подписи» проходит адрес всеми пятью и показывает, где они разошлись.
Внутри — код с расшифровкой, версия протокола, время, куда ведёт Location и что при этом меняется в адресе, а следом все заголовки ответа целиком: X-Robots-Tag, canonical из заголовка Link, Vary, HSTS, сервер и каждое печенье Set-Cookie отдельной строкой, со своим путём, доменом и сроком.
Инструмент отдельно скажет про цикл, тупик, временный код на постоянном переезде, потерю параметров запроса и переход, спрятанный в теле страницы.
Если шагов больше одного, под разбором появится блок с правилом для nginx и для .htaccess: одно перенаправление сразу на конечный адрес вместо всей лестницы.
Режим «Список адресов» берёт до ста строк за раз и складывает результат в таблицу; сотня проходит за один заход, останавливаться на середине не придётся. «Скачать CSV» отдаёт таблицу файлом, который открывается в Экселе и в Таблицах.
Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.
Шагов 3, переходов 2: у первых двух ответов есть Location, у третьего нет.
На первом шаге меняется только протокол: http становится https. На втором — только путь: /old-page становится /new-page/.
Оба перехода постоянные, 301. Временных нет, цикла нет, конечный код 200.
На конечном ответе стоит X-Robots-Tag: noindex — цепочка привела на страницу, которую сама же и запретила индексировать.
Два правила сводятся к одному: сразу отдавать 301 на https://example.com/new-page/. Инструмент печатает готовые строки для nginx и .htaccess, а заодно предупреждает про noindex в конце пути — без него разбор выглядел бы благополучным.
Уходит адрес, который вы проверяете, и выбранная подпись обозревателя. Запросы к чужому сайту делает наш сервер — с его адреса, не с вашего. Ответ возвращается вам и нигде не остаётся: ни в базе, ни в файле, ни в журнале. Ограничение общее для всех инструментов сайта — триста обращений в час с одного адреса, и проверка списка из ста адресов в него укладывается целиком. Режим «Готовые заголовки» считает ваш обозреватель, и в нём наружу не уходит ничего.
301 и 308 — постоянные: адрес сменился навсегда, поисковые системы переносят на новый адрес сигналы старого, а обозреватель запоминает правило надолго. 302, 303 и 307 — временные: основным остаётся старый адрес. Разница между 301 и 308 в методе запроса: 301 превращает POST в GET, 308 сохраняет метод. Та же пара — 302 и 307.
Потому что перенаправление настроено по User-Agent. Так делают мобильные версии на поддомене m., защита от ботов, региональные редиректы. Инструмент ходит той подписью, которую вы выбрали, а кнопка «Сравнить подписи» проходит адрес пятью и показывает расхождение — это единственный способ увидеть условное правило со стороны.
Значит, он в теле страницы: мета-тег refresh или строка вида location.href в скрипте. Мы читаем конечную страницу и добавляем такой переход в цепочку отдельным шагом с пометкой, что он не заголовочный. Для посетителя разницы почти нет, для поисковой системы есть: заголовочное перенаправление она понимает однозначно, а переход из тела — с оговорками и не всегда.
Адрес в цепочке повторился: правила перенаправляют друг на друга по кругу. Обозреватель оборвёт такой запрос ошибкой, страница не откроется вообще. Обычно это два правила, каждое из которых не знает про второе, — например, «добавить слэш» и «убрать слэш».
До ста строк за раз, и сотня проходит за один заход целиком: ограничитель сервера — триста обращений в час с одного адреса, список в него укладывается с запасом. Ограничитель стоит от использования сайта как чужого обходчика: на обход даже небольшого сайта нужны тысячи запросов, а не сотни. Если проверка всё же встанет — оборвалась сеть, чужой сайт перестал отвечать, — она скажет, на каком адресе; проверенное останется в таблице и выгрузится в CSV. Запустите список ещё раз: пройденные адреса возьмутся из памяти страницы и заново спрашиваться не будут.
Мы спрашиваем шаги запросом HEAD: он отдаёт заголовки без тела, и это единственный честный способ пройти длинную цепочку, не выкачивая каждую страницу целиком. Размер берётся из заголовка Content-Length, а его отдают не все. Если сайт вообще не принимает HEAD, он ответит кодом 405 — инструмент это отдельно отметит.
Дальше идти незачем: двадцать перенаправлений подряд — это уже не цепочка, а сломанная настройка. Обозреватель останавливается примерно там же и показывает ошибку вместо страницы. Раньше мы обрывали на десятом, и этого не хватало: после переезда домена цепочка в двенадцать шагов — обычное дело, и разбор кончался ровно там, где начиналось интересное. Если проверка дошла до предела, последний адрес показывается отдельной строкой с пометкой, что по нему мы не ходили.
Потому что показываем все, какие пришли, и в том порядке, в каком пришли. Отобранных семи не хватало: причина шага регулярно оказывалась в заголовке, которого в отборе не было. Повторяющиеся заголовки не склеиваем — Set-Cookie приходит по строке на печенье, и пять печений так и останутся пятью строками, у каждой свой путь, домен и срок. Строка, из-за которой шаг существует, вдобавок вынесена наверх, в короткую сводку под кодом ответа.
Версию протокола, которой ответил сервер на этом шаге. Она пригождается, когда шаги отвечают по-разному: старый домен нередко остаётся на HTTP/1.1, а новый уже отвечает по HTTP/2 или HTTP/3. Стоимость лишнего шага версия не отменяет — круг до сервера и обратно платится в любой, — но объясняет разницу во времени между соседними шагами.
Строит дерево заголовков страницы и находит пропущенные уровни.
Открыть
Пишет title и description и сразу показывает, как это выглядит в выдаче.
Открыть