Как это считается
Редирект — это ответ сервера с кодом статуса 3xx и заголовком Location. Браузер или поисковая система затем запрашивает новый адрес. Генератор записывает редирект как можно раньше: в Nginx — блоком server, который больше ничего не делает, в Apache — правилами перезаписи в начале .htaccess.
# Apache, .htaccess
RewriteRule ^old-page\.html$ /new-page [R=301,L]
# Nginx
location = /old-page.html {
return 301 /new-page;
} Apache сопоставляет путь с регулярным выражением, поэтому точки и другие специальные символы в пути экранируются, а ведущий слеш опускается, потому что .htaccess его убирает. Nginx сравнивает точный location как обычный текст. Оба сохраняют строку запроса посетителя, если только у старого адреса не было своей. Правила для HTTPS и www ведут сразу на конечный адрес, а не через два редиректа подряд.
Пример
Вы переносите example.com на www.example.com: запросы к http://example.com/blog, http://www.example.com/blog и https://example.com/blog получают один редирект 301 на https://www.example.com/blog. Нормально отдаётся только https://www.example.com.
Какой код статуса выбрать
| Код | Значение | Для чего |
|---|---|---|
| 301 | Перемещён навсегдаСтраница или сайт, переехавшие насовсем. Поисковые системы передают позиции старого адреса новому. | Страница или сайт, переехавшие насовсем. Поисковые системы передают позиции старого адреса новому. |
| 302 | Найден, временно в другом местеКороткий обход, например страница распродажи или техобслуживание. Старый адрес остаётся в результатах поиска. | Короткий обход, например страница распродажи или техобслуживание. Старый адрес остаётся в результатах поиска. |
| 307 | Временный, тот же методКак 302, но форма, отправленная через POST, снова отправляется через POST. | Как 302, но форма, отправленная через POST, снова отправляется через POST. |
| 308 | Постоянный, тот же методКак 301, но сохраняет POST. Полезно для API или обработчика формы, который переехал. | Как 301, но сохраняет POST. Полезно для API или обработчика формы, который переехал. |
Вопросы
Чем отличается редирект 301 от 302?
301 говорит, что адрес переехал навсегда: браузеры запоминают его, а поисковые системы заменяют старый адрес новым. 302 говорит, что перенос временный, поэтому старый адрес сохраняет своё место. Используйте 301 для нового домена, HTTPS или переименованной страницы; Google в любом случае воспринимает 302, которая держится долго, как 301.
Перенаправлять www на без www или наоборот?
Для поисковых систем подходит любой вариант, если вы выберете один и перенаправите на него другой. Короткую форму проще набирать; www упрощает установку cookie только для сайта и указание имени на CDN через запись CNAME.
Почему мой редирект зацикливается?
Обычно потому, что HTTPS завершается на прокси или CDN, а сервер видит каждый запрос как http:// и перенаправляет даже запросы https://. Отметьте параметр прокси, чтобы проверять заголовок X-Forwarded-Proto. В Cloudflare режим SSL Full (strict) решает проблему. После исправления очистите кэш браузера: браузеры запоминают редиректы 301.
Читает ли Nginx файлы .htaccess?
Нет. В Nginx нет файлов настроек для отдельных папок, поэтому правила из файла .htaccess нужно записывать в конфигурацию сервера, как на вкладке Nginx здесь, и перезагружать Nginx. Для этого нужен доступ к серверу: VPS его даёт, а виртуальный хостинг обычно нет.