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評価の受け渡しが減衰する。
既存のリダイレクト設定を確認する
| 確認場所 | 方法 |
|---|---|
| .htaccess | FTPで直接確認 |
| プラグイン | Redirection等の設定画面 |
| サーバー設定 | 管理画面でリダイレクト設定 |
| CDN | Cloudflare等のルール |
複数箇所で設定が競合すると、予期しない挙動になる。
方法の選び方
| 方法 | 向いているケース |
|---|---|
| .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 SEO | SEOプラグイン内蔵 |
設定後の確認
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検査 |
| 被リンクの評価が引き継がれているか | サーチコンソール → リンク |
サーチコンソールでの確認手順
- URL検査ツールで旧URLを入力
- 「Googleにインデックス登録をリクエスト」は押さない(リダイレクト先に自動で転送されるはず)
- 新URLをURL検査で確認し、インデックス状況を確認
- 問題があれば「インデックス登録をリクエスト」
インデックス削除が必要なケース
| ケース | 対処 |
|---|---|
| 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の認識状況を追跡
関連記事
- DNSレコードの調べ方と判断基準 — ドメイン変更時のDNS設定
- DNS切り替え前に新サーバーを確認する方法 — サーバー移行時の事前確認