Код статуса ответа HTTP
В World Wide Web HTTP 301 — это код статуса ответа HTTP для 301 Moved Permanently . Он используется для постоянного перенаправления, что означает, что ссылки или записи, возвращающие этот ответ, должны быть обновлены. Новый URL-адрес должен быть указан в поле Location, включенном в ответ. Перенаправление 301 считается наилучшей практикой для обновления пользователей с HTTP на HTTPS .
RFC 2616 [1] гласит:
- Если у клиента есть возможности редактирования ссылок, он должен обновить все ссылки на URL-адрес запроса.
- Ответ можно кэшировать, если не указано иное.
- Если метод запроса не был HEAD, сущность должна содержать небольшую гипертекстовую заметку с гиперссылкой на новый(ие) URL-адрес(а).
- Если код статуса 301 получен в ответ на запрос любого типа, кроме GET или HEAD, клиент должен спросить пользователя перед перенаправлением.
Примеры
Запрос клиента:
GET /index.php HTTP / 1.1 Хост : www.example.org
Ответ сервера:
HTTP / 1.1 301 Перемещено навсегда Расположение : https://www.example.org/index.asp
Использование файла .htaccess
Чтобы исправить проблемы с несуществующими файлами или каталогами с помощью распределенного файла .htaccess:
Перенаправление 301 /calendar.html /Calendar/ Перенаправление 301 /not_found.html /
Вот пример использования файла .htaccess для перенаправления незащищенного URL-адреса на защищенный адрес без начального «www»:
RewriteEngine Вкл RewriteCond %{HTTPS} выкл RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteCond %{HTTPS} на RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L]
Статический HTML
Пользовательское перенаправление каталога с использованием файла index.html:
< meta http-equiv = "refresh" content = "0; url=/" /> < p >< a href = "/" > Главная </ a ></ p >
Использование языков программирования
Вот пример использования Perl CGI.pm :
перенаправление печати ( "https://example.com/newpage.html" );
Вот пример использования PHP- редиректа:
<?php заголовок ( "Расположение: https://example.com/newpage.html" , true , 301 ); выход ;
Вот один из способов перенаправления с помощью Express.js :
app.all ( "/old/url" , ( req , res ) = > { res.redirect ( 301 , " /new/url" ) ; } );
Кэширующий сервер
Аналогично просто для конфигурации nginx :
местоположение /старый/URL { return 301 '/новый/URL' ; }
Поисковые системы
И Bing , и Google рекомендуют использовать перенаправление 301 для изменения URL-адреса страницы, отображаемого в результатах поиска, при условии, что URL-адрес изменится навсегда и не будет изменен снова в ближайшее время. [2] [3]
Технические подробности
Код состояния HTTP 301 имеет несколько технических нюансов, которые разработчикам следует учитывать при реализации и управлении перенаправлениями:
Обработка браузера
- Поведение кэширования : многие веб-браузеры кэшируют перенаправления 301. Это означает, что как только браузер пользователя сталкивается с перенаправлением 301, последующие запросы к исходному URL-адресу будут автоматически перенаправляться на новый URL-адрес без обращения к серверу.
- Обновление закладок : Браузеры могут обновлять закладки, чтобы отразить новый URL-адрес после обнаружения перенаправления 301.
Серверная часть
- Apache : Apache имеет mod_alias и mod_rewrite для обработки перенаправлений 301. Использование обоих часто приводит к непредсказуемому поведению, поскольку модули не уважают правила других модулей. [4]
Сравнение с другими кодами статуса
- 302 Найдено : В отличие от 301, код статуса 302 указывает на временное перенаправление. Поисковые системы могут не передать значение SEO новому URL. [5]
- Временное перенаправление 307 : похоже на 302, но гарантирует, что метод и тело не будут изменены при выполнении перенаправленного запроса.
- 303 См. Другое : Используется, когда результатом POST или другого неидемпотентного метода запроса является ресурс, который следует извлечь с помощью GET.
Заголовок местоположения
- Обязательное включение : новый URL-адрес всегда должен быть указан в поле «Местоположение» при отправке перенаправления 301. Пропуск заголовка Location запутает браузеры и может привести к неожиданному поведению.
- Использование абсолютного URL-адреса : хотя относительные URL-адреса могут приниматься некоторыми браузерами, использование абсолютных URL-адресов в заголовке Location является стандартом и обеспечивает единообразное поведение во всех пользовательских агентах.
Влияние на SEO
- Передача ссылочного веса : поисковые системы обычно переносят большую часть ссылочного веса (или «ссылочного сока») с исходного URL на целевой URL для перенаправлений 301. [6]
- Задержки индексации : может возникнуть задержка, прежде чем поисковые системы распознают перенаправление и соответствующим образом обновят свои индексы.
Распространенные ошибки
- Множественные перенаправления : использование нескольких перенаправлений 301 подряд (с A на B, затем с B на C) может привести к увеличению времени загрузки страницы и снижению ценности SEO.
- Проблемы со смешанным содержимым : при перенаправлении с HTTP на HTTPS убедитесь, что все ресурсы (изображения, скрипты, таблицы стилей) на странице также загружаются по HTTPS, чтобы предотвратить появление предупреждений о смешанном содержимом.
Смотрите также
Ссылки
- ^ Филдинг и др. (июнь 1999 г.). 10.3.2 301 Перенесено навсегда. IETF. стр. 61. раздел 10.3.2. doi : 10.17487/RFC2616 . RFC 2616.
- ^ "Инструмент перемещения сайта". Справка и инструкции для веб-мастеров Bing .
- ^ "301 перенаправления". Справка по инструментам Google для веб-мастеров .
- ^ 301 перенаправление для Apache .htaccess: mod_rewrite
- ^ SEO и коды статуса HTTP: комплексный анализ
- ^ Объяснение перенаправлений 301: как они влияют на SEO