WordPress
当WebサイトはサブドメインでWordPressを運用しています。カテゴリーページを作り、カテゴリー毎に一覧を表示するという、サイトの構成になっています。そこで、少し気になったのが、ディレクトリにアクセスがあつた場合に 404 エラーになってしまうということだ。
あまり気にする必要はないと思うが、良い機会なので、ディレクトリにアクセスがあった場合はTOPにリダイレクトする設置をしてみます!
目次
- 現状を把握する
- 「archives」部分を「category」に変更する
- カテゴリーの設定はこれ
- URLが変わったらサイトマップも編集するの?
- リダイレクトを設定する
- やっぱり重複ページもリダイレクトを設定する
- まとめ
公開日 : 2023年9月12日
現状を把握する
現時点はこんな感じ(before)
まず、サンプルの投稿記事の個別ページのURLは「web.imagemo.net/archives/462」です。今の状態は、WordPress側で設定しています。
WordPressログイン > 設定 > パーマリンク設定 > パーマリンクの構造が「数字ベース」となっています。この場合、投稿記事のIDが「462」でその前のディレクトリが「archives」ということです。
この状態から、「archives」を「category」に変更して、各カテゴリーのディレクトリの後に投稿記事のID「462」とするのが目的です。
「web.imagemo.net/各カテゴリー名/462」
「archives」部分を「category」に変更する
変更後はこんな感じ(after)
先ほどと同様にダッシュボード > 設定 > パーマリンク設定 > パーマリンクの構造で、「カスタム構造」を選択して「/%category%/%post_id%」を入力する。
カテゴリーの設定はこれ
カテゴリーの設定も忘れずに
WordPressログイン > ダッシュボード > カテゴリー
これで「web.imagemo.net/google-spreadsheet/462」各カテゴリーのディレクトリの後に「カテゴリー名」がついて、投稿記事が表示された。そして、「web.imagemo.net/google-spreadsheet/」にアクセスすると、その記事に属している投稿記事の一覧が表示される。
なぜか「web.imagemo.net/archives/462」でも投稿ページの表示される。。。この挙動はよくわからないが、同一のページが重複してしまっているが、サイトマップをみる限り、このURLは無視されているので、Googleにインデックスされないと思う(憶測)ので、わざわざリダイレクトする必要もなさそうかなぁ〜。ということで、ほうっておく。
URLが変わったらサイトマップも編集するの?
答え ⇒ いいえ。そんな面倒なことは不要です!
なんか、WordPressのURLを途中で変更したら、全ページに影響するのでは? と思いがちですが、心配ご無用!。ちゃんと、新しいURLで自動的にサイトマップが更新されています!超、楽ちん。サイトマップ関連はこちらの記事を参考にしてください → WordPressサイトを「サチコ」に登録後サイトマップxmlを送信する
リダイレクトを設定する
functions.phpに記述します
functions.phpを開いて下記のコードを追加してください。
//---------------------------------------------------------------------
# 特定のディレクトリにアクセスされたら TOPに301リダイレクトする
//---------------------------------------------------------------------
function url_redirect_301(){
//現在ページ取得
$url = $_SERVER['REQUEST_URI'];
//「 category 」ディレクトリにアクセスしたらTOPにリダイレクトする
if(strstr($url,'category')){
wp_redirect( get_site_url(), 301 );
exit;
}
}
add_action( 'get_header', 'url_redirect_301' );
これで「web.imagemo.net/category/」にアクセスされたら、TOPページにリダイレクトします!
ていうか、このコードを記述しなくても「404」エラーになるだけなので、特になくても良いかなぁ〜と思ってきたのですが、せっかくなので備忘録としておきます。
やっぱり重複ページもリダイレクトを設定する
なんか、重複ページがあるとスッキリしないのでリダイレクトさせます!
functions.phpを開いて下記のコードを追加してください。
//---------------------------------------------------------------------
# URLの archives/以降に存在する記事IDであれば、TOPにリダイレクトさせる
//---------------------------------------------------------------------
function redirect_archives_to_home() {
if (preg_match('/^\/archives\//', $_SERVER['REQUEST_URI'])) {
wp_redirect(home_url());
exit();
}
}
add_action('template_redirect', 'redirect_archives_to_home');
先ほどまで「web.imagemo.net/archives/462」と「web.imagemo.net/google-spreadsheet/462」の2つのページが重複して表示されていたが、archives/〜 の場合はTOPページにリダイレクトします!
うん!これで、スッキリしました!
まとめ
- 「archives」部分を「category」にすることでカテゴリー分けが一目でわかる。
- 新しいURLは勝手にサイトマップに反映される。
- カテゴリーの設定(重要)をしておかないとうまくいかない。
- リダイレクトをさせるのはfunctions.phpに記述するのが手取り早い。
- archivesのページをリダイレクトするか要検討する。
- 重複したページをTOPにリダイレクトしたらスッキリした。