ディスカッション フォーラム(DiscussionForumPosting)の構造化データ

ディスカッションとフォーラムの機能のイラスト

ディスカッション フォーラムのマークアップは、人々が集まり個人の見解を共有するフォーラム形式のサイト向けに設計されています。フォーラム サイトがこのマークアップを追加すると、Google 検索はウェブ上のオンライン ディスカッションをよりよく識別できるようになり、ディスカッションとフォーラム意見などの機能で、このマークアップを利用できるようになります。

フォーラムにおける DiscussionForumPosting の使い方

基本的に、コメントは関連する投稿の下にネストすることをおすすめします。 フォーラムが独自のスレッド構造を持っている場合は、その構造を表すためにコメントツリーを使用します。

{
  "@context": "https://schema.org",
  "@type": "DiscussionForumPosting",
  "headline": "Very Popular Thread",
  ...
  "comment": [{
    "@type": "Comment",
    "text": "This should not be this popular",
    ...
    "comment": [{
      "@type": "Comment",
      "text": "Yes it should",
      ...
    }]
  }]
}

たとえば、元の投稿の後に一連の返信が続くなど、より直線的な性質のものであれば、それらをすべてコメントとして元の投稿の下にネストします。複数ページあるフォーラムでは、コンテンツの後の方のページに、メインページの URL と元の投稿が含まれているのが理想です。

{
  // JSON-LD on non-threaded forum at https://example.com/post/very-popular-thread/14
  "@context": "https://schema.org",
  "@type": "DiscussionForumPosting",
  "headline": "Very Popular Thread", // Only the headline/topic is explicitly present
  "url": "https://example.com/post/very-popular-thread",
  ...
  "comment": [{
    "@type": "Comment",
    "text": "First Post on this Page",
    ...
  },{
    "@type": "Comment",
    "text": "Second Post on this Page",
    ...
  }]
}

URL が単一の投稿に関するものである場合は、mainEntity(または mainEntityOfPage)を使用して、その DiscussionForumPosting が主要な要素であることを識別できるようにします。

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "url": "https://example.com/post/very-popular-thread",
  "mainEntity": {
    "@type": "DiscussionForumPosting"
    ...
  }
}

たとえば、プロフィール、トピック、カテゴリページなど、さまざまな投稿が掲載されているウェブページでは、一般的に、同じページにすべての情報が掲載されているわけではなく、ユーザーがクリックして、返信などの追加情報を取得する必要があります。ページに存在する情報のみを含めるかどうか(ディスカッション専用の投稿への URL も追加する)は、自由に選択できます。

対象ページが投稿のディスカッション用のページでない場合、その投稿をメインのコンテンツとしてマークしないようにしてください。ページが関連する投稿の集合であることを示すために、それらを Collection または ItemList にまとめると便利です。

構造化データを追加する方法

構造化データは、ページに関する情報を提供し、ページ コンテンツを分類するための標準化されたデータ形式です。構造化データを初めて使用する場合は、構造化データの仕組みについてをご覧ください。

構造化データの作成、テスト、リリースの概要は次のとおりです。ウェブページに構造化データを追加するための手順ガイドについては、構造化データの Codelab をご覧ください。

  1. 必須プロパティを追加します。使用している形式に基づいて、ページ上の構造化データを挿入する場所をご確認ください。
  2. ガイドラインに従います。
  3. リッチリザルト テストでコードを検証し、重大なエラーを修正します。ツールで報告される重大ではない問題の修正も検討してください。構造化データの品質向上に役立ちます(ただし、リッチリザルトの対象となるために必ずしも必要というわけではありません)。
  4. 構造化データが含まれているページを数ページ導入し、URL 検査ツールを使用して、Google でページがどのように表示されるかをテストします。Google がページにアクセスでき、robots.txt ファイル、noindex タグ、ログイン要件によってページがブロックされていないことを確認します。ページが正常に表示されたら、Google に URL の再クロールを依頼できます。
  5. 今後の変更について Google に継続して情報を提供するために、サイトマップを送信することをおすすめします。これは、Search Console Sitemap API で自動化できます。

