「古いリンクにアクセスすると404エラーが出てしまう……」
「301と302の違いって具体的に何? どっちを使えばいいの?」
「プラグインで簡単にリダイレクト設定できるって本当?」
「サーバーの.htaccessを触るのは怖くて踏み切れない……」
こんな疑問やお悩みを抱える方は多いのではないでしょうか?
本記事では、WordPressサイト運営初心者でも迷わず使えるリダイレクトの基本から、
- 301リダイレクトと302リダイレクトの違い
- おすすめプラグイン「Redirection」の使い方
- .htaccess/PHPでの直接実装方法
まで、あらゆる手法をわかりやすく解説します。
「設定したはずなのに動かない」「どの方法を選べばよいか迷う」…そんなストレスを一掃し、ユーザー体験とSEO評価を両立させる最適なリダイレクト運用をマスターしましょう!
リダイレクトの基礎知識
リダイレクトとは何か?
Webサイト運営中に、あるURLから別のURLへ自動的に移動させる仕組みをリダイレクトと呼びます。
訪問者が古いURLにアクセスしても、新しいページへスムーズに誘導できるため、ユーザー体験やSEOの観点で非常に重要です。
- ユーザー視点:404エラーを避け、快適にページを閲覧できる
- 検索エンジン視点:評価を適切に引き継ぎ、順位低下を防ぐ 😊
永続的転送(301)と一時的転送(302)の違い
301リダイレクトと302リダイレクトは最もよく使われるステータスコードです。
| ステータスコード | 説明 | 主な用途 |
|---|---|---|
| 301 | 永続的に移動(Moved Permanently) | ドメイン変更/ページURLの恒久的変更 🏠 |
| 302 | 一時的に移動(Found) | テストページやキャンペーンの一時誘導 🔄 |
- 301:検索エンジンが元のURL評価を転送先に引き継ぐ
- 302:移転後も元のURL評価を維持し、将来元に戻す可能性があると示す


