WordPressのカスタムタクソノミー(Custom Taxonomy)追加手順とテンプレート表示実装|サイト構造を最適化するプロの設計ガイド

WordPressで大規模な企業サイトやポータルサイトを構築する際、標準の「カテゴリー」や「タグ」だけでは情報を整然と分類しきれないケースがあります。例えば、製品情報に対して「製品カテゴリー」とは別に「対応用途」や「利用業界」といった複数の軸で整理したい場合や、施工事例を「工種」と「施工エリア」で分けて管理したい場合に有効な解決策が「カスタムタクソノミー(カスタム分類)」です。

結論として、カスタムタクソノミーを正しく設計して導入することで、ユーザーの回遊性と検索利便性が飛躍的に向上し、検索エンジンにとってもWebサイトの専門性や階層構造が伝わりやすくなるため、大きなSEO効果が期待できます。実装にあたっては、functions.phpへのコード記述やプラグインの活用、taxonomy.phpなどのテンプレートカスタマイズ、インデックス制御をはじめとするSEO設定を適切に行うことが不可欠です。

本記事では、WordPressのカスタムタクソノミーの基礎概念から、具体プログラムの実装手順、テンプレートでの出力方法、SEOや表示速度に配慮した実務運用手順まで、Webディレクターやエンジニアが押さえるべきポイントをわかりやすく解説します。

WordPressのカスタムタクソノミーとは?カテゴリー・タグとの違いと導入するメリット

カスタムタクソノミー(Custom Taxonomy)とは、WordPressに標準装備されている「カテゴリー」や「タグ」とは別に、独自の軸でコンテンツを分類するために作成する「カスタム分類」機能です。分類内の個々の項目(例えば「東京都」「大阪府」などの具体名)を「ターム(Term)」と呼びます。

コンテンツの属性に合わせて独自の分類軸を作成することで、サイト全体の構造が明確になり、ユーザーにとっても検索エンジンにとってもアクセスしやすい情報設計が実現します。

デフォルトのカテゴリー・タグとの違いと使い分け基準

WordPressの「カテゴリー」と「タグ」とカスタムタクソノミーの違いを理解することは、適切なサイト設計の第一歩です。

使い分けの基準として、ブログ記事などの標準投稿(post)全体のメイン分類にはデフォルトの「カテゴリー」を使用し、特定のカスタム投稿タイプ(製品情報、施工事例、採用情報など)に閉じられた独立した分類を作成したい場合に「カスタムタクソノミー」を作成します。

項目 カテゴリー(標準) タグ(標準) カスタムタクソノミー
対象コンテンツ 標準の投稿(post) 標準の投稿(post) 任意の投稿タイプ・カスタム投稿
階層構造 あり(親子関係が可能) なし(並列関係) あり・なしを任意に設定可能
用途・目的 サイト全体の主要な構造化 記事間のキーワード紐付け 商材・事例ごとの多角的な分類
URL設計 /category/slug/ /tag/slug/ /{taxonomy}/slug/ (カスタマイズ可)

カスタムタクソノミーを導入すべき3つのサイト要件

以下のようなサイト要件が存在する場合、カスタムタクソノミーの導入を推奨します。

  • 複数の分類軸で検索・絞り込みを行いたい場合:不動産サイトで「物件種別」とは別に「沿線・駅」や「こだわり条件」などの複数軸で管理したい場合。
  • カスタム投稿タイプの情報を独立して分類したい場合:ブログ用のカテゴリーと自社製品用の分類が混ざるのを防ぎ、管理画面の入力項目を明確に分離したい場合。WordPressのカスタム投稿タイプとカスタムフィールドの活用手順|サイトの更新性と管理効率を高める設計のプロのコツと組み合わせることで、強固なデータ構造を構築できます。
  • SEO観点で専用の絞り込み一覧ページを作りたい場合:特定業界向け、特定地域向けなどのターゲットを絞った一覧ページを生成し、検索エンジンの着地ページとして活用したい場合。

