301 Moved Permanently / ERR_TOO_MANY_REDIRECTS
#Что такое 301 и чем он отличается от 302
Код 301 сообщает: ресурс перемещён навсегда, используйте новый адрес в заголовке Location. Браузеры и поисковые системы запоминают 301 надолго (иногда без срока), и поэтому ошибочный редирект «залипает» даже после исправления на сервере. Код 302 (и 307) — временный, он не кэшируется так жёстко. Если вы настраиваете переезд сайта или смену протокола, нужен 301; для временных акций и A/B-тестов — 302.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Бесконечный цикл (ERR_TOO_MANY_REDIRECTS)Два правила перекидывают друг на друга. | Страница не открывается, curl -IL показывает повтор. | Уберите одно правило или добавьте условие. |
| Цикл при использовании CloudflareРежим SSL Flexible, а на сервере принудительный https. | Цикл на https. | Включите режим Full (strict) и установите сертификат на сервере. |
| Редирект закэширован браузеромРаньше был 301 на другой адрес. | После исправления браузер ведёт по-старому. | Очистите кэш или проверьте в режиме инкогнито/curl. |
| Конфликт www и без wwwПравила в CMS и в сервере разные. | Переход туда-сюда. | Выберите основной вариант и настройте один редирект. |
| Неверные URL в настройках CMSВ WordPress указан другой адрес сайта. | Постоянный редирект на старый домен. | Проверьте siteurl и home. |
Потеря параметровРедирект отбрасывает ?query=. | Ссылки с метками перестают работать. | Используйте $request_uri / %{REQUEST_URI}. |
#Как проверить цепочку
- Зафиксируйте правильный адрес и направление перенаправленияВ браузере откройте старый адрес и посмотрите конечный URL после перехода. Сравните его с адресом, который должен открываться. Если вы владелец сайта, откройте инструменты разработчика клавишей
F12→ «Сеть», включите сохранение журнала и обновите страницу. Выберите запрос со статусом 301 и прочитайте заголовокLocation: он должен вести на нужную страницу, без лишних промежуточных переходов. Для проверки серверного ответа можно использоватьcurl -I https://example.com/old, заменив пример реальным адресом. - Проверьте цепочку, петлю и протоколНа собственном компьютере в терминале выполните
curl -IL --max-redirs 10 https://example.com/old, заменив URL своим, и просмотрите последовательность ответовHTTP/... 301и заголовковlocation. Ожидается один понятный переход на работающую страницу, а не повторение исходного адреса или циклический маршрут. Не вставляйте закрытые ссылки с токенами в публичные сервисы проверки. - Исправьте перенаправление только на стороне собственного сайтаАдминистратору: проверьте правила в панели системы управления сайтом и конфигурации веб-сервера. Найдите правило именно для ошибочного старого URL и исправьте адрес назначения. Перед изменением сохраните копию конфигурации; проверьте синтаксис (
nginx -tилиapachectl configtestв зависимости от своего сервера) и применяйте только после успешной проверки. Затем снова проверьте ответ в новой сессии. Посетителю, не имеющему доступа к сайту, достаточно сообщить владельцу два URL и время проверки.
Не доверяйте адресной строке браузера: посмотрите, что на самом деле отвечает сервер.
curl -sIL https://example.com/old-page | grep -iE "^HTTP|^location"curl -sIL -o /dev/null -w "%{url_effective} | кодов перехода: %{num_redirects} | итоговый код: %{http_code}\n" http://example.com/(Invoke-WebRequest -Uri "http://example.com" -MaximumRedirection 0 -ErrorAction SilentlyContinue).Headers.LocationЕсли в цепочке больше двух-трёх переходов (http → https → www → слэш), объедините их в один: так быстрее и лучше для SEO.
#Типичные проблемы
#Правильные правила
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]После изменения проверьте цепочку curl-командами выше и очистите кэш браузера: Ctrl+Shift+Del, либо проверьте в режиме инкогнито. Для переезда страниц сохраняйте соответствие «старый адрес → новый» и не перенаправляйте всё на главную: это ухудшает индексацию.
#Проверка в браузере и после исправления
Чтобы увидеть переходы в браузере, откройте F12 → «Сеть» и включите флажок «Сохранять журнал» (Preserve log): после обновления страницы в списке останутся все ответы 301/302 по порядку. Чтобы отключить кэш редиректов на время теста, поставьте «Отключить кэш» при открытых инструментах разработчика. После исправления правил сервера браузер по-прежнему может вести по старому 301 из своего кэша, поэтому проверяйте только через curl или в новом окне инкогнито. Поисковым системам для смены адреса нужно время: следите за отчётом об индексировании в Яндекс Вебмастере и Search Console, а карту сайта (sitemap.xml) обновите так, чтобы в ней были только конечные адреса без редиректов.