Données structurées de forum de discussion (DiscussionForumPosting)

Illustration de la fonctionnalité Discussions et forums

Le balisage de forums de discussion est conçu pour tout site de type forum où les personnes partagent collectivement leurs points de vue personnels. Lorsque les sites de forums ajoutent ce balisage, la recherche Google peut mieux identifier les discussions en ligne sur le Web et utiliser ce balisage dans des fonctionnalités telles que Discussions et forums et Perspectives.

Utiliser DiscussionForumPosting sur un forum

En règle générale, nous recommandons d'imbriquer les commentaires sous le post auquel ils se rapportent. Si le forum possède sa propre structure de fil de discussion, utilisez une arborescence de commentaires pour la représenter:

{
  "@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",
      ...
    }]
  }]
}

S'il est de nature plus linéaire (par exemple, un post d'origine suivi d'une série de réponses), imbriquez toutes les réactions à la publication d'origine en tant que commentaires. Idéalement, les pages de contenu ultérieures des forums de plusieurs pages incluent le post d'origine avec l'URL de la page principale:

{
  // 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",
    ...
  }]
}

Si l'URL concerne principalement un seul post, utilisez mainEntity (ou mainEntityOfPage) pour identifier l'élément DiscussionForumPosting principal :

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

Pour les pages Web contenant une liste de posts (par exemple, sur une page de profil, de sujet ou de catégorie), il est courant qu'elles n'aient pas toutes les informations présentes sur la même page et nécessitent que l'utilisateur clique pour obtenir des informations supplémentaires (comme des réponses). C'est à vous de décider d'inclure uniquement les informations présentes sur la page (et d'inclure l'URL de la publication spécifique à la discussion).

Ne marquez pas une publication de la page comme entité principale s'il ne s'agit pas d'une page de discussion pour la publication. Pour indiquer que les pages sont un ensemble de publications connexes, il peut être utile de les joindre toutes à une Collection ou une ItemList.

Comment ajouter des données structurées

Ces données structurées représentent un format normalisé permettant de fournir des informations sur une page et de classer son contenu. En savoir plus sur le fonctionnement des données structurées

Voici, dans les grandes lignes, comment créer, tester et publier des données structurées. Pour consulter un guide détaillé sur l'ajout de données structurées à une page Web, accédez à cet atelier de programmation.

  1. Ajoutez les propriétés obligatoires. En fonction du format que vous utilisez, découvrez où insérer des données structurées sur la page.
  2. Suivez les consignes.
  3. Validez votre code à l'aide de l'outil de test des résultats enrichis et corrigez les erreurs critiques, le cas échéant. Envisagez également de résoudre les problèmes non critiques que l'outil a pu signaler, car cela peut contribuer à améliorer la qualité de vos données structurées. Toutefois, ce n'est pas nécessaire pour pouvoir bénéficier des résultats enrichis.
  4. Déployez quelques pages où figurent vos données structurées et utilisez l'outil d'inspection d'URL pour découvrir comment Google voit la page. Assurez-vous que Google peut accéder à votre page et qu'elle n'est pas bloquée par un fichier robots.txt, la balise noindex ni par des identifiants de connexion. Si tout semble être en ordre, vous pouvez demander à Google d'explorer de nouveau vos URL.
  5. Pour informer Google des modifications futures de vos pages, nous vous recommandons de nous envoyer un sitemap. Vous pouvez automatiser cette opération à l'aide de l'API Sitemap de la Search Console.

Exemples

L'exemple de balisage suivant illustre une page de forum linéaire, sans fils de discussion:

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": "2023-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": "2023-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": "2023-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": "2023-03-01T09:50:25+02:00",
        "interactionStatistic": {
          "@type": "InteractionCounter",
          "interactionType": "https://schema.org/LikeAction",
          "userInteractionCount": 7
        }
      }]
    }
  </script>
</head>
<body>
</body>
</html>
Microdonnées

<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="2023-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="2023-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="2023-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="2023-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>

Consignes

Pour que les données structurées de votre forum de discussion puissent être utilisées dans la recherche Google, vous devez suivre ces consignes:

Consignes relatives au contenu

  • N'utilisez le balisage DiscussionForumPosting que pour décrire un post généré par l'utilisateur sur un forum de site Web. N'utilisez pas ce balisage pour le contenu principalement rédigé par les éditeurs du site Web ou leurs agents.
  • Bien que nous encouragions le balisage valide d'autres types (Article, SocialMediaPosting, VideoObject) pouvant utiliser un balisage très similaire avec les commentaires, les informations sur l'auteur et les statistiques d'interaction, ceux-ci ne doivent pas utiliser le balisage DiscussionForumPosting. Voici quelques exemples :

    Cas d'utilisation valides :

    • Page de forum communautaire où les utilisateurs peuvent parler d'un jeu spécifique
    • Plate-forme de forum générique hébergeant une grande variété de contenus dans des sous-forums

    Cas d'utilisation non valides :

    • Article ou blog rédigé directement par un agent pour le site Web (même avec des commentaires)
    • Avis des utilisateurs sur un produit
  • Notez que dans la plupart des cas d'utilisation de Google, une page de questions/réponses est considérée comme un cas particulier de page de forum de discussion. Si la structure du site Web du forum est principalement constituée de questions avec réponses, nous vous recommandons d'utiliser plutôt le balisage de questions/réponses. Si la structure est plus générale et qu'il ne s'agit généralement pas d'un contenu de type questions/réponses, il est préférable d'utiliser DiscussionForumPosting.
  • Assurez-vous que chaque propriété DiscussionForumPosting inclut le texte intégral du post et que chaque Comment inclut le texte intégral de la réponse, le cas échéant.