カスタムタクソノミーの設計とプログラミング実装手順(functions.php)

カスタムタクソノミーをプログラムで追加する場合は、使用しているテーマのfunctions.phpに登録処理を記述します。安全に作業を行うため、事前に親テーマのアップデートの影響を受けない環境を準備してください。詳細はWordPressの子テーマ(Child Theme)作成手順とカスタマイズの注意点|本体アップデートで設定が消えない安全な構築ルールを参照してください。

register_taxonomy() 関数の基本構文と設定パラメータ解説

WordPressでカスタムタクソノミーを登録するには、register_taxonomy()関数を使用し、initアクションフックに登録します。

基本構文:register_taxonomy( $taxonomy, $object_type, $args );

  • $taxonomy:タクソノミー識別子(半角英小文字とハイフン/アンダースコア。32文字以内)。
  • $object_type:関連付ける投稿タイプ名(例: product や post)。
  • $args:動作や表示形式を指定する設定配列。

階層あり(カテゴリー型)と階層なし(タグ型)の実装コード比較

$args配列内の'hierarchical'パラメータをtrueに設定すると親子関係が持てる「カテゴリー型」、falseに設定すると「タグ型」として動作します。

以下は、カスタム投稿タイプproduct(製品情報)に対して、階層ありの「製品カテゴリー(product_cat)」を追加するコード例です。

function create_custom_taxonomy() {
  $labels = array(
    'name' => '製品カテゴリー',
    'singular_name' => '製品カテゴリー',
    'search_items' => '製品カテゴリーを検索',
    'all_items' => 'すべての製品カテゴリー',
    'parent_item' => '親の製品カテゴリー',
    'edit_item' => '製品カテゴリーを編集',
    'update_item' => '製品カテゴリーを更新',
    'add_new_item' => '新規製品カテゴリーを追加',
    'new_item_name' => '新規製品カテゴリー名',
    'menu_name' => '製品カテゴリー',
  );

  $args = array(
    'labels' => $labels,
    'hierarchical' => true,
    'public' => true,
    'show_ui' => true,
    'show_admin_column' => true,
    'show_in_nav_menus' => true,
    'show_in_rest' => true,
    'rewrite' => array('slug' => 'product-cat', 'with_front' => false),
  );

  register_taxonomy('product_cat', array('product'), $args);
}
add_action('init', 'create_custom_taxonomy');

ブロックエディターを使用する環境では、'show_in_rest' => trueの設定が必須です。この記述を欠くと、投稿編集画面のサイドバーにタクソノミー選択パネルが表示されなくなります。

カスタム投稿タイプとの紐付け設定における注意点

register_taxonomy()関数の第2引数には、紐付けたい投稿タイプを指定します。カスタム投稿タイプとカスタムタクソノミーの両方をコードで登録する場合、確実にタクソノミーが正しく認識されるよう呼び出し順序やフックの記述に留意してください。不適切な実装は、管理画面でタームが表示されない不具合を引き起こします。

カスタムタクソノミーのテンプレート表示とアーカイブページの作成手順

タクソノミーとタームを登録した後は、ユーザーが閲覧する画面(フロントエンド)に表示する処理を行います。

WordPressのテンプレート階層ルール

WordPressでは、特定のカスタムタクソノミーアーカイブが表示される際、以下の優先順位でテンプレートが読み込まれます。

  1. taxonomy-{taxonomy}-{term}.php(例: taxonomy-product_cat-industrial.php)
  2. taxonomy-{taxonomy}.php(例: taxonomy-product_cat.php)
  3. taxonomy.php
  4. archive.php
  5. index.php

専用デザインを適用する場合は、テーマフォルダ内にtaxonomy-{taxonomy}.phpファイルを作成してレイアウトを実装します。

タクソノミー一覧・詳細ページでの表示処理

