WordPress で運営しているブログ・サイトの「301 リダイレクト」設定方法を、以下のケース別にまとめています。
移行そのものに関しては以下の記事をご覧ください。
.htaccess によるリダイレクト
すべてのリダイレクトは .htaccess の編集で対応できます。
各ページのパーマリンクを変更したとき
同じサイト(ドメイン)内でパーマリンクを変えるとき、最も簡単なコードは以下のとおりです。
Redirect 301 /before/ /after/
上記のコードでは、パラメーター付きの URL は転送されません(広告や一部 SNS からのアクセスには、パラメーターが付きます)。
パラメーター付きの URL も転送したい場合は、以下のコードになります。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ /after/$1 [R=301,L,QSA]
一部のページを別のサイトに移動したとき
一部のページを別のサイト(サブディレクトリやサブドメインを含む)に移動するとき、最も簡単なコードは以下のとおりです。
# 別ドメインに移動
Redirect 301 /before/ https://example.jp/before/
# サブドメインに移動
Redirect 301 /before/ https://blog.example.com/before/
# サブディレクトリに移動
Redirect 301 /before/ https://example.com/blog/before/
パラメーター付きの URL も転送したい場合は、以下のコードになります。
# 別ドメインに移動
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ https://example.jp/before/$1 [R=301,L,QSA]
# サブドメインに移動
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ https://blog.example.com/before/$1 [R=301,L,QSA]
# サブディレクトリに移動
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ https://example.com/blog/before/$1 [R=301,L,QSA]
パーマリンク設定を変更したとき
WordPress のパーマリンク設定(共通設定)を変更するさい、環境によってコードが異なります。
もともとが「基本」だった場合、リダイレクト設定は必要ありません。WordPress が自動的に変更後のパーマリンク構造にリダイレクトしてくれるためです。
ここでは、その他の構造から「投稿名」に変更するパターンのみご紹介します。
.htaccess はそれぞれ以下のとおり。
# 日付と投稿名から投稿名
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://example.com/$4
# 月と投稿名から投稿名
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ https://example.com/$3
# 数字ベースから投稿名
RedirectMatch 301 ^/archives/(\d+)$ https://example.com/?p=$1
# 数字のみから投稿名
RedirectMatch 301 ^/(\d+)$ https://example.com/?p=$1
※ %post_id%
から変更するとき、いったん「基本」にリダイレクトし、そこからさらに「投稿名」にリダイレクトする形になります。
Create Redirects | Yoast SEO を使うと簡単です。
ドメインを変更したとき
サイトのドメインを変更するとき(ドメインを載せ替えるとき)のコードは、以下のとおり。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://example.jp/$1 [R=301,L]
上記コードが書かれた .htaccess を残しておけば、リダイレクト元の WordPress を削除しても問題ありません。
サーバーの仕様にもよりますが、WordPress のドメイン載せ替えは「別の WordPress に変更」という形になります。
ルート / サブドメイン / サブディレクトリに変更したとき
同じドメイン内でサイトを丸ごと移動する場合、サブディレクトリのみやや扱いが難しくなります。
# ルートからサブドメインに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://blog.example.com/$1 [R=301,L]
# ルートからサブディレクトリに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule ^(.*)$ https://example.com/blog/$1 [R=301,L]
# サブドメインからルートに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
# サブドメインからサブディレクトリに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/blog/$1 [R=301,L]
# サブディレクトリからルートに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^blog/(.*) https://example.com/$1 [R=301,L]
# サブディレクトリからサブドメインに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^blog/(.*)$ https://blog.example.com/$1 [R=301,L]
RewriteRule
のリダイレクト先ドメインを変更して、「ルートから別ドメインのサブドメインへリダイレクト」という形にも対応できます。
プラグイン「Redirection」によるリダイレクト
以下のリダイレクトに関しては、.htaccess の編集ではなく、プラグイン「Redirection」を使うほうが簡単です。
各ページのパーマリンクを変更
サイト内でリダイレクトするときは、ドメインを省略してかまいません(ドメインを含んだ URL をそのままコピペしても OK。プラグインが自動的に調整してくれます)。
オプションでチェックが入っている「大文字小文字の区別なし」「スラッシュ無視」は、そのままの状態で大丈夫です。
一部のページを別のサイトに移動
他のサイトにリダイレクトさせるときは、「ターゲット URL」にドメインを含めた URL をコピペするだけです。
サイト全体の転送には向かない
Redirection は正規表現を扱えるので、パーマリンク設定変更やサイト全体の移行も処理できます。
しかし、以下の場合は設定したリダイレクトが無効になってしまいます。
- リダイレクト元の WordPress を削除した場合
- 何らかのトラブルでプラグインが停止した場合
「全体的にリダイレクトするなら .htaccess」「少数ページをリダイレクトするなら Redirection」という使い分けがおすすめです。
301 リダイレクトに関する FAQ
WordPress の 301 リダイレクトに関し、よくいただくご質問を以下に掲載しています。
そもそも 301 リダイレクトって何?
ユーザーや検索エンジンが古い URL にアクセスしたさい、自動的に新しい URL に転送する仕組みです。
ユーザーは新しい URL を探さなくてすみますし、検索エンジンは古い URL から新しい URL へ検索評価を引き継ぎます。
「301 リダイレクト」と「302 リダイレクト」の違いは?
- 301:恒久的なリダイレクト
- 302:一時的なリダイレクト
ただし、「302」のまま長期間放置しておくと、検索エンジンは「301」と同じように扱います。パーマリンク変更やドメイン載せ替えなら、「301」を使っておけば問題ありません。
Search Console のエラーが消えません
Search Console インデックス登録レポートの「ページにリダイレクトがあります」は、エラーではなく確認の項目です。
「リダイレクト先の URL をインデックス登録しました」という意味なので、意図して設定したリダイレクトであれば、レポートに表示されているのが正しい形です。
301 リダイレクトすれば検索順位は落ちない?
URL の変更は、良くも悪くも検索順位に影響します。
301 リダイレクトで検索評価を 100 % 引き継ぐとは限らず、検索順位が一時的または永続的に低下する可能性があります。
順位が上がる(戻る)可能性もありますが、コアアップデートなどで落ちたサイトのドメインを何度も変更していると、手動ペナルティが課せられるかもしれません。
301 リダイレクトはいつまで残しておけばよい?
可能であれば、サイト運営を続けているかぎりずっと残しておくのが理想的です。
古い URL への被リンクが完全にゼロになり、検索エンジンも古い URL をクロールしていないようであれば外してもよいかもしれません。それでも最低 1 年はリダイレクトの維持をおすすめします。
まとめ
.htaccess の編集に失敗すると、500 エラーなどでサイトが表示されなくなるおそれがあります。
WordPress で 500 Internal Server Error になる原因と解決策
ページ単位でリダイレクトするなら、プラグイン「Redirection」がおすすめ。
WordPress 初心者であれば、ドメインの載せ替えやサブドメイン / サブディレクトリ間の移行など、全体的に変更するときのみ .htaccess で設定するとよいですね。
エラーが出て手に負えなくなった、ドメイン変更を代行してほしい、という場合はお気軽にご相談ください。