WORDPRESS TECHNICAL GUIDE
WordPressでリダイレクトを設置する方法
URL変更やサイト移転で必要になる301リダイレクトを中心に、 プラグイン・.htaccess・functions.phpを使った設定方法を 初心者にも分かりやすく解説します。
この記事で分かること
WordPressでリダイレクトを設定する代表的な方法、 301と302の違い、設定時の注意点、リダイレクトループや 404エラーが発生した場合の確認方法までまとめて解説します。
01
リダイレクトとは
リダイレクトとは、ユーザーがアクセスしたURLから、 別のURLへ自動的に転送する仕組みです。
例えば、以前は
https://example.com/old-page/
で公開していたページを、
https://example.com/new-page/
に変更したとします。
何も設定しなければ、古いURLへアクセスしたユーザーには 404エラーが表示される可能性があります。そこで古いURLから 新しいURLへのリダイレクトを設定すると、ブックマークや 検索結果から古いURLを開いた場合でも、新しいページへ自動的に移動できます。
リダイレクトは、単にユーザーを転送するだけではありません。 URL変更前のページが検索エンジンから評価されていた場合、 適切なリダイレクトを設定することで、その評価を新しいURLへ 引き継ぎやすくなります。
リダイレクトが必要になる主なケース
- 記事や固定ページのURLを変更した
- 複数の記事をひとつのページへ統合した
- 古いページを削除し、代替ページへ案内したい
- ドメインを変更してサイトを移転した
- HTTPからHTTPSへ移行した
- wwwあり・wwwなしのURLを統一したい
- キャンペーン終了後に通常ページへ転送したい
02
301・302リダイレクトの違い
リダイレクトには複数のHTTPステータスコードがあります。 WordPressサイトの運用で特によく使われるのは、 「301」と「302」です。
PERMANENT
301 恒久的な転送
URLを今後元に戻す予定がなく、恒久的に新しいURLへ変更する場合に使用します。 記事URLの変更、ページ統合、ドメイン移転などで一般的に利用されます。
TEMPORARY
302 一時的な転送
メンテナンスや期間限定キャンペーンなど、 将来的に元のURLへ戻す可能性がある場合に使用します。 恒久的なURL変更には通常301を選択します。
URL変更が恒久的なら301、一時的なら302と考えると分かりやすいでしょう。 どちらを使用するか判断できない場合は、ページを元のURLへ戻す予定が あるかどうかを基準にします。
ほかにも、307や308というステータスコードがあります。 307は一時的な転送、308は恒久的な転送ですが、 転送前のHTTPメソッドを維持する点に特徴があります。 通常の記事URLを移転するだけであれば、301または302を使うケースが一般的です。
03
WordPressでリダイレクトを設定する4つの方法
WordPressでリダイレクトを設定する方法は、大きく分けて次の4つです。
プラグイン 管理画面から設定でき、初心者でも扱いやすい方法です。
.htaccess Apacheサーバーで、WordPressが動作する前に転送を処理します。
functions.php WordPressの条件分岐を使い、ページごとに転送先を変更できます。
サーバー設定 レンタルサーバーの管理画面やNginxの設定ファイルを利用します。
操作に慣れていない場合はプラグイン、 少数の固定ルールを高速に処理したい場合は .htaccessやサーバー設定が候補になります。
ログイン状態、投稿タイプ、カテゴリー、ユーザー権限など、 WordPress内部の条件を使って転送先を変更したい場合は、 functions.phpまたは独自プラグインが適しています。
04
方法1:プラグインを使って設定する
初めてリダイレクトを設定する場合は、 リダイレクト管理プラグインを利用する方法が比較的簡単です。 FTPソフトでファイルを編集する必要がなく、 WordPressの管理画面から転送元と転送先を登録できます。
基本的な設定手順
-
STEP 1
WordPress管理画面の「プラグイン」から、 リダイレクト管理用プラグインを検索してインストールします。
-
STEP 2
プラグインを有効化し、リダイレクト設定画面を開きます。
-
STEP 3
転送元URLに古いページのパス、 転送先URLに新しいページのURLを入力します。
-
STEP 4
HTTPステータスコードを選択し、設定を保存します。
-
STEP 5
シークレットウィンドウなどで古いURLへアクセスし、 正しく転送されるか確認します。
設定例
- 転送元
/old-page/- 転送先
https://example.com/new-page/- ステータス
301
プラグインによっては、404エラーの記録、 正規表現による一括転送、転送回数の確認、 CSVによるインポート・エクスポートなども利用できます。
リダイレクト機能を持つSEOプラグインやセキュリティプラグインを すでに導入している場合があります。複数の場所で同じURLの リダイレクトを設定すると、競合やループの原因になるため注意してください。
05
方法2:.htaccessで設定する
Apacheを利用しているサーバーでは、
WordPressのルートディレクトリにある
.htaccessへリダイレクトルールを追加できます。
.htaccessはサーバーの動作に関わる重要なファイルです。 記述を間違えるとサイト全体が表示されなくなることがあるため、 編集前に必ずバックアップを保存してください。
1ページだけ301リダイレクトする例
Redirect 301 /old-page/ https://example.com/new-page/
左側に転送元のパス、右側に転送先の完全なURLを記述します。
転送元には原則としてドメインを含めず、
/から始まるパスを指定します。
mod_rewriteを使う例
RewriteEngine On
RewriteRule ^old-page/?$ https://example.com/new-page/ [R=301,L]
R=301は301リダイレクト、
Lは条件に一致した場合に、
その時点でルールの処理を終了する指定です。
ドメイン全体を新ドメインへ転送する例
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:www\.)?old-example\.com$ [NC]
RewriteRule ^(.*)$ https://new-example.com/$1 [R=301,L]
この設定では、旧ドメイン以下のパスを維持したまま、
新ドメインへ転送します。
例えば、旧サイトの
/service/web/へアクセスした場合は、
新サイトの/service/web/へ転送されます。
独自のリダイレクトルールは、通常
# BEGIN WordPressより前へ記述します。
WordPressが自動生成する範囲内に記述すると、
パーマリンク設定の保存時に上書きされる可能性があります。
WordPress公式でも、.htaccessはApacheがディレクトリ単位の 設定変更を処理するためのファイルであり、 WordPressでは主にパーマリンク処理に使用されると説明されています。
06
方法3:functions.phpで設定する
WordPressの条件分岐を利用してリダイレクトしたい場合は、 テーマのfunctions.phpまたは独自プラグインへ処理を追加します。
ページの種類を判定してリダイレクトする場合は、
テンプレートが決定される直前に実行される
template_redirectフックを利用できます。
特定の固定ページを転送する例
function lab_redirect_old_page() {
if ( is_page( 'old-page' ) ) {
wp_safe_redirect(
home_url( '/new-page/' ),
301
);
exit;
}
}
add_action( 'template_redirect', 'lab_redirect_old_page' );
is_page('old-page')で、
スラッグが「old-page」の固定ページかどうかを判定しています。
条件に一致した場合は、サイト内の「new-page」へ301で転送します。
wp_safe_redirect()は、
転送先のホストを検証してからリダイレクトするWordPress関数です。
サイト内URLなど、許可されたホストへ転送する場合に利用できます。
投稿IDを指定する例
function lab_redirect_by_post_id() {
if ( is_single( 123 ) ) {
wp_safe_redirect(
home_url( '/column/new-article/' ),
301
);
exit;
}
}
add_action( 'template_redirect', 'lab_redirect_by_post_id' );
スラッグは変更される可能性がありますが、投稿IDは通常変わりません。 特定の記事を確実に判定したい場合は、投稿IDによる指定も有効です。
外部サイトへ転送する例
function lab_redirect_external_page() {
if ( is_page( 'external-service' ) ) {
wp_redirect(
'https://external.example.com/service/',
302,
'Lab Redirect'
);
exit;
}
}
add_action( 'template_redirect', 'lab_redirect_external_page' );
外部ドメインへ転送する場合は、
wp_redirect()を使用する方法があります。
ただし、ユーザー入力をそのまま転送先へ使用すると、
意図しない外部サイトへ誘導するオープンリダイレクトの
原因になる可能性があります。
親テーマのfunctions.phpへ直接記述すると、 テーマ更新時にコードが消える可能性があります。 継続的に利用する処理は、子テーマまたは サイト専用の独自プラグインで管理する方法が安全です。
07
方法4:サーバー側で設定する
レンタルサーバーによっては、管理画面に 「URL転送」「リダイレクト設定」などの機能が用意されています。 ファイルを直接編集せずに設定できるため、 サーバー管理画面に機能がある場合は選択肢になります。
ただし、設定できる内容はサーバー会社によって異なります。 転送元に指定できる範囲、クエリーパラメーターの扱い、 301と302の選択可否などを確認してください。
Nginxを利用している場合
Nginxでは通常、.htaccessを使用しません。 サーバー設定ファイルへリダイレクトルールを追加します。
location = /old-page/ {
return 301 https://example.com/new-page/;
}
マネージドサーバーや共用サーバーでは、 利用者がNginxの設定ファイルを直接編集できない場合があります。 その場合はサーバー管理画面の機能を利用するか、 サーバー会社へ設定方法を確認します。
08
設定後の確認方法
リダイレクトは、設定を保存しただけで完了ではありません。 転送先とステータスコードが正しいか必ず確認します。
ブラウザで確認する
ブラウザのシークレットウィンドウを開き、 転送元のURLを直接入力します。 期待したページへ移動し、アドレスバーに正しいURLが 表示されることを確認してください。
通常ウィンドウでは、ブラウザに以前のリダイレクトが キャッシュされている場合があります。 設定変更後の確認にはシークレットウィンドウが便利です。
開発者ツールで確認する
Chromeなどの開発者ツールで「Network」を開き、
転送元URLへアクセスします。
最初のリクエストを選択し、ステータスコードと
レスポンスヘッダーのLocationを確認します。
確認する項目
- Status Code
301または302- Location
- 意図した転送先URLになっているか
- 転送回数
- 不要な多段転送が発生していないか
コマンドで確認する
curl -I https://example.com/old-page/
レスポンスヘッダーに
HTTP/2 301や
location: https://example.com/new-page/
などが表示されれば、ステータスと転送先を確認できます。
09
リダイレクトでよくあるトラブル
リダイレクトループが発生する
転送元と転送先が互いにリダイレクトされる状態になると、 ブラウザに「リダイレクトが繰り返し行われました」 などのエラーが表示されます。
例えば、プラグインではAからBへ、 .htaccessではBからAへ転送する設定がある場合、 AとBの間を繰り返し移動してしまいます。
プラグイン、.htaccess、サーバー管理画面、 CDN、functions.phpなどに同じURLの設定がないか確認してください。
管理画面まで転送される
正規表現やドメイン全体の転送条件が広すぎると、
/wp-admin/や
/wp-login.phpまで転送され、
WordPressへログインできなくなることがあります。
管理画面へ入れなくなった場合は、FTPまたはサーバーの ファイルマネージャーから、直前に編集した .htaccessやfunctions.phpを元に戻します。
転送先が404になる
転送処理自体が成功していても、転送先のURLが間違っていれば 404エラーになります。URLのスペル、末尾のスラッシュ、 パーマリンク設定、公開状態を確認してください。
変更前の転送が残っている
301リダイレクトはブラウザやCDNにキャッシュされることがあります。 ルールを変更しても以前の転送先へ移動する場合は、 ブラウザ、WordPressキャッシュプラグイン、 サーバーキャッシュ、CDNのキャッシュを順番に確認します。
リダイレクトチェーンが発生している
AからB、BからCというように複数回の転送が発生すると、 表示までのリクエストが増えます。可能であれば、 AからCへ直接転送するようにルールを整理します。
.htaccessやfunctions.phpを編集する前に、 対象ファイルとデータベースのバックアップを取得してください。 本番サイトで設定する前に、ステージング環境で検証できるとより安全です。
10
まとめ
WordPressでリダイレクトを設定する方法には、 プラグイン、.htaccess、functions.php、 サーバー管理画面などがあります。
管理画面から手軽に設定したい場合はプラグイン、 Apache上でシンプルなURL転送を処理したい場合は.htaccess、 WordPressの投稿情報やログイン状態に応じて転送したい場合は functions.phpが候補になります。
恒久的なURL変更には301、一時的な転送には302を使用するのが基本です。 ただし、重要なのはステータスコードを選ぶことだけではありません。 転送元と転送先を正しく対応させ、不要な多段転送や リダイレクトループを発生させないことが大切です。
設定後はブラウザでページが表示されるかを見るだけでなく、 開発者ツールやcurlを使ってステータスコードと Locationヘッダーを確認しましょう。
URLはユーザーのブックマーク、外部サイトからのリンク、 検索エンジンの登録情報など、さまざまな場所で利用されています。 ページのURLを変更するときは、コンテンツの移動と リダイレクト設定をひとつの作業として考えることが、 ユーザビリティとサイト評価を守るポイントです。
CONCLUSION
URLを変更したら、適切な転送設定を忘れずに
古いURLを放置せず、ユーザーと検索エンジンを 正しいページへ案内できる状態を整えましょう。