以下のマークアップの例は、スレッド形式ではない、直線的なフォーラムのページを示しています。

JSON-LD

<html>
  <head>
    <title>I went to the concert!</title>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "DiscussionForumPosting",
      "mainEntityOfPage": "https://example.com/post/very-popular-thread",
      "headline": "I went to the concert!",
      "text": "Look at how cool this concert was!",
      "video": {
        "@type": "VideoObject",
        "contentUrl": "https://example.com/media/super-cool-concert.mp4",
        "name": "Video of concert",
        "uploadDate": "2024-03-01T06:34:34+02:00",
        "thumbnailUrl": "https://example.com/media/super-cool-concert-snap.jpg"
      },
      "url": "https://example.com/post/very-popular-thread",
      "author": {
        "@type": "Person",
        "name": "Katie Pope",
        "url": "https://example.com/user/katie-pope",
        "agentInteractionStatistic": {
          "@type": "InteractionCounter",
          "interactionType": "https://schema.org/WriteAction",
          "userInteractionCount": 8
        }
      },
      "datePublished": "2024-03-01T08:34:34+02:00",
      "interactionStatistic": {
        "@type": "InteractionCounter",
        "interactionType": "https://schema.org/LikeAction",
        "userInteractionCount": 27
      },
      "comment": [{
        "@type": "Comment",
        "text": "Who's the person you're with?",
        "author": {
          "@type": "Person",
          "name": "Saul Douglas",
          "url": "https://example.com/user/saul-douglas",
          "agentInteractionStatistic": {
            "@type": "InteractionCounter",
            "interactionType": "https://schema.org/WriteAction",
            "userInteractionCount": 167
          }
        },
        "datePublished": "2024-03-01T09:46:02+02:00"
      },{
        "@type": "Comment",
        "text": "That's my mom, isn't she cool?",
        "author": {
          "@type": "Person",
          "name": "Katie Pope",
          "url": "https://example.com/user/katie-pope",
          "agentInteractionStatistic": {
            "@type": "InteractionCounter",
            "interactionType": "https://schema.org/WriteAction",
            "userInteractionCount": 8
          }
        },
        "datePublished": "2024-03-01T09:50:25+02:00",
        "interactionStatistic": {
          "@type": "InteractionCounter",
          "interactionType": "https://schema.org/LikeAction",
          "userInteractionCount": 7
        }
      }]
    }
  </script>
</head>
<body>
</body>
</html>
Microdata

<html>
    <body>
      <div id="main-post" itemtype="https://schema.org/DiscussionForumPosting" itemscope>
        <meta itemprop="mainEntityOfPage" content="https://example.com/post/very-popular-thread" />
        <meta itemprop="url" content="https://example.com/post/very-popular-thread" />
        <div class="author-block" itemprop="author" itemtype="https://schema.org/Person" itemscope>
          <div><a href="https://example.com/user/katie-pope" itemprop="url"><span itemprop="name">Katie Pope</span></a></div>
          <div itemprop="agentInteractionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
            <span itemprop="userInteractionCount">8</span>
            <span itemprop="interactionType" content="https://schema.org/WriteAction">posts</span>
          </div>
        </div>
        <div itemprop="datePublished" content="2024-03-01T08:34:34+02:00">March 1</div>
        <div itemprop="headline">I went to the concert!</div>
        <div>
          <div itemprop="video" itemtype="https://schema.org/VideoObject" itemscope>
            <meta itemprop="name" content="Video of concert" />
            <meta itemprop="contentUrl" content="https://example.com/media/super-cool-concert.mp4" />
            <meta itemprop="uploadDate" content="2024-03-01T06:34:34+02:00" />
            <meta itemprop="thumbnailUrl" content="https://example.com/media/super-cool-concert-snap.jpg" />
          </div>
          <span itemprop="text">Look at how cool this concert was!</span>
        </div>
        <div itemprop="interactionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
          <span itemprop="userInteractionCount">27</span>
          <span itemprop="interactionType" content="https://schema.org/LikeAction">likes</span>
        </div>
        <div id="comment-1" itemprop="comment" itemtype="https://schema.org/Comment" itemscope>
          <div class="author-block" itemprop="author" itemtype="https://schema.org/Person" itemscope>
            <div><a href="https://example.com/user/saul-douglas" itemprop="url"><span itemprop="name">Saul Douglas</span></a></div>
            <div itemprop="agentInteractionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
              <span itemprop="userInteractionCount">167</span>
              <span itemprop="interactionType" content="https://schema.org/WriteAction">posts</span>
            </div>
          </div>
          <div itemprop="datePublished" content="2024-03-01T09:46:02+02:00">March 1</div>
          <div>
            <span itemprop="text">Who's the person you're with?</span>
          </div>
        </div>
        <div id="comment-2" itemprop="comment" itemtype="https://schema.org/Comment" itemscope>
          <div class="author-block" itemprop="author" itemtype="https://schema.org/Person" itemscope>
            <div><a href="https://example.com/user/katie-pope" itemprop="url"><span itemprop="name">Katie Pope</span></a></div>
            <div itemprop="agentInteractionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
              <span itemprop="userInteractionCount">8</span>
              <span itemprop="interactionType" content="https://schema.org/WriteAction">posts</span>
            </div>
          </div>
          <div itemprop="datePublished" content="2024-03-01T09:50:25+02:00">March 1</div>
          <div>
            <span itemprop="text">That's my mom, isn't she cool?</span>
          </div>
          <div itemprop="interactionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
            <span itemprop="userInteractionCount">7</span>
            <span itemprop="interactionType" content="https://schema.org/LikeAction">likes</span>
          </div>
        </div>
      </div>
    </body>
