WordPressでURLを別のURLにリダイレクト(自動転送)する方法

スポンサーリンク

WordPressのページをリダイレクト(自動転送)させたい

WordPressで一度投稿した記事を別のURLににリダイレクト(自動転送)させたいということは、まれにあると思います。

  • 記事のカテゴリを変更したのでURL(パーマリンク)が変更されてしまった
  • ブログを別のドメインに引っ越したので、URLが変更になった
  • 特定の記事やカテゴリを別のブログに移転させた

などなど。

WordPressは記事のパーマリンクを変えると自動的にリダイレクトさせてくれるようになっていますが、まれに期待通りにしてくれないときがあります。

昔よくあったのは「このページは引っ越しました。引っ越し先はこちら」みたいな表示。いま、そんな表示はほとんど見られません。

ページを閲覧している人にとっては「このページは移転したんだな」ということがよく分かっていいのかもしれないですが、Googleなどの検索エンジンに高評価を得ているページにとっては、評価を下げたり、なくしたりする結果になります。

検索エンジンの評価を保ったまま、元のページから移転先のページへ転送させる方法があります。

リダイレクトとよばれる方法です。

端末のブラウザがサーバーに対して「このページを読みたいです」とリクエストを送ると、サーバーはブラウザに対して「返事(レスポンス)」を返してきます。その返事の内容の種類のことを「HTTP Status(ステータス)」といいます。

リクエストの内容に問題がなく、ページが存在するときは「200 OK」というステータスが返ってきます。「問題ありません。はいどうぞ。」という意味です。

残念ながらページが存在しなかったときは「404 Not Found」(ページが見つかりません)が返ってきます。そのときはそのサイト(ブログ)の「ページが見つかりません」のページがブラウザに表示されます。

サーバーから「301 Moved Permanently」というステータスが返ってくることがあります。これは、このページは「恒久的に移動した」という意味で、移動先のURLも教えてくれます。

「301」のステータスを受け取ったブラウザは、サーバーに教えてもらった移動先のURLに自動的にアクセスします。ページを閲覧している人は何も意識することはないし、検索エンジンのクローラー(bot)に対しても同じ処理をさせるから、移転元のページの評価を移転先のページへ引き継げる、というわけです。

参考URLHTTP ステータスコード(ウィキペディア)

具体的な方法

WordPressでブログを開設すると、WEBの一番上の階層に「.htaccess」というファイルができています。このファイルは「アクセス制御ファイル」といって、サーバーの動作をいろいろ変更させるために存在しています。

ファイルはFTPなどの方法、または、「ファイルマネージャー」などとよばれる、レンタルサーバーのコントロールパネルなどにある機能を使ってダウンロード・アップロード、閲覧、編集ができます。

サーバーのファイルをバックアップするには?こちらの記事でWordPressのバックアップをする方法を書きました。WordPr...

.htaccessにリダイレクトの処理を追加する

.htaccessにリダイレクトの処理を書くことで、

  1. 個別のページ(記事)を別のURLに転送させる
  2. 条件に合致したページを別のURLを転送させる
  3. サイト(ブログ)全体を別のサイト(ドメイン)に転送させる

といったことができます。

基本的な書き方

リダイレクトの基本的な書き方は下記の通りです。

#
「#」から後ろは「コメント」といって、メモを書いたり、その行の処理を無効にするために使います。あとで何のために書いたのかを判別できるようにするために書きますが、特に必要なものではありません。

<IfModule mod_rewrite.c>
サーバーで「mod_rewrite」というモジュールが有効になっていれば、という意味です。WordPressが使えるレンタルサーバーは有効になっているはずです。

RewriteEngine On
リダイレクトの設定を有効にさせます。

RewriteRule
リダイレクトのルールですよ、という意味です。

転送元URL 転送先URL
「転送元のURL」を「転送先のURL」にリダイレクトさせます。

