Полное руководство по HTTP-перенаправлениям
Содержание
Что такое HTTP-перенаправление?
HTTP-перенаправление (URL redirection) — это механизм, который автоматически отправляет пользователя с одного URL на другой. Когда вы запрашиваете страницу, сервер может ответить кодом статуса 3xx и заголовком Location, указывающим на новый адрес — браузер автоматически переходит по этому адресу.
Перенаправления используются во многих типичных сценариях:
- Миграция сайта на новый домен
- Реструктуризация URL-путей
- Переход с HTTP на HTTPS
- Разные URL для мобильной и десктопной версий
- Сокращатели ссылок (bit.ly, t.co и т.д.)
- A/B-тестирование и разделение трафика
Как работают перенаправления
Запрос клиента:
GET /old-page HTTP/1.1
Host: example.com
Ответ сервера:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page
Типы перенаправлений
301 Moved Permanently
301 — самый распространённый тип перенаправления. Он сообщает клиентам и поисковым системам, что ресурс навсегда перемещён на новый URL.
✅ Когда использовать 301
- Постоянная миграция домена
- Постоянная реструктуризация URL
- Переход HTTP → HTTPS
- Объединение дублирующегося контента
SEO: Поисковые системы передают ссылочный вес (PageRank) на новый URL и обновляют индекс. Google обычно завершает этот процесс в течение нескольких недель.
Поведение браузера: Браузеры могут кешировать 301 редиректы, пропуская исходный URL при последующих посещениях.
302 Found (Temporary)
302 сигнализирует о временном перемещении. Исходный URL остаётся действительным и индексируемым.
✅ Когда использовать 302
- Страницы обслуживания
- A/B-тестирование
- Временная маршрутизация по геолокации
- Краткосрочное разделение мобильной/десктопной версий
303 See Other
303 заставляет клиента использовать GET для перенаправленного запроса, независимо от исходного метода. В основном используется после POST-запросов для предотвращения повторной отправки формы при обновлении страницы (паттерн Post/Redirect/Get).
307 Temporary Redirect
307 аналогичен 302, но строго сохраняет исходный метод запроса. POST-запрос остаётся POST после перенаправления — в отличие от 302, который исторически допускал смену метода.
308 Permanent Redirect
308 — аналог 301 с сохранением метода запроса. Для GET-запросов 301 и 308 ведут себя одинаково. Используйте 308, когда нужен постоянный редирект, который не должен менять метод запроса.
Клиентские перенаправления
Meta refresh
<meta http-equiv="refresh" content="0; url=https://example.com/new-page">
Не рекомендуется для SEO — поисковые системы могут обработать его некорректно.
JavaScript-перенаправление
window.location.href = "https://example.com/new-page";
Не идеально для SEO, так как поисковые роботы могут не выполнять JavaScript.
⚠️ Ограничения клиентских перенаправлений
Клиентские перенаправления не несут HTTP-кодов статуса, поэтому поисковые системы не могут определить, является ли перемещение постоянным или временным. Всегда отдавайте предпочтение серверным перенаправлениям.
Когда какой использовать
- Постоянная смена домена → 301
- Временное обслуживание → 302
- HTTP → HTTPS → 301
- Канонизация www / без www → 301
- После отправки формы → 303
- A/B-тест → 302
- Постоянный редирект с сохранением метода → 308
- Временный редирект с сохранением метода → 307
Влияние на SEO
Передача ссылочного веса
301 редирект передаёт почти весь ссылочный вес на новый URL. Google заявлял, что 301 передаёт близко к 100% PageRank. 302 не передаёт вес — исходный URL сохраняет свои ранжирующие сигналы.
Сроки обновления индекса
После 301 Google обычно:
- Обнаруживает перенаправление в течение нескольких дней
- Обновляет индекс в течение 1–4 недель
- Полностью передаёт вес в течение 1–3 месяцев
Влияние цепочки перенаправлений
Каждый дополнительный переход в цепочке (A → B → C) увеличивает задержку и может размывать ссылочный вес. Google следует примерно до 10 переходов, но цепочки длиннее 3 — тревожный сигнал. Всегда перенаправляйте напрямую с исходного URL на конечный.
🎯 Лучшая практика
Используйте прямые перенаправления (A → C). Регулярно проверяйте свои цепочки и сокращайте их при любой возможности.
Типичные проблемы и решения
1. Петли перенаправлений
Симптом: Браузер показывает «слишком много перенаправлений».
Типичные причины: Конфликт настроек HTTPS между CDN и сервером-источником, неправильный siteurl в WordPress, пересекающиеся правила Nginx/Apache, ошибки в .htaccess.
# Диагностика с помощью curl
curl -I -L https://example.com
Или используйте 301check.com для визуализации полной цепочки.
2. Потеря строки запроса
Убедитесь, что ваши правила перенаправления сохраняют параметры запроса. В Nginx используйте $request_uri или $is_args$args.
3. Кешированные 301
Браузеры кешируют 301 редиректы. Если вы измените перенаправление, пользователи могут по-прежнему видеть старый адрес назначения. Тестируйте в приватном окне или очистите кеш.
4. Несоответствие мобильных перенаправлений
Если мобильные пользователи перенаправляются на главную страницу вместо соответствующей мобильной страницы, исправьте маппинг URL или перейдите на адаптивный дизайн.
Лучшие практики
- Используйте 301 для постоянных изменений, 302 для временных
- Если сомневаетесь, начните с 302 — вы всегда можете перейти на 301, когда будете уверены
- Избегайте цепочек перенаправлений; перенаправляйте напрямую на конечный URL
- Сохраняйте строки запроса в правилах перенаправления
- Мониторьте через Google Search Console после крупных миграций
- Документируйте все правила перенаправлений, чтобы команда знала, что настроено
- Тестируйте с помощью 301check.com до и после любых изменений