CreaTools LogoCreaTools
Tips

WordPressリダイレクト設定で避けるべき失敗

2025-09-28

この記事が解決する状況

あなたの状況読むべきセクション
リダイレクトを設定したい設定前に確認すること
301を入れたのに旧URLが検索結果に残るGoogleクローラー視点
リダイレクトが効いているか確認したい設定後の確認
リダイレクトループになった避けるべきパターン
SEO評価を引き継ぎたい301と302の違い

「301を入れれば終わり」ではない。設定後の確認とサーチコンソールでの追跡が重要。


よくある失敗

「301リダイレクトを設定したのに、旧URLが検索結果に残り続ける」

設定自体は正しいが、リダイレクトチェーンになっていた。Googleは途中で追跡を諦める。


設定前に確認すること

リダイレクトの種類を決める

コード用途SEO評価
301恒久的な移転引き継ぐ
302一時的な移転引き継がない

基本は301。 302はA/Bテストやメンテナンス時のみ。

最終URLを確認する

❌ A → B → C(チェーン)
✓ A → C(直接)

途中経路があると、SEO評価の受け渡しが減衰する。

既存のリダイレクト設定を確認する

確認場所方法
.htaccessFTPで直接確認
プラグインRedirection等の設定画面
サーバー設定管理画面でリダイレクト設定
CDNCloudflare等のルール

複数箇所で設定が競合すると、予期しない挙動になる。


方法の選び方

方法向いているケース
.htaccess単純なURL変更、大量のリダイレクト
functions.php条件分岐が必要な場合
プラグイン非エンジニアが管理する場合

.htaccess での設定

最も高速。PHPが実行される前に処理される。

単一ページ

Redirect 301 /old-page/ https://example.com/new-page/

ディレクトリ丸ごと

RedirectMatch 301 ^/old-category/(.*)$ https://example.com/new-category/$1

ドメイン変更

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]

www統一(なしに)

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

HTTPS強制

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

functions.php での設定

条件分岐が必要な場合。

特定ページ

add_action('template_redirect', function() {
    if (is_page('old-page')) {
        wp_redirect(home_url('/new-page/'), 301);
        exit;
    }
});

非ログインユーザーをリダイレクト

add_action('template_redirect', function() {
    if (is_page('members-only') && !is_user_logged_in()) {
        wp_redirect(wp_login_url(get_permalink()));
        exit;
    }
});

プラグインでの設定

大量のリダイレクトを管理する場合。

プラグイン特徴
Redirection定番、ログ機能あり
Safe Redirect Managerシンプル、10up製
Rank Math / Yoast SEOSEOプラグイン内蔵

設定後の確認

curlコマンド

curl -I https://example.com/old-page/
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page/

リダイレクトチェーンの確認

curl -ILs https://example.com/old-page/ | grep -E "HTTP|Location"

複数のLocationが出たらチェーンになっている。

オンラインツール

  • httpstatus.io
  • redirect-checker.org

Googleクローラー視点

なぜ旧URLが検索結果に残るか

原因対処
クローラーがまだ来ていないサーチコンソールでURL検査
リダイレクトチェーン直接最終URLへリダイレクト
302になっている301に変更
内部リンクが旧URLのまま内部リンクを新URLに更新

リダイレクト後に必ず確認すること

確認項目方法
リダイレクトが正しく動作しているかcurl -I で確認
Googleに認識されているかサーチコンソール → URL検査
旧URLのインデックス状況サーチコンソール → URL検査
被リンクの評価が引き継がれているかサーチコンソール → リンク

サーチコンソールでの確認手順

  1. URL検査ツールで旧URLを入力
  2. 「Googleにインデックス登録をリクエスト」は押さない(リダイレクト先に自動で転送されるはず)
  3. 新URLをURL検査で確認し、インデックス状況を確認
  4. 問題があれば「インデックス登録をリクエスト」

インデックス削除が必要なケース

ケース対処
301設定後も旧URLがインデックスに残り続けるサーチコンソール → 削除ツール(一時的)
重複コンテンツとして扱われているcanonicalタグも設定

⚠️ 注意: 削除ツールは「一時的な非表示」。301が正しく設定されていれば、自然に旧URLは消える。


避けるべきパターン

リダイレクトループ

A → B → A (無限ループ)

ブラウザが「リダイレクトが多すぎます」エラーを表示。

キャッシュの罠

301はブラウザにキャッシュされる。テスト時は302で確認し、確定したら301に変更。

キャッシュを消す方法:

  • ブラウザのキャッシュクリア
  • シークレットモードで確認
  • 別のブラウザで確認

.htaccessの記述順序

上から順に評価される。より具体的なルールを先に書く。

# 具体的なルールを先に
Redirect 301 /old-category/specific-page/ https://example.com/specific-page/

# 一般的なルールを後に
RedirectMatch 301 ^/old-category/(.*)$ https://example.com/new-category/$1

トレイリングスラッシュの統一

スラッシュあり・なしの両方にアクセスできると、重複コンテンツになる。

# スラッシュありに統一
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://example.com/$1/ [R=301,L]

やってはいけないこと

NG理由
全部302でリダイレクトSEO評価が引き継がれない
テスト不足で本番適用リダイレクトループで全ページアクセス不能
内部リンクを旧URLのまま放置リダイレクト分の遅延が発生
.htaccessとプラグインで二重設定競合してループの原因に
リダイレクト設定後に確認しない問題に気づくのが遅れる

まとめ

  • リダイレクトチェーンは避ける(直接最終URLへ)
  • 設定前に既存のリダイレクトを確認
  • 基本は.htaccessで301
  • テスト時は302、確定したら301
  • 設定後は必ずcurlで確認
  • サーチコンソールでGoogleの認識状況を追跡

関連記事