WordPress

301リダイレクトとは?WordPressでの使いどころと、302との違い

公開 約5分で読めます

TL;DRこの記事の要点

  • 301は、古いURLから新しいURLへ恒久的に転送するステータスコード
  • 302は一時的な転送。使い分けは、元のURLに戻すかどうか
  • WordPressは、通常の投稿のスラッグ変更なら古いURLを301で転送する
  • このブログでは、カテゴリの親子変更後の旧URLは転送されなかったので、Claude Codeに足してもらった
目次7項目
  1. 301リダイレクトとは?古いURLから新しいURLへの、恒久的な転送
  2. どんなときに出てくる?
  3. 302や308との違い
  4. WordPressでは、どこまで自動で転送される?
  5. WordPressで301を設定する選択肢
  6. 301でハマった例
  7. 迷ったときの確認ポイント

URLを変えると出てくる「301」。
何を確認すればいいのかを、このブログの例で説明します。

このブログでは、カテゴリのURLを変えたあと、古いURLが200のまま表示されていました。
301の意味と、WordPressが自動で転送する範囲を、その例も交えてまとめます。

301って、結局なに?

古いURLを開いた人を、新しいURLに案内する転送のことだよ。

301リダイレクトとは?古いURLから新しいURLへの、恒久的な転送

301は、HTTPのステータスコードのひとつです。
正式な名前は「301 Moved Permanently」。
リクエストされたページが、別のURLへ恒久的に移動した、という意味です。
大事なのは「恒久的」という言葉です。

ブラウザは、サーバーが返した転送先のURLを読み取って、そのURLのページを自動で開き直します。
開いた人から見ると、古いURLを入力したのに、気づいたら新しいURLのページが出ている状態です。
引っ越し先の案内、というイメージです。

転送処理を追加したあと、Claude Codeに確認してもらうと、このブログでは次のURLが301で転送されていました。
古いカテゴリのURLを開くと、こうなります。

  • /category/tools/tools-ai/ → /category/tools-ai/

このブログのトップページは、https://cats-hand.pro/もhttps://www.cats-hand.pro/も、https://cats-hand.pro/へ301で転送されました。
URLの形が何通りかあっても、アクセスした人にも検索エンジンにも、見せたい形のURLにまとめて伝えるために使われています。

どんなときに出てくる?

301が必要になる場面は、だいたい3つ。

  • 記事やページのURL(スラッグ)を変えたとき
  • カテゴリの親子を変えるなどして、一覧ページのURLが変わったとき
  • httpからhttpsへ、またはwwwの有無など、サイトのURLの形を統一したいとき

どれも、「古いURLを知っている人や検索エンジンを、新しいURLへ案内したい」という場面です。
URLが変わるなら、301の出番。

302や308との違い

転送には、301のほかにも種類があります。
基本の違いは、次のとおりです。

  • 301: 恒久的な転送。ずっと新しいURLに移ったときに使う
  • 302: 一時的な転送。メンテナンス中だけ別のページへ、といった場面で使う
  • 308: 301と同じ恒久的な転送。ただし転送後も、リクエストの方法(メソッド)を変えない

検索エンジンも、恒久的な転送と一時的な転送を区別します。
Googleのドキュメントによると、301や308のような恒久的な転送は、転送先を正規のURLにするためのシグナルとして使われます。
302のような一時的な転送は、そうしたシグナルとしては扱われません。
元のURLが、インデックスに残る場合があります。

使い分けの基準は、元のURLに戻すかどうかです。
なので、URLを変えて元に戻さないなら、301です。
記事などを恒久的に移すだけで、POSTのメソッドを維持する必要がなければ、301で十分です。
MDNによると、POSTへの301では、転送後のリクエストがGETに変わります。
変えたくないときは308を使います。

302でもページは見られるんじゃないの?

302でも転送先は表示されるよ。
ただ、Googleは302を転送先を正規URLにする合図としては扱わないんだ。