投稿詳細や一覧画面で設定タームを出力する代表的な関数は以下の2つです。

  • get_the_term_list():HTMLリンク付きのターム一覧を取得・出力します。
    echo get_the_term_list( $post->ID, 'product_cat', 'カテゴリー: ', ', ', '' );
  • get_the_terms():タームのオブジェクト配列を取得し、foreach等で独自デザインを出力します。
    $terms = get_the_terms( get_the_ID(), 'product_cat' );
    if ( $terms && ! is_wp_error( $terms ) ) {
      echo '<ul class="term-list">';
      foreach ( $terms as $term ) {
        echo '<li><a href="' . esc_url( get_term_link( $term ) ) . '">' . esc_html( $term->name ) . '</a></li>';
      }
      echo '</ul>';
    }

メインクエリの最適化(pre_get_posts を活用した表示件数・ソート調整)

アーカイブページの表示件数や並び順を変更する際、テンプレート内でquery_posts()やnew WP_Query()を使用することは非推奨です。無駄なデータベース処理が発生し、表示速度が低下します。

表示条件の変更は、functions.php内でpre_get_postsフックを用いてメインクエリを調整するのが正しい手法です。

function customize_taxonomy_archive_query( $query ) {
  if ( ! is_admin() && $query->is_main_query() && is_tax( 'product_cat' ) ) {
    $query->set( 'posts_per_page', 12 );
    $query->set( 'orderby', 'date' );
    $query->set( 'order', 'DESC' );
  }
}
add_action( 'pre_get_posts', 'customize_taxonomy_archive_query' );

カスタムタクソノミー導入時のSEO対策と運用上の注意点

カスタムタクソノミーは集客施策に有効ですが、設計・運用ルールに不備があるとSEO上のリスクが生じます。WordPressのカテゴリーとタグの使い分けとSEO最適化手順|回遊率と検索評価を高めるタクソノミー設計ガイドで解説している原則に基づき、以下の注意点を把握しておきましょう。

パーマリンク構造の設計とURL重複・カニバリゼーション防止

カスタムタクソノミーの初期URL構造はexample.com/product_cat/term-name/となります。rewrite設定によって変更可能ですが、既存ページや他カテゴリーと重複するリライトルールを設定すると、検索エンジンが混乱し「キーワードの共食い(カニバリゼーション)」や404エラーが発生します。構築段階でパーマリンク設計の検証を徹底してください。

noindex設定の判断基準とSearch Consoleでの確認手順

ターム数が多くても、紐づく記事数が0または1〜2件程度しかないページが大量に生成されると、低品質コンテンツと判定される懸念があります。

運用時は以下の基準でインデックス制御を行います。

  • インデックス対象:十分な記事数があり、ユーザーの検索ニーズを満たすページ。説明文(Term Description)が入力されていることが望ましい。
  • noindex対象:管理目的のみのターム、記事数が極端に少ないターム、機械的に生成された重複一覧ページ。

SEOプラグインなどを利用し、不要なタームアーカイブにはnoindexタグを出力させる設定を行いましょう。

タームの増殖防止と運用ルール・ガイドラインの作成

運用者が自由にタームを追加できる運用にすると、表記揺れ(例: 「WordPress」と「ワードプレス」)によって似たようなタームが濫立し、サイト構造が不鮮明になります。「新規ターム作成は管理者に限定する」「登録表記ルールを運用マニュアルに明記する」といった運用体制の整備が必要です。

プラグインを活用したカスタムタクソノミーの簡単設定と保守管理

コード編集を避ける場合や、納品後の運用性・管理しやすさを考慮する場合は、プラグインを使って管理画面から設定する方法も選ばれます。

Custom Post Type UI(CPT UI)でのタクソノミー作成手順

「Custom Post Type UI(CPT UI)」は、管理画面からGUI操作でカスタム投稿やタクソノミーを作成できる代表的なプラグインです。

  1. 管理画面の「プラグイン」>「新規追加」から「CPT UI」を検索しインストール・有効化。
  2. 「CPT UI」>「タクソノミーの追加/編集」を開く。
  3. 「タクソノミースラッグ」「複数形のラベル」「単数形のラベル」を入力。
  4. 「利用する投稿タイプ」で対象となるカスタム投稿タイプを選択。
  5. 「階層あり」を「True」(カテゴリー型)または「False」(タグ型)に設定。
  6. 「REST API で表示」を「True」に設定して保存。

