意外と簡単【WordPress】特定のカテゴリの記事を独立して新ブログにして元ブログからリダイレクトさせた方法
2017/05/18
WordPressで作っているブログがありまして、その中の一部のカテゴリを別のブログとして独立させたんですね。
どうやったかと言うと、元のブログをマルッと移行というか複製を作りまして、その複製ブログから必要なカテゴリ以外の記事を削除して、もちろん元のブログのほうも移行するカテゴリの記事を削除しました。
例として説明すると、「A」「B」「C」というカテゴリがあったとして、その中から「B」のカテゴリを別ブログとして独立させるとします。
このとき元のブログは「B」のカテゴリを記事ごと削除して「A」「C」だけにして、複製ブログのほうは「A」「C」のカテゴリを記事ごと削除して「B」だけにしたわけです。
こうしてカテゴリ「B」だけを独立させた別ブログが出来たわけなんですが、ここで問題が起きますよね。
つまりGoogleなどの検索エンジンには、元のブログのほうのURLでインデックスされてますから、その検索結果から記事にアクセスがあった場合、元のブログのほうが表示されますよね。
でも、そちらは既に削除されてますから、「404 Not Found」になってしまうんですよ。
ですから、そうならないようにするために、該当の記事については元のブログから複製ブログのほうへリダイレクトするようにしたいと思ったんですね。
というわけで今回は、その方法について調べたことを記録として記事にしておきますよ。
Simple 301 Redirects
1つめは、WordPressのプラグインの「Simple 301 Redirects」を使う方法です。
まず元のブログの管理ページの「プラグイン」の「新規追加」で、「Simple 301 Redirects」で検索して該当のプラグインをインストールして有効化します。
すると管理ページの「設定」の中に「301 Redirects」という項目ができますので、そのページを開きます。
とてもシンプルな設定ページになってまして、「Request」と「Destination」の左右2つの入力フィールドがありますが、左がリダイレクトする元のページ、そして右がリダイレクトする先のページの指定をするようになってます。
1つずつ記事を指定しても良いんですが、今回は特定のカテゴリの全記事をリダイレクトさせるので、ワイルドカードで指定してやることにします。
この「Simple 301 Redirects」は、ワイルドカード指定できるところが便利なプラグインなんですね。
つまり、元のブログのリダイレクトさせるカテゴリが「Category-B」だとすると、左のフィールドには
/Category-B/*
と記入します。
ここは、元のブログのWordPressのルートからの相対パスで指定するようになってます。
そして複製ブログのリダイレクト先カテゴリを「Category-X」としたとすると、右のフィールドには、
http://copy-blog.com/Category-X/*
というように、絶対パスで指定してやります。
最後に「Use Wildcards?」のチェックボックスにチェックを入れて、「変更を保存」をクリックして設定を保存したら完了です。
こうすることで、カテゴリ「Category-B」の全記事へのアクセスが、複製ブログのほうへリダイレクトされるようになるわけですね。
Redirection
WordPressのリダイレクト用プラグインには「Redirection」というのもありまして、こちらはさらに細かいリダイレクトの指定ができて便利なんですね。
こちらも同様に、元のブログの管理ページの「プラグイン」の「新規追加」で、「Redirection」で検索して該当のプラグインをインストールして有効化します。
すると管理ページの「ツール」の中に「Redirection」という項目ができますので、そのページを開きます。
いくつかタブが並んでますが、リダイレクトのルール設定は「Redirects」というタブで行います。
ページの下にある「新しい転送ルールを追加」という部分で、追加する設定を記入するようになってますが。
上の「ソース URL」がリダイレクトする元のページの指定で、下の「ターゲット URL」がリダイレクトする先のページの指定をするようになってます。
その間にある「一致条件」は「URL のみ」で、「操作」は「URLへ転送」にしておきましょう。
記入方法は前述の「Simple 301 Redirects」と概ね同じですが、こちらはワイルドカードは使えません。
ただその代わりに、もっと細かい指定のできる正規表現が使えるんですね。
例えば前述の「Simple 301 Redirects」と同じ例で書くと、リダイレクト元のフィールドには
/Category-B/(.*)
として、リダイレクト先のフィールドには、
http://copy-blog.com/Category-X/$1
としてやることで、同じ結果を得ることができます(リダイレクト先の指定の「$1」には、リダイレクト元の指定の「()」(かっこ)の中身が適用されます)。
そうして「正規表現」のチェックボックスにチェックを入れて、「新しい転送ルールを追加」をクリックしてやれば設定が保存されて完了です。
正規表現が得意な人なら、ワイルドカードよりもさらに細かい設定をしたい場合は、こちらのプラグインを利用すると良いですね。
.htaccessファイル
プラグインはサイトの動作が重くなるから使いたくないという人には、「.htaccessファイル」を利用する方法もあります。
「Redirection」プラグインと同様に正規表現が使えますので、その点でも同じように便利と言えますね。
まず、WordPressのルートから「.htaccessファイル」をダウンロードしてやります。
その中には既にWordPressによる設定が記載されてますので、追加する設定はその上に記入しましょう。
設定は以下のようなフォーマットになります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule リダイレクト元のページのURL リダイレクト先のページのURL [R=301,L]
</IfModule>
実際の例として、これまでのリダイレクトの例と同様の場合、以下のようになります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule /Category-B/(.*) http://copy-blog.com/Category-X/$1 [R=301,L]
</IfModule>
各URLの指定の内容は、「Redirection」プラグインに記述したのと同じ内容となります。
続いて、設定を追加した「.htaccessファイル」を保存して、ダウンロードした元の場所に戻してやるわけですが、念のため元のファイルは上書きせずに、名前を変えて取っておきましょう。
万が一リダイレクトがうまくいかなかった場合、変更してアップロードしたファイルを削除して、元のファイルの名前を戻してやれば復旧が簡単にできますからね。
まとめ
というわけで、WordPressのリダイレクト方法は、やってみると割と簡単でした。
ただ注意が必要なのは、リダイレクトの設定を変更して実際に結果を確認する際は、ブラウザのキャッシュをクリアするということです。
一般のブラウザはリダイレクトの結果をキャッシュとして保存してしまうので、設定を変更して確認しようとしても、変更前のキャッシュの内容が表示されてしまうからなんですね。
例えばChromeでは、メニューの「その他のツール」から「閲覧履歴を消去」を選んで、「1時間以内」もしくは「過去1日」の「閲覧履歴」をクリアしてやります。
Firefoxでは、メニューの「オプション」で「詳細」ページを開き、「ネットワーク」タブの「キャッシュされた Web ページ」の「今すぐ消去」をクリックします。
面倒ですが、私はコレを知らずに結果が反映されないことに悩んで時間を無駄にしてしまいましたので、念のため。