HTTPQUERY
日本語

301 Moved Permanently

使い方

301 Moved Permanently ステータスコードを受け取ったとき、クライアントは保存しているリンクを新しい URI に更新することが期待されます。新しい URI は Location ヘッダーで指定され、クライアントによる自動リダイレクトに使われます。

このレスポンスは、サーバーが新しいドメインへ移行する場合や、以前の URI に戻す予定なく内部のファイル構造を再編成する場合によく使われます。

メソッドの変更

ユーザーエージェントは、歴史的な経緯により 301 リダイレクトで POST を GET に変更することが認められています。ほとんどのブラウザはまさにそうしており、このメソッドの変更は事実上の標準的な挙動となっています。308 ステータスコードは、曖昧さなくメソッドの保持を保証するために特別に作られました。API や現代的なアプリケーションでは、元のメソッドを保持する必要がある恒久的なリダイレクトには 308 を優先してください。

301 リダイレクトは少なくとも1年間、理想的には無期限に有効なままにしてください。Google は 301 を素早く認識しますが、シグナルの完全な移転には数週間かかります。ブラウザは Cache-Control ディレクティブに基づいて 301 レスポンスを積極的にキャッシュします。明示的なキャッシュヘッダーがない場合、そのリダイレクトはブラウザキャッシュに無期限に残ります。サーバー側で 301 を削除しても、ブラウザにキャッシュされたリダイレクトは消えません。

注意

古い URL が恒久的にコンテンツの提供を停止しなければならない場合は 301 を使います。両方の URL が引き続きコンテンツを提供しつつ、一方がインデックス登録用に優先される場合は rel=“canonical” を使います。301 はすべてのトラフィックを新しい URL へ強制しますが、canonical は検索エンジンが従うものの強制はされないヒントです。

SEO への影響

Google は 301 を、リダイレクト先が優先される URL であるという強いシグナルとして扱います。ランキングシグナルは古い URL から新しい URL へ移転します。恒久的な URL の変更、ドメイン移行、HTTPS への移行には 301 を使います。Google はリダイレクトを最大 10 ホップまで辿ります。中間のリダイレクト URL のコンテンツは無視されます。削除された URL を 301 でホームページや汎用のカテゴリページへリダイレクトすると、Google にソフト 404 として検出されます。

例

クライアントが HTML リソースを要求します。サーバーは 301 Moved Permanently で応答し、Location ヘッダーに新しい URI を含めます。メッセージボディはブックマークの更新を促しますが、現代のブラウザは直ちにリダイレクトします。

リクエスト

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