Consignes techniques

  • Contrairement à nos préférences générales relatives aux données structurées, nous vous recommandons d'inclure le balisage DiscussionForumPosting sous forme de microdonnées (ou RDFa) dans la mesure du possible. Cela vous évite d'avoir à dupliquer de grands blocs de texte dans le balisage. Toutefois, il ne s'agit que d'une recommandation, et le format JSON-LD est toujours entièrement compatible.

Définitions des types de données structurées

Cette section décrit les types de données structurées liés à la propriété DiscussionForumPosting.

Vous devez inclure les propriétés obligatoires pour que votre contenu puisse être utilisé dans la recherche Google. Vous pouvez également inclure les propriétés recommandées pour ajouter d'autres informations à vos pages de forum de discussion et ainsi offrir une meilleure expérience utilisateur.

DiscussionForumPosting

Le type DiscussionForumPosting définit un post original qui est le sujet de la discussion. Bien que ce type soit généralement composé de texte, il est possible d'avoir une publication de forum uniquement constituée de contenu multimédia.

Propriétés obligatoires

author

Person ou Organization

Informations sur l'auteur du post. Pour aider Google à interpréter les auteurs dans différentes fonctionnalités, nous vous recommandons de suivre les bonnes pratiques en matière de balisage des auteurs.

Incluez autant de propriétés que pertinent pour l'auteur en vous appuyant sur les propriétés prises en charge des données structurées des articles et des pages de profil.

author.name

Text

Nom de l'auteur du post.

datePublished

DateTime

Date et heure du post au format ISO 8601.

text, image ou video

Pour représenter le contenu du post, vous devez inclure l'une des propriétés suivantes:

Ce n'est pas obligatoire si vous représentez un post sur une autre page (avec une url externe), comme sur les pages ultérieures des forums ou les pages de catégorie des forums.

Propriétés recommandées

author.url

URL

Lien vers une page Web qui identifie de manière unique l'auteur du message, probablement une page de profil du forum. Nous vous recommandons de baliser cette page à l'aide des données structurées de page de profil.

comment

Comment

Un commentaire ou une réponse au post, le cas échéant Balisez les commentaires dans l'ordre dans lequel ils apparaissent sur la page.

creativeWorkStatus

Text

Si le post a été supprimé, mais qu'il est conservé pour le contexte ou les fils de discussion, définissez cette propriété sur Deleted.

dateModified

DateTime

Date et heure de modification du post, au format ISO 8601, le cas échéant. Si aucune modification n'a été apportée, il n'est pas nécessaire de dupliquer la date de publication.

headline

Text

Titre du post. S'il n'y a pas de titre distinct, ne dupliquez pas et ne tronquez pas le texte pour en créer un.

image

ImageObject ou URL

Images intégrées au post, le cas échéant. En l'absence d'images, n'incluez pas d'images par défaut, d'icônes ni d'espaces réservés dans ce champ.

interactionStatistic

InteractionCounter

Statistiques utilisateur appliquées au post principal, le cas échéant.

Google prend en charge les interactionTypes suivants:

isPartOf

CreativeWork ou URL

Source principale du post si celui-ci apparaît sur une partie particulière du site Web. Il peut s'agir, par exemple, d'un sous-forum ou d'un groupe d'un site Web plus large. Si un élément CreativeWork (tel que WebPage) est utilisé, utilisez la propriété url pour spécifier son URL.

sharedContent

CreativeWork

Contenu principal partagé dans le post. La méthode la plus courante consiste à partager WebPages (avec des URL) en tant que discussion thématique, mais vous pouvez également utiliser des images ou des vidéos avec cette propriété, en particulier s'il s'agit du contenu principal du commentaire.

Voici un exemple d'ajout de l'existence d'un lien partagé dans le post :

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

text

Text

Texte du post, le cas échéant. Ces informations sont très courantes, mais peuvent parfois être omises si le post comporte d'autres contenus multimédias.

url

URL

URL canonique de la discussion. Dans les fils de discussion de plusieurs pages, définissez cette propriété sur l'URL de la première page. Pour une seule discussion, il s'agit généralement de l'URL actuelle.

video

VideoObject

Vidéos intégrées au post, le cas échéant.

Comment