[R=301,L]
「R=301」は、HTTPステータス「301 Moved Permanently」でリダイレクトさせますよ、という意味です。「R」だけでも「301 Moved Permanently」になるのですが、「R=301」と書くことで書いた本人(⇐ぼくのことです)にわかりやすくしています。「R=302」「R=307」と書くことで、「301 Moved Permanently」以外のステータスでリダイレクトさせることが可能です。

「301」「302」「307」などの番号は、全て結果的にリダイレクトされますから、端末のブラウザの挙動に変わりはありませんが、Googleなどのクローラーに対しては意味が変わってきます。

「L」は、その行で条件が一致したら、次の行以降は処理を実行しませんよ、最後ですよ、「Last」という意味です。

この書き方を応用して、いろいろなリダイレクトの処理を行います。

WordPressをインストールしたときに既にリダイレクトの設定が書かれていますが、ここはWordPressの設定を変えたときに書き換えられますから、そこには書かず、ファイルのいちばん先頭に書きます。

WordPressが書き込んだ内容は下記のようになっています。

「# BEGIN WordPress」と書かれている行よりも前に書いてください。

個別のページをリダイレクトさせる

個別のページを転送するには、下記のように書きます。

これは、「maro-log.net」にあったブログの記事を抜き出して、「lab.maro-log.net」に移転したときに、実際に.htaccessに記載した内容を抜き出したものです。

例えば、
http://maro-log.net/it/wordpress/post-1217/
に対してアクセスがあったら、
http://lab.maro-log.net/it/wordpress/post-1217/
にリダイレクトさせています。

「^」は「先頭一致」させるときの書き方で、、http://~から始まるアドレスのうち、サーバー名を除いた部分が「it/wordpress/post-1217/」に一致したら、という意味です。

条件に合致したページをリダイレクトさせる

上記の場合は、個別のページを個別にリダイレクトさせましたが、「it/wordpress/」のカテゴリにある記事は全てリダイレクトさせる場合は下記のように書きます。

([a-z0-9-]*)
小文字のアルファベットと数字、「-」(ハイフン)と一致するとき、という意味です。「*」は「0回以上の繰り返し」を意味します。つまり、「小文字のアルファベットと数字、ハイフンが0回以上続く文字」に一致したら、という意味になります。私のブログのパーマリンクの設定に合わせています。

サイト(ブログ)全体をリダイレクトさせる

サイト(ブログ)全体を別のドメインに引っ越したときは、下記のように記述します。

「.」は、「改行以外の1文字」を表します。それに「*」が付いているので、「改行以外の文字が0回以上続くとき」という意味になります。

「maro.sakanoueno.me」から「maro-log.net」にドメインを引っ越した時に使いました。今でも「maro.sakanoueno.me」に対してアクセスがあるので、そのまま置いてあります。

プラグインでもできますが

WordPressのプラグインでも個別のページ(記事)をリダイレクトさせることができるものがあります。「Simple 301 Redirects」というプラグインです。少ないページをリダイレクトさせるには便利ですが、大量のページをリダイレクトさせるときは管理が難しくなりそうです。

また、ごくわずかとはいえ、PHPがリダイレクトの処理を行っているので、PHPが処理を行う前にApache(WEBサーバーのアプリ)が処理をしてしまう分、処理の速度は速いです。

.htaccessの編集は、サーバーエラーを引き起こす可能性があります。すぐに元に戻せるように編集前のファイルをバックアップしておくなどしてください。

WEBのシステムを作ったり保守したりするSE/プログラマというものをしています。

ブログやってますがブロガーではありません。週末WEB随筆家です。
まろと呼んでください。

いわゆる「画像直リンク」、画像の複製は固くお断りいたします。
スポンサーリンク

シェアしていただけるとうれしいです

フォローよろしくお願いします

NO IMAGE
この記事が気に入ったら
いいねをお願いします!

最新記事をお届けします。