</html>

ガイドライン

ディスカッション フォーラムの構造化データを Google 検索で使用するためには、下記のガイドラインに準拠する必要があります。

コンテンツ ガイドライン

  • DiscussionForumPosting のマークアップは、ウェブサイトのフォーラムでユーザーが作成した投稿を記述する場合にのみ使用してください。このマークアップは、ウェブサイトのパブリッシャーやその代理人が作成したコンテンツには使用しないでください。
  • コメントや著者情報、インタラクションの統計など、よく似たマークアップを使用できる、他の有効なマークアップ(ArticleSocialMediaPostingVideoObject など)の利用を推奨しますが、それらに DiscussionForumPosting のマークアップは使用しないようにしてください。次に例を示します。

    使用できる場合の例:

    • ユーザーが特定のゲームについて話すことができるコミュニティ フォーラムのページ
    • さまざまなサブフォーラム コンテンツをホストする一般的なフォーラムのプラットフォーム

    使用できない場合の例:

    • ウェブサイトのために代理人が直接書いた記事やブログ(コメント付きのものも含む)
    • 製品に関するユーザーのレビュー
  • Google のほとんどのユースケースでは、Q&A ページはディスカッション フォーラムのページの特別なケースとみなされます。フォーラムのウェブサイトの構造が主に質問と回答である場合は、代わりに Q&A マークアップを使用することをおすすめします。構造がより一般的で、質問と回答というコンテンツでない場合は、DiscussionForumPosting の使用をおすすめします。
  • DiscussionForumPosting に投稿のテキスト全体が含まれるようにし、また回答がそのページに存在する場合は、各 Comment に回答のテキスト全体が含まれるようにします。

技術に関するガイドライン

  • 構造化データの一般的な推奨事項とは異なり、可能であれば、DiscussionForumPosting のマークアップに Microdata や RDFa を使用することをおすすめします。これにより、マークアップ内で大きなテキスト ブロックを重複して記述する必要がなくなります。これはあくまで推奨事項であり、現在も JSON-LD はサポートされています。

構造化データタイプの定義

このセクションでは、DiscussionForumPosting に関連する構造化データタイプについて説明します。

コンテンツが Google 検索で使用されるようにするには、必須プロパティを含める必要があります。また、推奨プロパティを使用すると、ディスカッション フォーラムのページについて、さらに詳しい情報を追加できるため、ユーザー エクスペリエンスの向上につながります。

DiscussionForumPosting

