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.

Comment utiliser DiscussionForumPosting dans un forum

En règle générale, nous vous 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 multi-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 du post de 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 montre une page de forum linéaire sans fil 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": "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>
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="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>

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 site Web. N'utilisez pas ce balisage pour les contenus provenant principalement des éditeurs du site Web ou de leurs agents.
  • Si votre site ressemble davantage à une plate-forme de réseaux sociaux générique, vous pouvez utiliser SocialMediaPosting, qui est le type parent de DiscussionForumPosting, avec les mêmes exigences.
  • Bien que nous encouragions le balisage valide d'autres types (Article, ImageObject, 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
    • Plate-forme de réseaux sociaux où les utilisateurs peuvent publier des commentaires ou des contenus multimédias, et y répondre

    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 pour la plupart des cas d'utilisation de Google, une page de questions-réponses est considérée comme un cas particulier d'une 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. Vous n'avez donc pas besoin de dupliquer de grands blocs de texte dans le balisage. Toutefois, il ne s'agit que d'une recommandation, et 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 (ou SocialMediaPosting)

Le type DiscussionForumPosting définit le post d'origine 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 identifiant de manière unique l'auteur du post (il s'agit probablement d'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

Commentaire à propos du post ou réponse au post, le cas échéant Balisez les commentaires dans l'ordre dans lequel ils apparaissent sur la page.

creativeWorkStatus

Text

Lorsque 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, le cas échéant.

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. Cette pratique n'est pas recommandée pour un SocialMediaPosting.

image

ImageObject ou URL

Images intégrées au post, 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 post principal, le cas échéant.

Google accepte les interactionTypes suivants :

isPartOf

CreativeWork ou URL

Source principale du post si celui-ci apparaît sur une partie particulière du site Web, le cas échéant. Par exemple, un sous-forum ou un groupe sur un site Web plus vaste. Si un CreativeWork (comme WebPage) est utilisé, utilisez la propriété URL pour spécifier son URL.

sharedContent

CreativeWork

Le contenu principal partagé dans le post, le cas échéant 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 multi-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 ce cas, 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, image ou video

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

Propriétés recommandées

author.url

URL

Lien vers une page Web identifiant de manière unique l'auteur du commentaire (il s'agit probablement d'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, le cas échéant.

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 accepte les interactionTypes suivants :

sharedContent

CreativeWork

Le contenu principal partagé dans le commentaire, le cas échéant 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, le cas échéant. N'incluez pas cette propriété si elle correspond simplement à l'URL du post d'origine.

video

VideoObject

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

InteractionCounter

Le 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é, examinez la propriété qui utilise InteractionCounter (par exemple, interactionStatistic).

Suivre les résultats enrichis avec la Search Console

La Search Console est un outil qui vous permet de suivre les performances de vos pages dans la recherche Google. Il n'est pas nécessaire de vous inscrire à la Search Console pour figurer dans les résultats de recherche Google. Cependant, en vous inscrivant, vous comprendrez mieux la façon dont Google interprète votre site et serez plus à même de l'améliorer. Nous vous recommandons de consulter la Search Console dans les cas suivants :

  1. Après avoir déployé des données structurées pour la première fois
  2. Après avoir publié de nouveaux modèles ou après avoir mis à jour votre code
  3. Lors des analyses régulières du trafic

Après avoir déployé des données structurées pour la première fois

Une fois que Google a indexé vos pages, recherchez les problèmes à l'aide du rapport sur l'état des résultats enrichis. Idéalement, il y aura une augmentation du nombre d'articles valides et pas d'augmentation du nombre d'articles non valides. Si vous détectez des problèmes au niveau des données structurées :

  1. Corrigez les éléments non valides.
  2. Inspectez une URL active pour vérifier si le problème persiste.
  3. Demandez la validation à l'aide du rapport d'état.

Après avoir publié de nouveaux modèles ou après avoir mis à jour votre code

Lorsque vous apportez des modifications importantes à votre site Web, surveillez l'augmentation des éléments non valides dans les données structurées.
  • Si vous constatez une augmentation du nombre d'éléments non valides, vous avez peut-être déployé un nouveau modèle qui ne fonctionne pas, ou votre site interagit différemment et de façon incorrecte avec le modèle déjà disponible.
  • Si vous constatez une diminution du nombre d'éléments valides (sans augmentation du nombre d'éléments non valides), vous n'intégrez peut-être plus de données structurées dans vos pages. Utilisez l'outil d'inspection d'URL pour identifier la cause du problème.

Lors des analyses régulières du trafic

Analysez votre trafic de recherche Google à l'aide du rapport sur les performances. Les données indiquent la fréquence à laquelle votre page s'affiche en tant que résultat enrichi dans la recherche Google, ainsi que la fréquence à laquelle les internautes cliquent dessus et la position moyenne à laquelle vous apparaissez dans les résultats de recherche. Vous pouvez également extraire automatiquement ces résultats avec l'API Search Console.

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.