Полное руководство по HTTP-перенаправлениям

Содержание

Что такое HTTP-перенаправление?

HTTP-перенаправление (URL redirection) — это механизм, который автоматически отправляет пользователя с одного URL на другой. Когда вы запрашиваете страницу, сервер может ответить кодом статуса 3xx и заголовком Location, указывающим на новый адрес — браузер автоматически переходит по этому адресу.

Перенаправления используются во многих типичных сценариях:

Как работают перенаправления

Запрос клиента:
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-кодов статуса, поэтому поисковые системы не могут определить, является ли перемещение постоянным или временным. Всегда отдавайте предпочтение серверным перенаправлениям.

Когда какой использовать

Влияние на SEO

Передача ссылочного веса

301 редирект передаёт почти весь ссылочный вес на новый URL. Google заявлял, что 301 передаёт близко к 100% PageRank. 302 не передаёт вес — исходный URL сохраняет свои ранжирующие сигналы.

Сроки обновления индекса

После 301 Google обычно:

Влияние цепочки перенаправлений

Каждый дополнительный переход в цепочке (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 или перейдите на адаптивный дизайн.

Лучшие практики