HTTP 301
Код состояния HTTP 301 или Moved Permanently (с англ. — «Перемещено навсегда») — стандартный код ответа HTTP, получаемый в ответ от сервера в ситуации, когда запрошенный ресурс был на постоянной основе перемещён в новое месторасположение, и указывающий на то, что текущие ссылки, использующие данный URL, должны быть обновлены. Адрес нового месторасположения ресурса указывается в поле Location получаемого в ответ заголовка пакета протокола HTTP. В RFC 2616 указано, что:
- если у клиента есть возможность редактирования ссылки, то ему следует обновить все ссылки на запрашиваемый URL;
- запрос кэшируется[1];
- в случае, если метод запроса был не HEAD, то содержимое должно включать в себя небольшое гипертекстовое примечание с гиперссылкой на новый URL;
- если код состояния 301 был получен в ответ на запрос любого другого типа, кроме GET или HEAD, то клиент должен спросить пользователя о перенаправлении.
Примеры
Запрос клиента:
GET /index.php HTTP/1.1 Host: www.example.org
Ответ сервера:
HTTP/1.1 301 Moved Permanently Location: http://www.example.org/index.asp
Примеры перенаправления для веб-сервера Apache:
Использование файла .htaccess для перенаправления на ресурс, работающий на протоколе шифрования SSL:
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Перенаправление с нежелательных сайтов в .htaccess
RewriteEngine on RewriteCond %{HTTP_REFERER} ^http://(site.ru%7Csite2.ru%7Csite3.ru) [NC] RewriteRule \.(rar|zip)$ http://example.com/ [R,L]
Пример использования перенаправления в PHP:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://example.com/newpage.html");
exit();
?>
Примеры перенаправления для веб-сервера nginx: - Перенаправление с веб-страницы.
location /old/url/ { return 301 /new/url; }
Перенаправление с нескольких несуществующих веб-страниц или путей на главную.
location ~* (wp-*|admin*|plugins|install*|components|cli|logs|cache|modules|tmp) { return 301 $scheme://example.com; }
Перенаправление с нежелательных сайтов. Помещается внутри server {}.
if ($http_referer ~* (site1.ru|site2.com|site3*) ) { return 301 http://example.com/; }
Перенаправление с www.
server { server_name www.example.com; return 301 http://example.com$request_uri; }
Перенаправление со старого домена на новый.
server { server_name www.example.com example.com; return 301 $scheme://example.com$request_uri; }
Поисковые системы
Google рекомендует использовать код состояния 301 для изменения URL страницы так, как она показана в результатах поиска[2].
Яндекс также рекомендует использовать код состояния 301 при перенаправлении страниц[3].
С точки зрения SEO, именно код состояния 301 сообщает поисковым роботам, что нужно объединить два разных адреса в один, где основным будет тот, на который и происходит перенаправление.
Поисковые системы также рекомендуют настраивать данное перенаправление с дополнительных зеркал на основное, например, когда сайт одновременно доступен по адресам с www и без www или использует защищённый протокол (https), но также доступен по http.
Примечания
- ↑ How long do browsers cache HTTP 301s? stackoverflow.com. Дата обращения: 26 ноября 2015. Архивировано 27 января 2016 года.
- ↑ Change page URLs with 301 redirects - Search Console Help . support.google.com. Дата обращения: 26 ноября 2015. Архивировано 24 июля 2017 года.
- ↑ Обработка редиректов (перенаправлений) — Вебмастер — Яндекс.Помощь . yandex.ru. Дата обращения: 26 ноября 2015. Архивировано 7 апреля 2017 года.