Le type Comment définit un commentaire sur un CreativeWork d'origine. Dans le cas présent, il s'agit d'un DiscussionForumPosting. Il partage de nombreuses propriétés avec nos consignes pour DiscussionForumPosting.

Propriétés obligatoires

author

Person ou Organization

Informations sur l'auteur du commentaire. Pour aider Google à interpréter les auteurs dans différentes fonctionnalités, nous vous recommandons de suivre les bonnes pratiques en matière de balisage des auteurs.

Incluez autant de propriétés que pertinent pour l'auteur en vous appuyant sur les propriétés prises en charge des données structurées des articles et des pages de profil.

datePublished

DateTime

Date et heure auxquelles le commentaire a été rédigé, au format ISO 8601. Si aucune modification n'a été apportée, il n'est pas nécessaire de dupliquer la date de publication.

text

Text

Texte principal du commentaire. Idéalement, ce champ correspond au texte présent sur la page dans le commentaire.

Propriétés recommandées

author.url

URL

Lien vers une page Web qui identifie de manière unique l'auteur du commentaire, probablement une page de profil du forum. Nous vous recommandons de baliser cette page à l'aide des données structurées de page de profil.

comment

Comment

Autre commentaire à propos du commentaire ou en réponse à celui-ci, le cas échéant Balisez les commentaires dans l'ordre dans lequel ils apparaissent sur la page.

creativeWorkStatus

Text

Si le commentaire a été supprimé, mais qu'il est conservé pour le contexte ou les fils de discussion, définissez cette propriété sur Deleted.

dateModified

DateTime

Date et heure auxquelles le commentaire a été modifié pour la dernière fois, au format ISO 8601, le cas échéant.

image

ImageObject ou URL

Images intégrées au commentaire, le cas échéant. S'il n'y a pas d'image, n'incluez pas d'images d'espace réservé, d'icône ni par défaut dans ce champ.

interactionStatistic

InteractionCounter

Statistiques utilisateur appliquées au commentaire, le cas échéant.

Google prend en charge les interactionTypes suivants:

sharedContent

CreativeWork

Contenu principal partagé dans le commentaire. La méthode la plus courante consiste à partager WebPages (avec des URL) en tant que discussion thématique, mais vous pouvez également utiliser des images ou des vidéos avec cette propriété, en particulier s'il s'agit du contenu principal du commentaire.

Voici un exemple d'ajout de l'existence d'un lien partagé dans le commentaire :

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

url

URL

URL de ce commentaire spécifique sur la page. N'incluez pas cette propriété s'il s'agit simplement de l'URL du post d'origine.

video

VideoObject

Vidéos intégrées au commentaire, le cas échéant.

InteractionCounter

InteractionCounter permet d'associer un nombre à un certain type d'interaction. Vous pouvez l'utiliser pour les contenus (DiscussionForumPosting et Comment) et les propriétés, y compris les propriétés author.

Propriétés obligatoires

userInteractionCount

Integer

Nombre de fois où cette interaction a été effectuée.

interactionType

Sous-type de Action

Pour obtenir la liste des sous-types Action valides pour cette propriété, vérifiez la propriété qui utilise InteractionCounter (par exemple, interactionStatistic).

使用 Search Console 监控富媒体搜索结果

Search Console 是一款工具,可帮助您监控网页在 Google 搜索结果中的显示效果。即使没有注册 Search Console,您的网页也可能会显示在 Google 搜索结果中,但注册 Search Console 能够帮助您了解 Google 如何查看您的网站并做出相应的改进。建议您在以下情况下查看 Search Console:

  1. 首次部署结构化数据后
  2. 发布新模板或更新代码后
  3. 定期分析流量时

首次部署结构化数据后

等 Google 将网页编入索引后,请在相关的富媒体搜索结果状态报告中查看是否存在问题。 理想情况下,有效项目数量会增加,而无效项目数量不会增加。如果您发现结构化数据存在问题,请执行以下操作:

  1. 修正无效项目
  2. 检查实际网址,核实问题是否仍然存在。
  3. 使用状态报告请求验证

发布新模板或更新代码后

如果对网站进行重大更改,请监控结构化数据无效项目的增幅。
  • 如果您发现无效项目增多了,可能是因为您推出的某个新模板无法正常工作,或者您的网站以一种新的错误方式与现有模板交互。
  • 如果您发现有效项目减少了(但无效项目的增加情况并不对应),可能是因为您的网页中未再嵌入结构化数据。请通过网址检查工具了解导致此问题的原因。

定期分析流量时

请使用效果报告分析您的 Google 搜索流量。数据将显示您的网页在 Google 搜索结果中显示为富媒体搜索结果的频率、用户点击该网页的频率以及网页在搜索结果中的平均排名。您还可以使用 Search Console API 自动提取这些结果。

Dépannage

Si vous ne parvenez pas à mettre en œuvre ou à déboguer des données structurées, voici quelques ressources susceptibles de vous aider.