はじめに
WordPressで商品、サービス、事例、イベントなどの情報を管理していると、ページごとに構造化データを手入力する運用には限界がある。
価格や開催日、担当者、質問と回答などが更新されるたびに、本文と構造化データの両方を修正しなければならないからだ。更新漏れが起きれば、ページに表示されている内容と検索エンジンに伝える情報が一致しなくなる。
そこで有効なのが、SEOプラグインの「Rank Math」と、カスタムフィールドを管理する「Advanced Custom Fields(ACF)」の連携である。
ACFに入力した情報をRank MathのSchemaへ動的に反映できれば、WordPressの編集画面に情報を一度入力するだけで、ページ表示と構造化データを同時に更新できる。
ただし、両方のプラグインからSchemaを出力すると、同じ情報が二重に生成される可能性がある。重要なのは機能を追加することではなく、「どのシステムを構造化データの出力元にするか」を最初に決めることである。
Rank MathとACFを連携するメリット
Rank Mathは、WordPress上でArticle、Product、Event、LocalBusinessなどのSchemaを設定できるSEOプラグインである。
一方、ACFは、WordPressの投稿や固定ページに独自の入力項目を追加するためのプラグインだ。たとえば、次のような情報を管理できる。
- 商品価格
- 開催日時
- 講師名
- 所在地
- 質問と回答
- 導入企業名
- サービスの対象者
- 申込期限
これらの情報を構造化データに連携すると、担当者はHTMLやJSON-LDを直接編集する必要がなくなる。
Googleは、構造化データをページ内容の理解に利用している。また、実装しやすく保守しやすい形式としてJSON-LDを推奨している。ただし、正しく実装しても検索順位の上昇やリッチリザルトの表示が保証されるわけではない。Google Search Central「構造化データの仕組み」
連携方法は3つある
Rank MathとACFの連携方法は、大きく3つに分けられる。
| 方法 | 向いているケース | 注意点 |
|---|---|---|
| Rank MathのSchema GeneratorでACF値を利用 | 単純なテキストや数値を扱う場合 | ACFのグループ、リピーターなどは扱いにくい |
rank_math/json_ldフィルターで生成 | FAQや階層データなど複雑な構造 | PHP実装と保守体制が必要 |
| ACF PRO 6.8のSchema機能を利用 | ACF中心でデータモデルを構築する場合 | 実験的機能であり、Rank Mathとの重複対策が必要 |
どの方法が優れているかではなく、サイトのデータ構造と運用体制に合った方法を選ぶことが重要である。
最初に「入力項目とSchema」の対応表を作る
実装前に、ACFのフィールドとSchema.orgのプロパティを対応させる。
たとえば、イベント情報なら次のように整理できる。
| ACFフィールド | Schema.orgのプロパティ | データ形式 |
|---|---|---|
| event_name | name | テキスト |
| event_description | description | テキスト |
| start_date | startDate | ISO 8601形式 |
| end_date | endDate | ISO 8601形式 |
| venue_name | location.name | テキスト |
| venue_address | location.address | PostalAddress |
| ticket_price | offers.price | 数値 |
| application_url | offers.url | URL |
ここで大切なのは、フィールド名をそのままSchemaのプロパティに置き換えればよいわけではないという点だ。
日付、画像、住所、価格、担当者などは、それぞれ検索エンジンが解釈できる形式に変換する必要がある。特に日付はISO 8601、価格通貨はISO 4217に合わせるなど、対象となるリッチリザルトの公式要件を確認しなければならない。
Rank MathのSchema GeneratorでACFを使う方法
単純なカスタムフィールドであれば、Rank Mathの変数やSchemaテンプレートを使って値を差し込める場合がある。
ただし、Rank Mathの公式資料では、通常のカスタムフィールド変数がACFフィールドでは機能しない場合があると説明されている。ACFのグループやリピーターは、保存形式が単純な文字列ではないためだ。Rank Math「How to Use ACF Fields in Schema Generator」
この場合は、次のいずれかで対応する。
- Rank Math用の独自変数を登録する
rank_math/json_ldフィルターで出力内容を加工する- ACF 6.8のSchema機能へ出力を集約する
入力項目が少ないサイトではSchema Generatorが扱いやすい。一方、FAQ、日程表、製品仕様などの繰り返し項目が多いサイトでは、PHPフィルターまたはACFのネイティブ機能を検討した方がよい。
PHPフィルターが必要になるケース
Rank Mathには、生成されるJSON-LDを加工できるrank_math/json_ldフィルターが用意されている。
このフィルターを使うと、ACFの値を取得し、条件に応じてSchemaを追加、変更、削除できる。
代表的な利用場面は次のとおりだ。
ACFリピーターからFAQを生成する
ACFリピーターに「質問」と「回答」のサブフィールドを用意し、入力された件数に応じてQuestionを生成する。
これにより、担当者はWordPressの編集画面で質問と回答を追加するだけで、FAQPage形式のJSON-LDを更新できる。
ただし、2026年5月7日以降、Google検索ではFAQリッチリザルトが表示されなくなり、同年6月には公式ドキュメントも削除された。現在は、検索結果へのFAQ展開を目的に実装するものではない。Google Search Central「FAQリッチリザルト機能の終了」
Schema.orgの語彙としてFAQPage自体は存在するが、実装目的と効果を分けて考える必要がある。
投稿タイプごとにSchemaを切り替える
たとえば、通常の記事にはArticle、商品ページにはProduct、セミナーページにはEventを適用する。
カスタム投稿タイプやカテゴリーを条件にすれば、不要なページにSchemaが出力されることを防げる。
空欄を出力対象から除外する
ACFの値が空欄のまま、次のようなデータを出力してはいけない。
{
"price": "",
"startDate": "",
"image": ""
}
空欄や不正な形式の値は出力前に除外する。必須項目が不足している場合は、Schema全体を出力しない判断も必要になる。
ACF PRO 6.8のSchema自動生成機能
ACF PRO 6.8では、カスタムフィールドをSchema.orgのプロパティに直接対応させ、JSON-LDを自動生成する機能が追加された。
主な機能は次のとおりである。
- ACFフィールドとSchema.orgプロパティの対応付け
- 投稿タイプへのSchemaタイプ設定
- 日付や画像などの出力形式変換
- リピーターとサブフィールドへの対応
- ACF Blocks単位でのJSON-LD出力
- フィールド構成からのSchemaタイプ推定
有効化には、次のフィルターを追加する。
add_filter( 'acf/settings/enable_schema', '__return_true' );
ただし、この機能はACFの管理画面上で「Experimental」と表示されている。大規模サイトへ導入する場合は、検証環境で出力形式や既存プラグインとの競合を確認してから適用する必要がある。ACF「6.8 Release」
最大の注意点はSchemaの重複である
Rank MathとACFの両方がJSON-LDを生成すると、同一ページに複数のArticleやProductが出力される可能性がある。
複数のSchemaが存在すること自体が、直ちに誤りになるわけではない。Googleも、1ページ内にレシピ、動画、パンくずなど複数の項目を記述できるとしている。
問題になるのは、同じ対象を表すSchemaが重複し、内容が一致していない場合だ。
たとえば、Rank Math側では価格が5,000円、ACF側では価格が5,500円となっていれば、どちらが正しい情報なのか判断しにくくなる。
出力元を一つに決める
基本方針は次のいずれかになる。
- Rank Mathを主出力元とし、ACFはデータ入力だけに使う
- ACF 6.8を主出力元とし、該当投稿タイプのRank Math Schemaを停止する
- Schemaの種類ごとに担当を分ける
担当を分ける場合は、「ArticleとBreadcrumbはRank Math、独自のサービス情報はACF」など、設計書に明記する。
担当者の記憶だけに依存すると、プラグインの設定変更や担当者交代によって重複が発生しやすい。
構造化データと画面表示を一致させる
Googleは、構造化データに記載する情報がページ上でも利用者に確認できることを求めている。画面に表示されていない価格、評価、質問、回答などをJSON-LDだけに追加してはいけない。Google Search Central「構造化データに関する一般的なガイドライン」
したがって、ACFに保存した値は次の両方へ反映させる設計が望ましい。
- ページ上の表示
- JSON-LDの構造化データ
「画面表示用フィールド」と「Schema用フィールド」を別々に持つと、更新漏れが起こりやすくなる。一つの入力値を両方で利用することが、自動化の本質である。
実装後の検証手順
構造化データは、コードを追加して終わりではない。
ページのソースを確認する
ページのソースを表示し、application/ld+jsonを検索する。
確認する項目は次のとおりだ。
- 同じSchemaタイプが重複していないか
- ACFの最新値が反映されているか
- 空欄のプロパティが残っていないか
- URLや画像URLが正しいか
- 日付や価格の形式が正しいか
Rich Results Testで確認する
GoogleのRich Results Testを使い、Google検索がサポートする構造化データのエラーを確認する。
ただし、エラーがないことはリッチリザルト表示の保証ではない。また、Schema.orgに存在してもGoogleのリッチリザルト対象ではないタイプは、別の検証も必要になる。
Schema Markup Validatorも併用する
Googleの対応対象以外を含むSchema.org全体の構文確認には、Schema Markup Validatorを使用する。
Search Consoleで継続監視する
公開後はSearch Consoleでエラーや警告を確認する。テンプレート変更、プラグイン更新、フィールド名の変更によって、正常だったSchemaが壊れる可能性があるためだ。
運用で管理すべき項目
構造化データを継続的に管理するため、最低限、次の内容を記録しておく。
- 対象となる投稿タイプ
- 使用するSchemaタイプ
- ACFフィールド名
- Schema.orgプロパティ
- 必須・任意の区分
- 値の形式
- JSON-LDの出力元
- 空欄時の処理
- 検証方法
- 修正担当者
特に、ACFのフィールド名を変更するとPHPコードとの連携が切れる可能性がある。表示名だけでなく、実際のフィールド名とフィールドキーを管理する必要がある。

まとめ
Rank MathとACFを連携すると、WordPressに入力した商品、サービス、イベント、FAQなどの情報から、構造化データを動的に生成できる。
これにより、入力作業の重複や更新漏れを減らし、サイト全体の情報を一貫して管理しやすくなる。
一方で、Rank Math、独自PHP、ACF 6.8の複数箇所からJSON-LDを出力すると、Schemaの重複や内容の不一致が発生する。
導入時に優先すべきなのは、Schemaの数を増やすことではない。
- どの情報を構造化するのか
- どのフィールドを正本とするのか
- どの仕組みからJSON-LDを出力するのか
- 誰が検証と更新を担当するのか
この4点を決めることで、構造化データを単発のSEO施策ではなく、再利用可能な情報基盤として運用できる。
コメント