HTTPQUERY
Русский

301 Moved Permanently

Применение

При получении кода состояния 301 Moved Permanently клиенты должны обновить сохранённые ссылки на новый URI. Новый URI указывается в заголовке Location и используется клиентом для автоматического перенаправления.

Такой ответ часто встречается, когда серверы переезжают на новый домен или реорганизуют внутреннюю структуру файлов без намерения возвращаться к прежнему URI.

Изменение метода

По историческим причинам агентам пользователя разрешено менять POST на GET при перенаправлении 301. Большинство браузеров поступают именно так, что делает смену метода стандартным на практике поведением. Код состояния 308 был создан специально для того, чтобы без двусмысленности гарантировать сохранение метода. Для API и современных приложений, когда исходный метод должен сохраняться, для постоянных перенаправлений предпочтительнее 308.

Сохраняйте перенаправления 301 действующими как минимум год, а в идеале бессрочно. Google распознаёт 301 быстро, но полная передача сигналов занимает недели. Браузеры агрессивно кэшируют ответы 301, опираясь на директивы Cache-Control. Без явных заголовков кэширования перенаправление остаётся в кэше браузера бессрочно. Удаление 301 на стороне сервера не очищает закэшированные перенаправления в браузерах.

Примечание

Используйте 301, когда старый URL должен навсегда перестать отдавать содержимое. Используйте rel=“canonical”, когда оба URL продолжают отдавать содержимое, но один из них предпочтителен для индексирования. 301 принудительно направляет весь трафик на новый URL, тогда как canonical — это подсказка, которой поисковые системы следуют, но не обязаны подчиняться.

Влияние на SEO

Google считает 301 сильным сигналом того, что цель перенаправления является предпочтительным URL. Сигналы ранжирования передаются со старого URL на новый. Используйте 301 для постоянной смены URL, миграции доменов и перехода на HTTPS. Google переходит не более чем по 10 звеньям цепочки перенаправлений. Содержимое промежуточных URL перенаправления игнорируется. Перенаправление удалённых URL на главную страницу или общую страницу категории с помощью 301 распознаётся Google как мягкая ошибка 404 (soft 404).

Пример

Клиент запрашивает HTML-ресурс. Сервер отвечает 301 Moved Permanently и указывает новый URI в заголовке Location. Тело сообщения предлагает обновить закладки, хотя современные браузеры выполняют перенаправление немедленно.

Запрос

GET /news.html HTTP/1.1
Host: example.com

Ответ

HTTP/1.1 301 Moved Permanently
Location: http://example.com/feeds/news.html
Content-Type: text/html; charset=UTF-8
Content-Length: 150

<h1>The Newsfeed has moved</h1>
<body>
The newsfeed has moved permanently to
<a href=/feeds/news.html>here</a>.
Please update your bookmarks.
</body>

Примеры кода

.NET

HttpStatusCode.MovedPermanently

Rust

http::StatusCode::MOVED_PERMANENTLY

Rails

:moved_permanently

Go

http.StatusMovedPermanently

Symfony

Response::HTTP_MOVED_PERMANENTLY

Python3.5+

http.HTTPStatus.MOVED_PERMANENTLY

Java

java.net.HttpURLConnection.HTTP_MOVED_PERM

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_MOVED_PERMANENTLY

Angular

@angular/common/http/HttpStatusCode.MovedPermanently