WordPressのパーマリンクを「投稿名のみ」から「カテゴリー+投稿名」に変更した時に旧URLへのアクセスを新しいURLへ自動転送する方法

WordPressのパーマリンクを、

投稿名のみ」つまり「/%postname%/

に設定してあったあるサイトで、

カテゴリー名+投稿名」つまり「/%category%/%postname%/

に変更する必要性が生じてしまいました。

変更は、管理画面の「パーマリンク設定」で簡単にできます。

ですが、このパターンでパーマリンクを変えてしまうと、旧URLへのアクセスが新URLリダイレクトされず、これまでに獲得した外部からの被リンクや、Googleなどの検索インデックスなどが全て無駄になってしまいます。

さすがにそれはまずいため、ちょっと強引でも良いからということで、

パーマリンクを「投稿名のみ」から「カテゴリー+投稿名」に変更した時に、旧URLへのアクセスを新しいURLへ301リダイレクトする

カスタマイズをしてみました。

301リダイレクトは、Googleが推奨している、検索インデックスが無駄にならない旧URLから新URLへの自動転送の方法です。

カスタマイズ方法

やり方としては、以下のコードをfunctions.phpに追加しました。

他サイト由来のコードと名前が衝突しないよう、コード中に本サイトのドメイン名「matsmotojp」を使っています。

概説

  1. トップページのURL($home_url)とリクエストされたURL($req_url)から、トップページからの相対パス($path)を求める。
  2. 相対パス($path)が「/投稿名/」に該当するパターンの時だけ投稿名(スラッグ)で投稿($posts)があるか検索する。
  3. 検索の結果、もし該当する投稿($posts)があれば、その投稿の新しいURLに301リダイレクトする。

ということをやってます。

また、管理画面では動作しないように、「!is_admin()」を処理の条件に入れてあります。

で、これを適用して動作を確認してみた結果、無事に「投稿名のみ」のパーマリンクから「カテゴリー+投稿名」のパーマリンクへ自動的に301リダイレクトされるようになりました。

WordPress ver.4.9.1で確認しました。

ただし、適用したサイトは、単純な投稿と固定ページしかないため、カスタム投稿などについては確認できていませんし、正直なところ対応するのかどうかよくわかっていません。

なお、Googleのインデックスのことだけを考えるなら、この301リダイレクト処理を設定後、ある程度の時間が経過してGoogleのインデックスが新しいURLにすっかり置きかわれば、この処理は削除しても問題ありません。

ですが、もし、他サイトからの被リンク経由での訪問者のことも考えるなら、残しておいたほうが良いのかなとも思います。

ちなみに、URLが変わるとSNSのシェア数などは0からの再スタートになってしまいますが、これは、しかたが無さそうですね。

当記事でご紹介している方法は初心者向きではありません。子テーマの構成ファイルを直接編集する方法ですので、失敗すると公開サイトも管理画面も全く表示されなくなる場合があります。ご注意下さい。
当サイトでご紹介しているWordPressのカスタマイズ方法は、何れも管理人が実際に試してみて動作した方法ですが、WordPressやテーマ、プラグイン、PHPその他のバージョンや設定によってうまく動作しない可能性もあります。ご了承下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です