WordPressでは、どこまで自動で転送される?

WordPressは、全部の変更を自動で転送してくれるわけではありません。

記事のスラッグを変えたとき

通常の投稿では、スラッグを変えたあと古いURLが404になるなど条件が合えば、WordPressが新しいURLへ301で転送します。
公式ドキュメントによると、この転送をしているのはwp_old_slug_redirect()という関数で、古いスラッグから今の正しいパーマリンクへ、301で案内します。
動くのは、ページが見つからない状態になっていて、スラッグが存在し、階層のない投稿タイプのときです。
固定ページのような階層のある投稿タイプは対象外、とされています。

カテゴリの親子を変えたとき

カテゴリの親子を変えたときは、このブログでは、古いURLが転送されませんでした。
古い/category/tools/tools-ai/が、ステータス200のまま表示されていたんです。
このブログではカテゴリの旧URLが転送されなかったので、転送の処理をClaude Codeにテーマへ追加してもらいました。

WordPressで301を設定する選択肢

WordPressで設定するなら、次の3つが使えます。

  • テーマのPHPで、条件を決めて転送する(wp_safe_redirect()を301で使う)
  • サーバーの設定ファイル(.htaccessなど)に書く
  • Redirectionのような転送用プラグインで、古いURLを1件ずつ登録する

Googleのドキュメントも、PHPのヘッダーやApacheの設定、NGINXの設定のように、サーバー側で行う転送を推奨しています。
サーバー側で設定できないときはmeta refresh、JavaScriptでの転送は最後の手段、とされています。

このブログでは、Claude Codeに依頼して、カテゴリの転送処理をPHPでテーマに追加してもらいました。
アクセスされたURLと、そのカテゴリの今のURLを比べて、違えば301で転送する形です。
古いURLを1件ずつ書かないので、ほかのカテゴリの親子を変えた場合にも使えます。
.htaccessなどの設定ファイルを直接編集したくないなら、プラグインの管理画面で転送元と転送先を登録できます。

Redirectionは、無料のプラグインです。
公式の説明では、手順はこうです。

  1. プラグインを有効化して、管理画面の「ツール」からRedirectionを開く
  2. 新しい転送を追加して、転送元のURL(Source URL)と、転送先のURL(Target URL)を入力する
  3. HTTPコードで301を選んで、保存する
  4. 古いURLを開いて、新しいURLへ移るか確認する

301でハマった例

転送されるはずなのに、されていなかった例です。
ページが表示されても、301で転送されたのか、古いURLが200のまま表示されたのかは見た目で分かりません。
なので、curl -Iでステータスを見たり、ブラウザの開発者ツールの「ネットワーク」で確認したりします。

詳しくはWordPressのカテゴリを親子変更したら古いURLでも表示された原因と301転送に書いています。

迷ったときの確認ポイント

  1. 恒久的にURLを変えたら、古いURLの応答が301か確認する(ブラウザの開発者ツールの「ネットワーク」などで見られます)
  2. 恒久的な引っ越しなら301、一時的なら302を選ぶ
  3. 転送先が、さらに別のURLへ転送されない、最終的なURLになっているか見る
  4. WordPressが自動で転送するのは、通常の投稿の古いスラッグなど。カテゴリの親子変更は転送されなかったので、自分で確認する

URLを変えるなら、転送まで一緒に決めておく。

あわせて知っておきたい用語

スラッグ
記事やカテゴリのURLに入る識別名。変えるとURLも変わります。
パーマリンク
記事などに割り当てられる、変えない前提のURL。形はWordPressの「パーマリンク設定」で決めます。
302(リダイレクト)
一時的な転送のこと。元のURLに戻す前提のときに使います。

この記事が参考になったら、応援クリックをお願いします

Cat's Handこの記事を書いた人

Web制作歴10年以上。WordPressのテーマカスタマイズやコーディングを中心に、副業・本業ともにweb制作に携わっています。このブログでは、実際に手を動かして分かったことを書いています。