いいかげん企業サイトにおけるWordPressのパーマリンク設定をスッキリさせようじゃないか
前田 大地
WordPressで企業サイトを構築するとき、いつもパーマリンクをどうしようか悩みます。思い返せば、なんだか毎回悩んでいるような気がします。毎回悩んでいるわりに、いつもだいたい同じようなパーマリンク構造で落ち着いている気もします。だったら、なぜ、メモしておかないのか。
というわけで、今回は私がWordPressで企業サイトを構築するときに適用しているオススメのパーマリンク設定を紹介します。
目次
最終的なパーマリンク構造
今回、最終的に目指すWordPressのパーマリンク構造は以下の通りです。
トップページ | / |
ブログホーム | /[blog-slug]/ 例:/news/ |
ブログ記事 | /[blog-slug]/[post-slug]/ 例:/news/news-title/ |
ブログカテゴリ | /[blog-slug]/[category-base]/[category-slug]/ 例:/news/category/campaign/ |
カスタム投稿アーカイブ | /[cpt-slug]/ 例:/works/ |
カスタム投稿記事 | /[cpt-slug]/[post-slug]/ 例:/works/works-title/ |
カスタム分類 | /[cpt-slug]/[tax-slug]/[term-slug]/ 例:/works/type/website/ |
何やら、よく分からない文字列が並んでいますね。[blog-slug]とか[cpt-slug]とか、これは説明のために私が勝手に名付けたものです。あなたのサイトの設定に合わせて置き換えながら見てください。
投稿記事のURLにカテゴリ名を含めたほうが良いという意見もありますが、私は含めません。理由は2つ。複数カテゴリ選択時にコントロールできないから。カテゴリの付け足しや見直しで将来的なURL変更のリスクにさらされるからです。SEOに有効なのはパーマリンク構造ではなく、サイト内のリンク構造であることをお忘れなく。ただし、サイトの構成によってはカスタム投稿などでターム名を含めたほうが理にかなう場面もあるため、そのあたりは臨機応変にアレンジしてください。
上記の形式でパーマリンクを設定する方法を順番にひとつずつ解説していきます。
WordPress全体のパーマリンク設定
まずはじめに、WordPress管理画面の「設定」→「パーマリンク」から、サイト全体のパーマリンク構造を設定します。
あらかじめ何パターンか選べるようになっていますので、その中から「投稿名」を選択してください。「カスタム構造」欄のところに「/%postname%/」と自動で入力されますので、そのまま保存してください。
ブログのパーマリンク設定
ここで言うブログというのは、WordPressにはじめから存在する投稿タイプ「投稿(post)」のことです。カテゴリーという分類もはじめから存在します(あとタグも)。
例えば、ブログを使ってサイトに「お知らせ」というコンテンツを作るなら、
トップページ:https://www.website.test/
お知らせTOP:https://www.website.test/news/
お知らせ記事:https://www.website.test/news/post-title/
みたいな感じのURLになります。ここの「news」の部分が、最初の表の「[blog-slug]」に該当するわけです。
ブログホームのパーマリンク
WordPressのデフォルトでは、トップページ=ブログホーム(投稿のアーカイブページ)です。が、企業サイトの場合、トップページは別に作るのが一般的だと思います。今回も、別にするケースで進めます。
WordPress管理画面の「設定」→「表示設定」の「ホームページの表示」を「固定ページ」に変更します。で、ホームページと投稿ページにそれぞれ固定ページを割り当てます。
ブログホームのパーマリンクには、割り当てた固定ページのスラッグが適用されます。なので、固定ページのスラッグを[blog-slug]に変えます。例えば、固定ページのスラッグを「news」にすれば、ブログホームは「https://www.website.test/news/」となります。
ブログ記事のパーマリンク
このままだとブログ個別記事のパーマリンクには[blog-slug]が含まれません。これを修正するには、functions.phpに以下のコードを追加します。
// 投稿のパーマリンク修正 function add_article_post_permalink( $permalink ) { $permalink = '/[blog_slug]' . $permalink; return $permalink; } add_filter( 'pre_post_link', 'add_article_post_permalink' ); function add_article_post_rewrite_rules( $post_rewrite ) { $return_rule = array(); foreach ( $post_rewrite as $regex => $rewrite ) { $return_rule['[blog_slug]/' . $regex] = $rewrite; } return $return_rule; } add_filter( 'post_rewrite_rules', 'add_article_post_rewrite_rules' );
上記コード内の[blog_slug]の部分(2箇所)を、ブログホームの固定ページのスラッグで指定した文字列に置き換えてください(カッコが残らないようにね)。適用させるために「設定」→「パーマリンク」に飛んで、(そのまま何も変更せずに)保存し直す必要があります。
出典:投稿の個別ページのみパーマリンクを変更する方法|Simple Colors
カテゴリページのパーマリンク
記事ページと同じく、カテゴリーにも[blog-slug]をつけます。こちらの設定はもっとかんたんで、カテゴリーベースを変更するだけです。
「設定」→「パーマリンク」に進み、オプションの「カテゴリーベース」のところに「[blog-slug]/[category-base]」と入力して保存します。今回の例だと「news/category」と入力します。真ん中に半角でスラッシュが入ります。ゴリ押しのネジ込みって感じでテンション上がりますね。
これで、投稿記事はnewsの配下で、カテゴリーもnewsの配下ということが明確になりました。URLを見れば、それが個別記事なのかカテゴリーなのかも一目瞭然です。
カスタム投稿のパーマリンク設定
カスタム投稿タイプとカスタム分類は、わりと素直な子たちなのでそんなに手間はかかりません。
カスタム投稿アーカイブページのパーマリンク
カスタム投稿タイプを登録するとき、has_archiveをtrueにすることで、アーカイブページが生成されます。このカスタム投稿アーカイブページのパーマリンクには、デフォルトで投稿タイプ名が入ります。「works」というカスタム投稿タイプを作成したときのアーカイブページは「https://www.website.test/works/」となります。
スラッグを投稿タイプ名ではなく別のものに変更したい場合は、register_post_typeのrewriteでslugを指定してください。
カスタム投稿記事ページのパーマリンク
カスタム投稿の個別記事ページも、デフォルトで「/投稿タイプ名/記事スラッグ/」なので、とくに何かする必要はありません。話が早くていいですね。
カスタム分類ページのパーマリンク
カスタム分類のパーマリンクは、「/カスタム分類名/ターム名/」がデフォルトです。これを「/投稿タイプ名/カスタム分類名/ターム名/」に変えます。
私はずっとCustom Post Type Permalinksというプラグインを使っていて、その中の機能なら一発でできます。このプラグインには個別の設定ページがなく、有効化すると「設定」→「パーマリンク」の中に項目が追加されます。「カスタマイズされたカスタムタクソノミーのパーマリンクを使用する」にチェックを入れて保存してください。
カスタム分類名のところを変更したい場合は、register_taxonomyのrewriteでslugを指定します。
完成!……え、うまくいかない?
とりあえず保存する
「設定」→「パーマリンク」→保存。プラグインやfunctions.phpでパーマリンク構造に手を加えた場合は、一旦、パーマリンクを保存し直しましょう。
Rewrite Rules Inspectorで確認
404になるときは、リライトルールに原因があるかもしれません。現在のリライトルールはRewrite Rules Inspectorというプラグインで確認できます。私もたまに、分類ページの2ページ目以降が404になるトラブルが起きて焦ったりします。そういうとき、このプラグインでルールを確認しながら必要なルールを付け加えています。カテゴリーベースを消したりスラッグを重複させたりすると、たいていややこしくなります。
所感など
まとめてみると、案外たいしたことしてなくてちょっとショック。まあ、できるだけ余計なことをしないのが安全の秘訣、なんだろうな、ということで。
あ、ちなみに、私、基本的に「タグ」は使わないので、タグのことは一切考慮していません。タグを使う人は自分で調べてね。