その他のステータス:303/307など
301・302以外にも、状況に応じて様々なリダイレクトが用意されています。
- 303(See Other)
- フォーム送信後のリダイレクトに使うと安全
- POST → GET に転送する際に適切
- 307(Temporary Redirect)
- 302のHTTP/1.1版。
- 元のリクエストメソッド(GET/POST)を維持したまま一時転送
- その他のコード
- 300(Multiple Choices):複数候補から選ばせたいとき
- 308(Permanent Redirect):301のHTTP/1.1版。メソッド維持の恒久転送
これらを使い分けることで、より適切に訪問者を誘導しつつ、SEO評価やフォーム処理を安全に行えます✨
リダイレクトが必要になるシーン
| シーン | 主な目的 |
|---|---|
| パーマリンクやページURLを変更した場合 | 旧URLから新URLへ確実に誘導🔗 |
| サイトやドメインを移転するとき | トラフィックとSEO評価を維持🏠 |
| コンテンツを一時的に別ページへ誘導したいとき | キャンペーンやメンテ時の柔軟対応🎯 |
| 常時SSL化やURL正規化を行うとき | 安全性向上と一貫したURL管理🔒 |
パーマリンクやページURLを変更した場合
ブログ記事や固定ページのURL構造(パーマリンク)を変えた際、古いURLへのアクセスは404エラーを返してしまいます。
301リダイレクトを設定することで、
- 過去にシェアされたリンクからの流入を逃さず
- 検索エンジン評価を新URLへ継承
できます✨
サイトやドメインを移転するとき
サイト全体を別サーバーや新ドメインへ引っ越す場合、旧ドメインへのリンクが切れると訪問者が離脱します。
ドメインルートに301リダイレクトを施すと、
- 旧ドメイン全体のトラフィックを一括で新ドメインへ転送
- 検索順位の大幅な下落を抑制
できます🏠
コンテンツを一時的に別ページへ誘導したいとき
キャンペーンページ公開中やメンテナンス時など、短期間だけ閲覧先を変更したい場合は302リダイレクトが最適です。
- 一時転送として検索エンジンに認識させ
- 本番URLの評価を維持
しつつ、訪問者を指定ページへ誘導🎯
常時SSL化やURL正規化を行うとき
HTTP → HTTPSへの切り替えや、www有無の統一などURLの形式を揃える際にもリダイレクトが必須です。
- HTTPS化でユーザーの安全を確保🔒
- URL正規化で重複コンテンツ化を防止
結果としてSEOにもプラスに働きます💡
設定手法の全体像
プラグインを利用する手軽な方法
WordPress管理画面からワンクリックで導入できるのがプラグイン方式の魅力です。
- Redirection や Safe Redirect Manager など、UIで簡単にルールを追加・編集
- 細かいログ管理やグループ分け機能で運用もラクラク 💻
- インストール手順
- 「プラグイン > 新規追加」で名前を検索
- インストール&有効化
- 設定画面で「転送元」「転送先」「ステータスコード」を入力
- メリット:不慣れでも直感的、トラブル発生時のロールバックが容易
- 注意点:プラグイン増加によるパフォーマンス影響に注意 ⚠️
.htaccessファイルを直接編集する古典的手法
Apache環境で根幹を担う .htaccess を活用する方法です。
# 永続的リダイレクトの例
Redirect 301 /old-page/ https://example.com/new-page/
# 正規表現を使ったまとめ転送
RewriteEngine On
RewriteRule ^old-dir/(.*)$ /new-dir/$1 [R=301,L]
`
| 特徴 | 内容 |
|---|---|
| パフォーマンス | サーバーレベルで処理され高速 |
| 柔軟性 | 正規表現や条件分岐が可能 |
| リスク | 記述ミスでサイト全体に影響を与える恐れあり |
- 手順:FTP/SFTPで
.htaccessをダウンロード → 編集 → アップロード - メリット:サーバー負荷が少なく、プラグイン不要
- 注意点:バックアップを必ず取得し、Syntaxエラーに要注意 🛠️
functions.php/PHPコードで制御する応用技
テーマの functions.php や専用プラグインで PHP を直接記述する方法。
add_action('template_redirect', function() {
if (is_page('old-slug')) {
wp_redirect(home_url('/new-slug/'), 301);
exit;
}
});
- ポイント:
wp_redirect()とexit;をセットで使用 - メリット:WordPress のフックを活かして条件分岐が自在 🌟
- 注意点:テーマ更新でコードが消える可能性があるため、子テーマや専用プラグインに記述する
JavaScript・HTML metaタグによるクライアントサイド転送
サーバー設定にアクセスできない場合の最終手段として有効です。
<!-- HTML metaリダイレクト -->
<meta http-equiv="refresh" content="0;url=https://example.com/new-page/">
<!-- JavaScriptリダイレクト -->
<script>
window.location.replace("https://example.com/new-page/");
</script>
| 方法 | 説明 |
|---|---|
| metaタグ | ページ読み込み後に自動転送(遅延も可能) |
| JavaScript | 条件付き転送やアニメーション後の誘導も可能 |
| デメリット | 検索エンジン評価が引き継がれにくい場合がある |
- メリット:サーバーに触れない、HTML編集だけで完結
- 注意点:JavaScript無効環境やSEOの影響を考慮すること 🧐
プラグイン「Redirection」での設定手順

インストールと初期セットアップ
- WordPress管理画面の「プラグイン > 新規追加」を開く
- 検索欄に「Redirection」と入力し、Redirectionプラグインを探す
- 「今すぐインストール」をクリックし、有効化
- 有効化後、ツールメニューに追加された「Redirection」を開く
- 初回起動時のウィザードで基本セットアップを完了 ✅
ポイント:セットアップ中にREST APIのテストが行われます。問題なければそのまま次へ進んでください😊
新しい転送ルールの追加方法
- Redirection画面で「転送ルールを追加」をクリック
- 以下の項目を入力
転送元URLの指定
- スラッシュから始まるパスだけを入力(例:
/old-page/) - 正確なマッチか部分一致を選択可能
転送先URLの設定
- 新しい完全URLを記入(例:
https://example.com/new-page/) - 相対パス(
/new-page/)もOK
HTTPコードの選択(301/302)
| コード | 用途 |
|---|---|
| 301 | 恒久的な移動(SEO評価を継承)🏠 |
| 302 | 一時的な移動(評価維持)🔄 |
グループ分けやログ設定
- グループを作成してカテゴリー別に管理
- ログをONにするとアクセス状況を記録できる📊
Tip:ルールが増えてきたら、グループ名やタグを活用して見やすく整理しましょう✨
詳細オプションの使いどころ
クエリパラメータの扱い
- 「完全一致」から「パラメータ無視」まで選択可
- キャンペーンURLなど、
?utm_source=を含む場合は「パラメータ無視」が便利
正規表現による高度ルール
Regexモードを選ぶと、^/old-(.*)\.html$→/new-$1/のように柔軟な設定が可能- 注意:誤った正規表現は想定外のページも転送する恐れあり ⚠️
実装後の確認ポイントと注意事項
ループ発生のチェック
- ブラウザやcurlで何度もリダイレクトが繰り返されないか確認
- 無限ループが起きるとサイトにアクセスできなくなることも😱
サーチコンソールの警告対応
- Search Consoleで「リダイレクトの問題」エラーが出ていないか確認
- クロールエラーやソフト404が発生していれば、設定を見直しましょう🔍
.htaccessを編集してリダイレクトを実装
ファイルの取得とバックアップ方法
- FTP/SFTPクライアントでサーバーに接続し、Webサイトのルートディレクトリを開く
.htaccessは隠しファイルのため、「隠しファイルを表示」オプションを有効にする- ローカルにダウンロードし、元ファイルは必ず別名(例:
.htaccess.bak)でバックアップ - 編集用にダウンロードしたファイルをテキストエディタで開く ✏️
Tip: 何か問題が起きた場合は、バックアップをアップロードしてすぐに復旧できます。
永続的・一時的ルールの記述例
Apache標準のRedirectディレクティブを使ったシンプルな設定です。
# 永続的リダイレクト(301)
Redirect 301 /old-page/ https://example.com/new-page/
# 一時的リダイレクト(302)
Redirect 302 /temporary/ https://example.com/campaign/
| タイプ | コード | 用途 |
|---|---|---|
| 永続的 | 301 | 古いURLから評価を新URLに引き継ぎたいとき 🏠 |
| 一時的 | 302 | 一時的な誘導やテスト用途に最適 🔄 |
ディレクトリ単位/ワイルドカードでまとめて転送する方法
複数ページをまとめてリダイレクトしたい場合は、mod_rewriteを利用すると柔軟です。
<IfModule mod_rewrite.c>
RewriteEngine On
# ディレクトリ移動時の一括転送
RewriteRule ^old-directory/(.*)$ /new-directory/$1 [R=301,L]
</IfModule>
^old-directory/(.*)$:old-directory以下の全ファイル・パスにマッチ/new-directory/$1:元パスの階層構造をそのまま再現[R=301,L]:恒久転送かつ最終ルールを示すフラグ
編集後の反映&動作検証
- 編集した
.htaccessをサーバーへアップロード - ブラウザキャッシュをクリア or プライベートウィンドウでテスト
- curlコマンドでステータスコードを確認
curl -I https://example.com/old-page/
- リダイレクトの繰り返しがないか、ステータスが期待通りかをチェック ✅
- 問題があれば、バックアップした
.htaccess.bakを戻して復旧
注意点:サーバーキャッシュやCDNが有効な場合は、一時的に無効化してから動作確認してください 🔍
PHPコードでリダイレクトを組み込む方法
functions.phpへの記述ポイント
WordPressのテーマフォルダ内にあるfunctions.phpに、リダイレクト用のフックを追加します。
template_redirectアクションを使うと、テンプレート読み込み前に転送を実行- コードは子テーマか専用プラグインに入れると、テーマ更新で消えるリスクを回避
add_action('template_redirect', 'my_custom_redirect');
function my_custom_redirect() {
// ここに条件分岐とリダイレクト処理を記述
}
ポイント:exit;を忘れると、後続コードも実行されて意図しない動作になるので注意 ⚠️
header() 関数だけで済ませるシンプル実装
もっとも基本的なリダイレクトは、header()だけで実現可能です。
if ( is_page('old-page-slug') ) {
header("Location: " . home_url('/new-page-slug/'), true, 301);
exit;
}
| 要素 | 説明 |
|---|---|
| is_page() | 特定のページかどうかを判定 |
| home_url() | サイトURLを動的に取得 |
| 301 | 永続的転送(SEO評価の継承) |
| exit; | 転送後に後続処理を停止 |
- メリット:コードが極めてシンプルで読みやすい
- デメリット:複雑なルールは自力で実装が必要
プラグイン不要で軽量に済ませたいケース
「プラグインは増やしたくない」「外部依存を避けたい」場合に最適。
- テーマやmu-pluginフォルダにPHPスニペットを直接配置
- 必要最低限の条件分岐で、サーバー負荷を最小化 🚀
// MU-Pluginとして配置すると、テーマを切り替えても有効
add_action('init', function(){
if ( strpos($_SERVER['REQUEST_URI'], '/old-blog/') === 0 ) {
wp_safe_redirect(site_url('/new-blog/'), 302);
exit;
}
});
- wp_safe_redirect():同一サイト内の転送で安全性アップ
- strpos() 条件でURLの先頭部分だけマッチさせると軽量
- 302(一時転送)を使えば、将来元に戻すときも簡単
Tip:機能限定のスニペットなら、バージョンアップや管理がラクになります✨
トラブルシューティング&運用上の留意点
意図しない自動転送が起きる原因と対策
- ルールの重複・競合
- 同じURLを対象に複数ルールを設定すると思わぬ転送が発生
- 対策:使用中のリダイレクト一覧を定期的に見直し、不要なルールは削除
- キャッシュの影響
- サーバーキャッシュやブラウザキャッシュが古い設定を保持
- 対策:キャッシュをクリア後に再テスト、CDN利用時は配信内容をリフレッシュ🔄
- プラグイン・テーマの干渉
- 他プラグインやテーマ機能で自動リダイレクトが実行される場合あり
- 対策:一時的にプラグインを無効化し、どの機能が転送を起こしているか特定
セキュリティ面からの考慮(マルウェア/ハッキング)
- 無許可リダイレクト
- 攻撃者が意図しない外部サイトへ誘導するトリックに利用される可能性
- 対策:信頼できるプラグインのみ使用し、プラグインの更新を怠らない🔒
- コード改ざんチェック
- functions.php や .htaccess が書き換えられていないか定期監査
- 対策:変更履歴をGitなどで管理し、改変があれば即座にロールバック
SEO評価を維持するための最適なリダイレクト運用
| ポイント | 説明 |
|---|---|
| 適切なステータス選択 | 301(恒久的)か302(一時的)を用途に応じて使い分け🏷️ |
| 内部リンクの更新 | リダイレクトに頼らず、新URLへ直接リンクを張り替える |
| チェーン転送の回避 | A→B→C の多重リダイレクトは評価分散の原因に。直接A→Cへ誘導 |
| 定期的なリンクチェック | サーチコンソールやサイト監査ツールで切れたリンクを発見🔍 |
- Tip:リダイレクトを設定したら、すぐに内部リンクも修正しておくと手間削減に✨
モニタリング & メンテナンスの方法
- ログ確認
- プラグインのログ機能やサーバーログでアクセス状況を定期分析
- 異常なリクエスト数の急増は問題発生のサイン
- 自動テスト導入
- CI/CDパイプラインにcurlチェックを組み込み、デプロイごとにリダイレクト動作を検証🚀
- 定期的なルール整理
- 古くなった転送設定は月次でレビューし、不要なものは削除またはコメントアウト
- アラート設定
- 失敗ステータス(4xx/5xx)が続く場合にメール通知を受け取る仕組みを構築
継続的な見直しが、トラブルを未然に防ぎ、安定したサイト運用を支えます!
まとめ
この記事でご紹介したポイントを改めて振り返ります。
- リダイレクトの役割
- 古いURL→新URLへの自動誘導で404を防ぎ、SEO評価も継承
- 301 vs 302 の使い分け
- 永続的移動には301、一時的転送には302を選択
- プラグイン活用のメリット
- RedirectionならGUIで直感的に設定・ログ管理が可能
- 手動実装の自由度
.htaccessやPHPのheader関数でサーバーレベル/テーマレベルの制御が自在
- 運用上の注意点
- 無限ループやキャッシュ影響を避け、定期的に動作確認を実施
これらの手法を組み合わせれば、サイトリニューアルやURL変更もスムーズに実施できます。
ぜひ本ガイドを参考に、あなたのWordPressサイトを安全かつ快適にリダイレクトでサポートしてください!