DiscussionForumPosting は、ディスカッションのトピックである投稿を定義します。通常、このタイプの投稿はテキストで構成されていますが、メディア コンテンツのみで構成された投稿の場合もあります。

必須プロパティ

author

Person または Organization

投稿の作成者に関する情報。さまざまな記事の作成者を Google が正確に認識できるように、作成者のマークアップのベスト プラクティスを実践することをおすすめします。

記事プロフィール ページの構造化データでサポートされているプロパティを参考にして、作成者に適したプロパティをできるだけ多く含めます。

author.name

Text

投稿の作成者の名前。

datePublished

DateTime

投稿が作成された日時(ISO 8601 形式)。

textimagevideo のいずれか

投稿の内容を示すために、次のプロパティのいずれかを含める必要があります。

ただし、フォーラムの後の方のページやカテゴリページなど、別ページの投稿(外部 url あり)である場合は、これらのプロパティを含める必要はありません。

推奨プロパティ

author.url

URL

投稿の作成者を一意に識別するウェブページへのリンク。フォーラムのプロフィール ページなどが該当します。プロフィール ページの構造化データを使用してそのページをマークアップすることをおすすめします。

comment

Comment

投稿に関するコメントまたは応答(該当する場合)。ページに表示される順番でコメントをマークアップします。

creativeWorkStatus

Text

投稿が削除されたが、コンテキストやスレッドのために残っている場合、このプロパティを Deleted に設定します。

dateModified

DateTime

投稿が編集された日時(ISO 8601 形式)(該当する場合)。変更がない場合は、公開日を重複して記述する必要はありません。

headline

Text

投稿のタイトル。タイトルがない場合、テキストを複製したり、見出し用に短くしたりすることは避けてください。

image

ImageObject または URL

投稿内のインライン画像(該当する場合)。画像がない場合は、この項目にデフォルト画像やアイコン画像、プレースホルダ画像を含めないでください。

interactionStatistic

InteractionCounter

メインの投稿に関するユーザーの統計情報(該当する場合)。

Google は次の interactionTypes をサポートしています。

isPartOf

CreativeWork または URL

投稿がウェブサイトの特定の箇所で作成された場合、その投稿の主たる情報源(該当する場合)。たとえば、ウェブサイト上のサブフォーラムやグループなど。CreativeWorkWebPage のようなもの)を使用する場合は、URL プロパティを使って、その URL を指定します。

sharedContent

CreativeWork

投稿内の主要な共有コンテンツ(該当する場合)。最も一般的な使い方は、WebPages(URL を含む)を特定のトピックに関するディスカッションとして共有することですが、画像や動画でも、特にそれらがコメントの主な内容である場合は、このプロパティを使用できます。

投稿内でリンクが共有されていることを示す方法の一例は、以下のとおりです。

  ...
  "sharedContent": { "@type": "WebPage", url: "https://example.com/external-url" }
  ...
text

Text

投稿内のテキスト(該当する場合)。指定することが一般的ですが、投稿に他のメディアがある場合は省略も可能です。

url

URL

ディスカッションの正規 URL。複数ページにわたるスレッドでは、このプロパティを最初のページの URL に設定します。単一のディスカッションの場合は通常、現在の URL を指します。

video

VideoObject

投稿内のインライン動画(該当する場合)。

Comment

Comment は、CreativeWork に対するコメントを定義します。今回の場合、DiscussionForumPosting を指します。これには、DiscussionForumPosting に関するガイドラインと同じプロパティが多くあります。

必須プロパティ

author

Person または Organization

コメントの作成者に関する情報。さまざまな記事の作成者を Google が正確に認識できるように、作成者のマークアップのベスト プラクティスを実践することをおすすめします。

記事プロフィール ページの構造化データでサポートされているプロパティを参考にして、作成者に適したプロパティをできるだけ多く含めます。

datePublished

DateTime

コメントが作成された日時(ISO 8601 形式)。変更がない場合は、公開日を重複して記述する必要はありません。

text

Text

コメントのメインのテキスト。そのページのコメント内に存在するテキストと一致するのが理想的です。

推奨プロパティ

author.url

