Schema.org Metatag
DrupalのMetatagモジュールを拡張し、WebページのheadセクションにSchema.org構造化データをJSON-LD形式で出力します。
schema_metatag
インストール
composer require 'drupal/schema_metatag:^3.0'
概要
Schema.org MetatagはDrupalのMetatagモジュールを拡張し、Webページのheadセクションに構造化データをJSON-LD形式で出力します。これにより、Googleなどの検索エンジンが理解・活用できるSchema.orgボキャブラリーマークアップを提供し、リッチスニペットや強化された検索結果の表示を可能にします。
このモジュールでは、Schema.orgプロパティをハードコードするか、Tokenを使用してパターンを指定することができます。Metatagモジュールのオーバーライドシステムを使用して、すべてのコンテンツタイプに対するデフォルトの構造化データ値を定義したり、特定のコンテンツタイプに対してグローバルデフォルトを上書きしたり、個別のNodeで他のすべての設定を上書きして特定の値を提供したりできます。
このモジュールはプラグインベースのアーキテクチャを採用しており、様々なSchema.orgデータ型に対応したプロパティタイププラグインを提供します。これにより、適切な@type定義を持つ複雑なネスト構造の構造化データを作成できます。Article、Product、Event、Organizationなど、特定のSchema.orgタイプ向けの複数のサブモジュールが用意されています。
Features
- Schema.org構造化データをJSON-LD形式でHTMLのheadセクションにレンダリング
- DrupalのMetatagモジュールとシームレスに統合
- 動的なプロパティ値に対するToken置換をサポート
- Schema.orgデータ型用の43種類のプロパティタイププラグインを提供(Text、Number、Date、Organization、Person、ImageObjectなど)
- 適切な@type階層を持つ複雑なネストSchema.org構造をサポート
- 単一ページ上の複数のSchema.orgオブジェクト用に@graphラッパーを含む
- 構造化データ内の複数値に対するピボット機能を提供
- 特定のSchema.orgタイプ向けの21種類のサブモジュール(Article、Product、Event、Organizationなど)
- カスタムSchema.orgタイプの追加を可能にする拡張可能なアーキテクチャ
- タイプ階層とプロパティ定義にSchema.orgボキャブラリーデータファイルを使用
- パフォーマンス向上のためにSchema.orgオブジェクトツリーとプロパティ情報をキャッシュ
- @type選択に基づくフォーム要素の表示状態をサポート
Use Cases
ブログ記事用のArticleリッチスニペット
schema_articleサブモジュールを有効にし、ブログコンテンツタイプ用のデフォルトSchema.org Articleメタタグを設定します。@typeをBlogPostingに設定し、headline([node:title])、description([node:summary])、datePublished([node:created:html_datetime])、dateModified([node:changed:html_datetime])、author name([node:author:display-name])、publisher organizationにTokenを使用します。これにより、Googleが検索結果に著者情報、公開日、記事プレビューを含むリッチスニペットを表示できるようになります。
ECサイト向けProductリッチリザルト
schema_productサブモジュールを有効にし、商品コンテンツタイプ用のProduct構造化データを設定します。price、priceCurrency、availabilityを含むオファー情報を含めます。評価システムを使用している場合は集計評価を追加します。これにより、Google ショッピング連携と、検索結果に価格、在庫状況、星評価を直接表示するリッチな商品スニペットが有効になります。
ローカルビジネス向けOrganizationデータ
schema_organizationサブモジュールを有効にし、サイト用のOrganizationまたはLocalBusiness構造化データを設定します。名前、ロゴ、住所、連絡先、営業時間を含めます。これをグローバルデフォルトとして設定すると、すべてのページに表示されます。これにより、検索エンジンがビジネスの身元を理解し、ナレッジパネル表示をトリガーできるようになります。
構造化データ付きイベントリスト
schema_eventサブモジュールを有効にし、イベントコンテンツタイプ用のEvent構造化データを設定します。startDate、endDate、location(住所付きのPlaceプロパティタイプを使用)、performer、チケット情報用のoffersを含めます。これにより、Google検索で日付、場所、チケット価格を表示するイベントリッチリザルトが有効になります。
料理サイト向けRecipeリッチリザルト
レシピコンテンツタイプ用にschema_recipeサブモジュールを有効にします。prepTime、cookTime、recipeIngredient、recipeInstructions(HowToStepを使用)、栄養情報、集計評価のプロパティを設定します。これにより、検索結果に調理時間、評価、カロリー情報を含むレシピリッチリザルトが有効になります。
FAQページの構造化データ
schema_qa_pageサブモジュールを有効にし、FAQコンテンツ用のFAQPage構造化データを設定します。適切なプロパティタイプを使用して、acceptedAnswerを持つQuestionアイテムを追加します。これにより、検索結果に質問と回答が直接表示されるFAQリッチリザルトが有効になり、検索結果ページでより多くのスペースを占めることができます。
サイトリンク検索ボックス
schema_web_siteサブモジュールを有効にし、potentialActionをSearchActionに設定したWebSite構造化データを設定します。クエリパラメータ付きのサイト検索ページへのターゲットURLを設定します。これにより、Google検索でサイトリンク検索ボックス機能が有効になり、ユーザーがGoogleから直接サイトを検索できるようになります。
動画コンテンツのリッチリザルト
動画コンテンツタイプ用にschema_video_objectサブモジュールを有効にします。thumbnailUrl、uploadDate、duration、description、contentUrlを設定します。これにより、検索結果にサムネイルプレビューと再生時間バッジを含む動画リッチリザルトが有効になります。
求人情報の構造化データ
求人リストコンテンツ用にschema_job_postingサブモジュールを有効にします。title、description、hiringOrganization、jobLocation、baseSalary、employmentTypeを設定します。これにより、Google for Jobsに表示される求人投稿リッチリザルトが有効になり、求人情報の露出が増加します。
パンくずナビゲーション
BreadcrumbList構造化データを設定して、検索エンジンがサイトの階層構造を理解できるようにします。これにより、検索結果でのパンくずの表示が改善され、URLが読みやすいナビゲーションパスに置き換えられます。
Tips
- Googleリッチリザルトテスト(https://search.google.com/test/rich-results)を使用してJSON-LD出力を検証してください
- 各Schema.orgタイプの必須プロパティを必ず含めてください - 具体的な要件についてはGoogleのドキュメントを確認してください
- [node:title]、[node:created:html_datetime]、[node:field_image:url]などのTokenを使用して、構造化データを自動的に入力してください
- 画像のサイズには、Tokenモジュールの[node:field_image:0:width]や[node:field_image:0:height]などのTokenを使用してください
- まずグローバルデフォルトを設定し、次にコンテンツタイプレベルでオーバーライドし、必要に応じて個別のEntityレベルでオーバーライドしてください
- モジュールはJSON-LDを@graph形式でレンダリングするため、単一ページ上に複数のSchema.orgオブジェクトを配置できます
- 複数の値(複数の著者やオファーなど)がある場合は「pivot」オプションを使用して、それぞれに個別のオブジェクトを作成してください
- 必要なサブモジュールのみを有効にしてください - 各サブモジュールはMetatag設定に追加のSchema.orgタイプグループを追加します
- カスタムSchema.orgタイプ拡張を作成する際は、schema_article_exampleモジュールの構造をコピーしてください
- 新しいサブモジュールをインストールした後は、新しいメタタググループが設定に表示されるようにキャッシュをクリアしてください
Technical Details
Hooks 2
hook_metatag_tags_alter
モジュールがSchema Metatagタグ定義を変更できるようにします。特定のタグのプロパティタイプ、ツリー親、ツリー深度の変更や、複数値の有効化に使用できます。
hook_schema_metatag_property_type_plugins_alter
モジュールがSchema Metatagプロパティタイププラグイン定義を変更できるようにします。プロパティタイプ、サブプロパティ、プロパティタイププラグインのツリー設定を変更するために使用できます。
Troubleshooting 7
モジュールが有効でMetatag設定で正しく設定されていることを確認してください。Schema.orgグループに少なくとも@typeプロパティが設定されていることを確認してください。@typeのみが設定され他のプロパティがない場合、モジュールはレンダリングをスキップします。
Token構文が正しく、Tokenモジュールがインストールされていることを確認してください。Entityコンテキストが利用可能であることを確認してください - 一部のTokenは特定のEntityページにいる必要があります。DevelのTokenブラウザを使用してToken名を確認してください。
汎用的な画像Tokenではなく、インデックスとプロパティを含む特定の画像フィールドTokenを使用してください(例:[node:field_image:0:width])。コアのTokenモジュールがこれらの画像サイズTokenを提供します。
各タイプの必須プロパティについてGoogleの構造化データドキュメントを確認してください。Metatag設定ですべての必須フィールドが入力されていることを確認してください。Articleなどの一部のタイプは、Schema.orgでオプションとマークされていてもauthorとpublisherが必要です。
これはToken置換が元のTokenと異なる長さの場合に発生することがあります。モジュールには自動的な長さ再計算が含まれていますが、問題が続く場合は、Token値に特殊文字や改行がないか確認してください。
表示状態は@typeセレクターに依存します。@typeプロパティがフォームで最初に設定されていることを確認してください。モジュールはメインのMetatagフォームとフィールドウィジェットフォームのセレクターを異なる方法で処理します。
サブモジュールを有効にした後、すべてのキャッシュをクリアしてください。それでも表示されない場合は、サブモジュールの依存関係が満たされていることを確認してください(例:schema_item_listはmetatag_viewsを必要とします)。
Security Notes 4
- モジュールはJSON-LDエンコード前にHTMLタグを除去してプレーンテキストに変換することで出力をサニタイズします
- Token値はXSS防止を処理するDrupalのレンダーシステムを通じて処理されます
- serialize/unserialize関数にはallowed_classesパラメータを使用したオブジェクトインジェクション攻撃に対する保護が含まれています
- 画像URL処理は相対パスを絶対URLに変換し、imgタグからsrcを安全に抽出します