WordPress の 301 リダイレクト方法まとめ(.htaccess メイン)

WordPress で運営しているブログ・サイトの「301 リダイレクト」設定方法を、以下のケース別にまとめています。

  • 各ページのパーマリンクを変更したとき
  • 一部のページを別のサイトに移動したとき
  • パーマリンク設定を変更したとき
  • ドメインを変更したとき
  • ルート / サブドメイン / サブディレクトリに変更したとき

移行そのものに関しては以下の記事をご覧ください。

WordPress 記事移行方法まとめ

.htaccess によるリダイレクト

すべてのリダイレクトは .htaccess の編集で対応できます。

各ページのパーマリンクを変更したとき

リダイレクト元
  • https://example.com/before/
リダイレクト先
  • https://example.com/after/

同じサイト(ドメイン)内でパーマリンクを変えるとき、最も簡単なコードは以下のとおりです。

Redirect 301 /before/ /after/

上記のコードでは、パラメーター付きの URL は転送されません(広告や一部 SNS からのアクセスには、パラメーターが付きます)。

パラメーター付きの URL も転送したい場合は、以下のコードになります。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ /after/$1 [R=301,L,QSA]

一部のページを別のサイトに移動したとき

リダイレクト元
  • https://example.com/before/
リダイレクト先
  • https://example.jp/before/
  • https://blog.example.com/before/
  • https://example.com/blog/before/

一部のページを別のサイト(サブディレクトリやサブドメインを含む)に移動するとき、最も簡単なコードは以下のとおりです。

# 別ドメインに移動
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 が自動的に変更後のパーマリンク構造にリダイレクトしてくれるためです。

ここでは、その他の構造から「投稿名」に変更するパターンのみご紹介します。

変更前
  • /%year%/%monthnum%/%day%/%postname%/(日付と投稿名)
  • /%year%/%monthnum%/%postname%/(月と投稿名)
  • /archives/%post_id%(数字ベース)
  • /%post_id%/(数字のみ / カスタム構造)
変更後
  • /%postname%/

.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 を使うと簡単です。

ドメインを変更したとき

リダイレクト元
  • https://example.com/
リダイレクト先
  • https://example.jp/

サイトのドメインを変更するとき(ドメインを載せ替えるとき)のコードは、以下のとおり。

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

上記コードが書かれた .htaccess を残しておけば、リダイレクト元の WordPress を削除しても問題ありません。

サーバーの仕様にもよりますが、WordPress のドメイン載せ替えは「別の WordPress に変更」という形になります。

ルート / サブドメイン / サブディレクトリに変更したとき

リダイレクト元
  • https://example.com/
  • https://blog.example.com/
  • https://example.com/blog/
リダイレクト先
  • https://example.com/
  • https://blog.example.com/
  • https://example.com/blog/

同じドメイン内でサイトを丸ごと移動する場合、サブディレクトリのみやや扱いが難しくなります。

# ルートからサブドメインに移動
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」を使うほうが簡単です。

  • 各ページのパーマリンクを変更したとき
  • 一部のページを別のサイトに移動したとき

各ページのパーマリンクを変更

リダイレクト元
  • https://example.com/before/
リダイレクト先
  • https://example.com/after/

サイト内でリダイレクトするときは、ドメインを省略してかまいません(ドメインを含んだ URL をそのままコピペしても OK。プラグインが自動的に調整してくれます)。

オプションでチェックが入っている「大文字小文字の区別なし」「スラッシュ無視」は、そのままの状態で大丈夫です。

  • ソース URL:/before/
  • ターゲット URL:/after/
ページのパーマリンクを変更するときの Redirection 設定

一部のページを別のサイトに移動

リダイレクト元
  • https://example.com/before/
リダイレクト先
  • https://example.jp/before/

他のサイトにリダイレクトさせるときは、「ターゲット URL」にドメインを含めた URL をコピペするだけです。

  • ソース URL:/before/
  • ターゲット URL:https://example.jp/before/
ページを別サイトに移動するときの Redirection 設定

サイト全体の転送には向かない

Redirection は正規表現を扱えるので、パーマリンク設定変更やサイト全体の移行も処理できます。

しかし、以下の場合は設定したリダイレクトが無効になってしまいます。

  • リダイレクト元の WordPress を削除した場合
  • 何らかのトラブルでプラグインが停止した場合

「全体的にリダイレクトするなら .htaccess」「少数ページをリダイレクトするなら Redirection」という使い分けがおすすめです。

301 リダイレクトに関する FAQ

WordPress の 301 リダイレクトに関し、よくいただくご質問を以下に掲載しています。

Q

そもそも 301 リダイレクトって何?

A

ユーザーや検索エンジンが古い URL にアクセスしたさい、自動的に新しい URL に転送する仕組みです。

ユーザーは新しい URL を探さなくてすみますし、検索エンジンは古い URL から新しい URL へ検索評価を引き継ぎます。

ブログ運営者が覚えておきたい HTTP ステータスコード

Q

「301 リダイレクト」と「302 リダイレクト」の違いは?

A
  • 301:恒久的なリダイレクト
  • 302:一時的なリダイレクト

ただし、「302」のまま長期間放置しておくと、検索エンジンは「301」と同じように扱います。パーマリンク変更やドメイン載せ替えなら、「301」を使っておけば問題ありません。

Q

Search Console のエラーが消えません

A

Search Console インデックス登録レポートの「ページにリダイレクトがあります」は、エラーではなく確認の項目です。

「リダイレクト先の URL をインデックス登録しました」という意味なので、意図して設定したリダイレクトであれば、レポートに表示されているのが正しい形です。

Search Console「ページのインデックス登録レポート」への適切な対処方法

Q

301 リダイレクトすれば検索順位は落ちない?

A

URL の変更は、良くも悪くも検索順位に影響します。

301 リダイレクトで検索評価を 100 % 引き継ぐとは限らず、検索順位が一時的または永続的に低下する可能性があります。

順位が上がる(戻る)可能性もありますが、コアアップデートなどで落ちたサイトのドメインを何度も変更していると、手動ペナルティが課せられるかもしれません。

Google コアアップデートで検索順位が低下したときの対処法

Q

301 リダイレクトはいつまで残しておけばよい?

A

可能であれば、サイト運営を続けているかぎりずっと残しておくのが理想的です。

古い URL への被リンクが完全にゼロになり、検索エンジンも古い URL をクロールしていないようであれば外してもよいかもしれません。それでも最低 1 年はリダイレクトの維持をおすすめします。

まとめ

.htaccess の編集に失敗すると、500 エラーなどでサイトが表示されなくなるおそれがあります。

WordPress で 500 Internal Server Error になる原因と解決策

ページ単位でリダイレクトするなら、プラグイン「Redirection」がおすすめ。

WordPress 初心者であれば、ドメインの載せ替えやサブドメイン / サブディレクトリ間の移行など、全体的に変更するときのみ .htaccess で設定するとよいですね。

エラーが出て手に負えなくなった、ドメイン変更を代行してほしい、という場合はお気軽にご相談ください。

Author

Naifix 編集部
Web コンサルティング業務を中心に、サイト制作・コンテンツ販売・メディア運営代行業務を行っております。当サイト(Naifix)では、おもにブログ初心者向けのノウハウを無料で配信しています。