URL

コメントの作成者を一意に識別するウェブページへのリンク。フォーラムのプロフィール ページなどが該当します。プロフィール ページの構造化データを使用してそのページをマークアップすることをおすすめします。

comment

Comment

コメントに関するコメントまたは応答(該当する場合)。ページに表示される順番でコメントをマークアップします。

creativeWorkStatus

Text

コメントが削除されたが、コンテキストやスレッドのために残っている場合、このプロパティを Deleted に設定します(該当する場合)。

dateModified

DateTime

コメントが最後に編集された日時(ISO 8601 形式)(該当する場合)。

image

ImageObject または URL

コメント内のインライン画像(該当する場合)。画像がない場合は、この項目にデフォルト画像、アイコン画像、プレースホルダ画像を含めないでください。

interactionStatistic

InteractionCounter

コメントに関するユーザーの統計情報(該当する場合)。

Google は次の interactionTypes をサポートしています。

sharedContent

CreativeWork

コメント内の主要な共有コンテンツ(該当する場合)。最も一般的な使い方は、WebPages(URL を含む)を特定のトピックに関するディスカッションとして共有することですが、画像や動画でも、特にそれらがコメントの主な内容である場合は、このプロパティを使用できます。

コメント内でリンクが共有されていることを示す方法の一例は、以下のとおりです。

  ...
  "sharedContent": { "@type": "WebPage", url: "https://example.com/external-url" }
  ...

url

URL

ページ内の特定コメントへの URL(該当する場合)。元の投稿にアクセスするための URL の場合は、このプロパティを含めないでください。

video

VideoObject

コメント内のインライン動画(該当する場合)。

InteractionCounter

InteractionCounter を使用すると、特定のタイプのインタラクションに数値を関連付けることができます。これは、author プロパティに加え、両方のコンテンツ(DiscussionForumPosting および Comment)のプロパティでも使用できます。

必須プロパティ

userInteractionCount

Integer

このインタラクションが実行された回数。

interactionType

Action サブタイプ

このプロパティに対する有効な Action サブタイプの一覧については、InteractionCounter を使用しているプロパティ(interactionStatistic など)をご確認ください。

Search Console でリッチリザルトを監視する

Search Console は、Google 検索におけるページのパフォーマンスを監視できるツールです。Search Console に登録していなくても Google 検索結果に表示されますが、登録することにより、Google がサイトをどのように認識しているかを把握して改善できるようになります。次の場合は Search Console を確認することをおすすめします。

  1. 構造化データを初めてデプロイした後
  2. 新しいテンプレートをリリースした後やコードを更新した後
  3. トラフィックを定期的に分析する場合

構造化データを初めてデプロイした後

ページがインデックスに登録されたら、関連するリッチリザルトのステータス レポートを使用して、問題がないかどうかを確認します。有効な項目が増え、無効な項目が増えていない状態が理想的です。構造化データに問題が見つかった場合の手順は次のとおりです。

  1. 無効な項目を修正します
  2. 一般公開 URL の検査を行い、問題が解決したかどうかを確認します。
  3. ステータス レポートを使用して検証をリクエストします。

新しいテンプレートをリリースした後やコードを更新した後

ウェブサイトに大幅な変更を加えた場合は、構造化データの無効な項目が増加しないかどうか監視します。
  • 無効な項目が増加した場合は、新しく公開したテンプレートが正常に機能していないか、既存のテンプレートの新しい操作方法に問題があると考えられます。
  • 有効な項目が減少している(無効な項目の増加と一致しない)場合は、ページに構造化データが埋め込まれていない可能性があります。URL 検査ツールを使用して問題の原因を特定します。

トラフィックを定期的に分析する場合

パフォーマンス レポートを使用して Google 検索のトラフィックを分析します。このデータから、検索でページがリッチリザルトとして表示される頻度、ユーザーがページをクリックする頻度、検索結果におけるページの平均掲載順位がわかります。この結果は、Search Console API を使用して自動的に取得することもできます。

トラブルシューティング

構造化データの実装またはデバッグで問題が発生した場合は、以下のリソースが参考になります。