ページをドメイン移管やURL変更して別ページに移管などをした場合、利用者およびクローラーのためにリダイレクトの設定を行う必要があります。
このとき、よく使うのが301リダイレクトと302リダイレクトでしたが、最近は307や308もあると小耳に挟み、いまいち違いがわからなかったので、備忘録がてら調べたことをまとめます。
目次
TLDR
結論から言うと、308はPermanent Redirect(恒久的リダイレクト)で、基本的には301と近い位置づけですが、308はPOSTからGETへHTTPメソッドの変更を禁じているため、301よりも厳格なステータスとなります。
また、Googleでは308を301と同様に扱うと宣言しており、実際に公式ドキュメントにも掲載されています。
本当にそうなの?ということで詳しくは以下で解説します。
308 Permanent Redirect とは?
MDNでは下記のように記載されている。
The HyperText Transfer Protocol (HTTP) 308 Permanent Redirect リダイレクトステータスコードは、リクエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示します。ブラウザーはこのページにリダイレクトし、検索エンジンはリソースへのリンクを更新します (「SEO 用語」では、「リンクジュース」が新しい URL に送られたと言われます)。
308 Permanent Redirect – HTTP | MDN
ふむ、完全に移動したことを示す、ってことは一見301と大差ないようなステータスに見える。。。
んじゃ、301はどうなんだっけとみてみると
The HyperText Transfer Protocol (HTTP) の 301 Moved Permanently リダイレクトステータスコードは、リクエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示します。ブラウザーはこのページにリダイレクトし、検索エンジンはリソースへのリンクを更新します (「SEO 用語」では、「リンクジュース」が新しい URL に送られたと言われます)。
301 Moved Permanently – HTTP | MDN
ん、一緒じゃね?
うーんよくわからんがもう少し読んで見ると、、、
リダイレクトが行われるとき、仕様書ではメソッド (と本文) を変更しないよう要求していますが、すべてのユーザーエージェントが従っている訳ではありません。 – まだこの種のバグが発生するソフトウェアが見つかるでしょう。従って、 301 のコードは GET または HEAD メソッドのみに使用し、このステータスでは明確にメソッドの変更が禁止されているので、 POST メソッドでは代わりに 308 Permanent Redirect を使用することが推奨されています。
301 Moved Permanently – HTTP | MDN
あ、なるほど。301はHTTPメソッドを変更しない使用ではあるものの、そうでない挙動をする場合もあるのか。
ってことは、少なくともPOSTの場合は308を使うのが良さそうだ。
改めて308の方みてみると、、、
301 の場合は不正に GET メソッドに変更される可能性があるのに対し、このコードの場合はリクエストメソッドと本文が変更されません。
308 Permanent Redirect – HTTP | MDN
つまり、まとめると
- 301は基本的にGETメソッドのみを利用することが正しい
- しかし、古くからある301はHTTPメソッドの変更ができてしまう可能性があるため、不正にPOSTからGETに変更されたりするリスクが有る
- 対して新しくできた308は、HTTPメソッドの変更ができないため、301と同じく恒久的なURL変更をあらわしつつ301よりも厳格(HTTPメソッドの変更ができない)なステータスである
SEO的に問題ないのか?
では、SEO的にはページが移管した場合、301か308のどちらが良いのだろうか?
結論としては、どちらでも問題なさそうでした。
Google公式のリダイレクトに関するドキュメントにも掲載されています。
もともとGoogleのジョン・ミューラー氏がTwitterで下記のように発言したようです。
If you use it like a 301 we’ll treat it as such.
その後、明言化されていないという話になり上記のドキュメントに追記されたんだとか。。。
ただ、301は古くからあるリダイレクトステータスなので、想定しない使い方でできてしまうことから308の方が厳格そうなのでこちらを使っていっても良さそうかなぁという所感でした。(少なくともPOSTの場合は厳格に308が良さそう)
ということで、308リダイレクトと301リダイレクトの違いでした
参考
draft-reschke-http-status-308-07
リダイレクトと Google 検索 | Google 検索セントラル | Google Developers