コード実装とプラグイン実装の比較と選定基準

プログラムコード記述とプラグイン利用のメリット・デメリットを整理して選定します。

評価軸 プログラムコード記述(functions.php) プラグイン利用(CPT UIなど)
パフォーマンス 優れている(不要な処理が発生しない) わずかな処理負荷(オーバーヘッド)が発生
外部依存リスク プラグインの非互換リスクがない プラグインの更新停止等の影響を受ける
導入の易しさ PHPやAPIの知識が必要 管理画面の操作のみで完結
テーマ移行時の挙動 テーマ変更時に再記述が必要(子テーマ推奨) テーマを変更しても設定データが保持される

保守運用時のバックアップとデータベースへの影響

カスタムタクソノミーおよびタームの情報は、WordPressデータベース内のwp_terms、wp_term_taxonomy、wp_term_relationshipsの各テーブルで保持されます。

タクソノミーの削除や設定変更を行うと、投稿との紐付けが一括解除されるなど影響が全体におよびます。構造変更やメンテナンスを行う際は、事前にデータベース全体のバックアップを取得する運用を徹底してください。

よくある質問(FAQ)

Q1. カスタムタクソノミー追加後にアーカイブページが404エラーになる場合の対処法は?

カスタムタクソノミー追加直後に一覧ページへアクセスして404エラーが出た場合、WordPress内部のリライトルールが更新されていないことが主な原因です。

対処法として、管理画面の「設定」>「パーマリンク」を開き、何も変更せずに「変更を保存」ボタンを押してください。リライトルールが再保持され、正常に表示されます。

Q2. 1つの投稿タイプに複数のカスタムタクソノミーを紐付けることはできますか?

可能です。例えば「製品情報(product)」に対して「製品カテゴリー(product_cat)」と「利用シーン(product_scene)」という2つの独立したタクソノミーを紐付けて並行管理できます。これによりユーザーは多角的な条件で情報を探せるようになります。

Q3. 既存の標準カテゴリーをカスタムタクソノミーに移行できますか?

移行プラグインの利用やデータベースのwp_term_taxonomyテーブル内の記述書き換えによって移行可能です。ただしURL構造が変わるため、SEO評価を維持できるよう301リダイレクト設定を必ず実施してください。

Q4. カスタムタクソノミーのターム一覧をドロップダウン検索にする方法は?

WordPress標準のwp_dropdown_categories()関数を使用します。パラメータ指定で'taxonomy' => 'product_cat'と記述することで、ドロップダウン型のHTMLを出力できます。検索フォームと組み合わせることで直感的な絞り込み機能が実装できます。

まとめ

WordPressのカスタムタクソノミーは、複雑になりがちな企業サイトや製品サイトの情報構造を綺麗に整理し、ユーザー体験(UX)とSEO効果を同時に高める重要な設計手法です。

実装時は、カテゴリーやタグとの明確な役割分担、functions.phpやプラグインによる適切な登録、taxonomy.phpでのテンプレート記述、pre_get_postsによるクエリ最適化、そしてnoindexを用いたSEO管理をトータルで設計することが成功のカギとなります。

コンテンツ量の増加に伴いサイト内の導線改善が必要な場合や、新規で機能的なWebサイトリニューアルをご検討の際は、専門的な知識に基づくタクソノミー設計を取り入れることをおすすめします。

CONTACT

Web制作・SEO・AIOについてお気軽にご相談ください

ホームページ制作・リニューアル、WordPress、SEO・AIO対策、 ECサイト、Web集客、保守・セキュリティなど、 Webに関するご相談を承っています。 「何から相談すればよいかわからない」という段階でもお気軽にお問い合わせください。

お問い合わせフォーム