Blog

ブログ

いいかげん企業サイトにおける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になるトラブルが起きて焦ったりします。そういうとき、このプラグインでルールを確認しながら必要なルールを付け加えています。カテゴリーベースを消したりスラッグを重複させたりすると、たいていややこしくなります。

所感など

まとめてみると、案外たいしたことしてなくてちょっとショック。まあ、できるだけ余計なことをしないのが安全の秘訣、なんだろうな、ということで。

あ、ちなみに、私、基本的に「タグ」は使わないので、タグのことは一切考慮していません。タグを使う人は自分で調べてね。

Web Designer / Developer

前田 大地

沼津高専中退。デザイン会社、システム開発会社を経てセブンシックスを設立。マーケティング、デザイン、テクノロジーに精通するオールラウンダーとして、県内の中小企業に向けた戦略型ホームページ制作を開始。一方で、都内の広告代理店からの要請で大企業案件にも多数参加。企業が本当に必要とするホームページ制作とは何か、を日々探求している。

Blog top