Datos estructurados del foro de debate (DiscussionForumPosting)

Ilustración de la función de debates y foros

El lenguaje de marcado para foros de debate está diseñado para cualquier sitio similar al de un foro en el que los usuarios comparten perspectivas de primera mano. Cuando los sitios de foros agregan este lenguaje de marcado, la Búsqueda de Google puede identificar mejor los debates en línea en la Web y aprovecharlo en funciones, como Debates y Foros, y Perspectivas.

Cómo usar DiscussionForumPosting en un foro

En general, recomendamos anidar los comentarios en la publicación con la que se relacionan. Si el foro tiene su propia estructura de conversación, utiliza un árbol de comentarios para representar su estructura:

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

Si es de naturaleza más lineal (por ejemplo, una publicación original seguida de una serie de respuestas), anídalas todas debajo de la publicación original como comentarios. Lo ideal es que las páginas posteriores de contenido en los foros de varias páginas incluyan la publicación original con la URL de la página principal:

{
  // 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 la URL se refiere principalmente a una sola publicación, usa mainEntity (o mainEntityOfPage) para identificar el código DiscussionForumPosting principal:

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

En el caso de las páginas web que tienen una lista de publicaciones (por ejemplo, en una página de perfil, tema o categoría), es común que no incluyan toda la información en la misma página y requieran que el usuario haga clic para obtener información adicional, como las respuestas. Puedes elegir incluir solo la información que está en la página (también incluir la URL de la publicación específica del debate).

No marques una publicación de la página como entidad principal si no es una página de debate de la publicación. Para mostrar que las páginas son un conjunto de publicaciones que se relacionan, podría ser útil adjuntarlas todas a una Collection o ItemList.

Cómo agregar datos estructurados

Los datos estructurados son un formato estandarizado para proporcionar información sobre una página y clasificar su contenido. Si aún no estás familiarizado con los datos estructurados, obtén más información sobre su funcionamiento.

A continuación, presentamos una descripción general para aprender a compilar, probar y actualizar datos estructurados.

  1. Agrega las propiedades obligatorias. Según el formato que uses, obtén información sobre las ubicaciones donde puedes insertar datos estructurados en la página.
  2. Sigue los lineamientos.
  3. Valida tu código con la Prueba de resultados enriquecidos y corrige cualquier error crítico. Procura también corregir los problemas no críticos que puedan marcarse en la herramienta, ya que pueden ayudar a mejorar la calidad de los datos estructurados (sin embargo, esto no es necesario para que se muestren los resultados enriquecidos).
  4. Implementa algunas páginas que incluyan tus datos estructurados y utiliza la Herramienta de inspección de URLs para probar el modo en el que Google ve la página. Asegúrate de que Google pueda acceder a la página y que no esté bloqueada por un archivo robots.txt, una etiqueta noindex ni requisitos de acceso. Si la página se ve bien, puedes pedirle a Google que vuelva a rastrear tus URLs.
  5. Para mantener informado a Google sobre los cambios futuros, te recomendamos que envíes un mapa del sitio. Puedes automatizar este proceso con la API de Search Console Sitemap.

Ejemplos

El siguiente ejemplo de lenguaje de marcado muestra una página de foro lineal sin subconversaciones:

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>
Microdatos

<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>

Lineamientos

Para que los datos estructurados de tu foro de debate sean aptos para usarse en la Búsqueda de Google, debes seguir estos lineamientos:

Lineamientos de contenido

  • Usa el lenguaje de marcado DiscussionForumPosting solo para describir una publicación generada por usuarios en el foro de un sitio web. No uses este lenguaje de marcado para contenido creado principalmente por los publicadores del sitio web o sus agentes.
  • Si bien fomentamos el lenguaje de marcado válido de otros tipos (Article, SocialMediaPosting, VideoObject) que pueden usar un lenguaje de marcado muy similar con comentarios, información sobre el autor y estadísticas de interacción, no se debe usar DiscussionForumPosting. Estos son algunos ejemplos:

    Casos de uso válidos:

    • Una página de foro de la comunidad donde los usuarios pueden hablar sobre un determinado juego
    • Una plataforma de foro genérica que aloja una amplia variedad de contenido de subforos

    Casos de uso no válidos:

    • Un artículo o blog escrito directamente por un agente para el sitio web (incluso con comentarios)
    • Opiniones de usuarios sobre un producto
  • Ten en cuenta que, en la mayoría de los casos de uso de Google, una página de preguntas y respuestas se considera un caso especial de la página de un foro de discusión. Si la estructura del sitio web del foro consiste principalmente en preguntas con respuestas, te recomendamos que, en su lugar, uses lenguaje de marcado de preguntas y respuestas. Si la estructura es más general y no suele incluir contenido de preguntas y respuestas, DiscussionForumPosting sería una mejor opción.
  • Asegúrate de que cada DiscussionForumPosting incluya el texto completo de la publicación y de que cada Comment incluya el texto completo de la respuesta si se encuentra en esa página.

Lineamientos técnicos

  • A diferencia de nuestra preferencia general de datos estructurados, recomendamos proporcionar el lenguaje de marcado DiscussionForumPosting en microdatos (o RDFa) si es posible. Así se evita que tengas que duplicar bloques de texto grandes dentro del lenguaje de marcado. Sin embargo, esto es solo una recomendación, y JSON-LD sigue siendo totalmente compatible.

Definiciones de tipos de datos estructurados

En esta sección se describen los tipos de datos estructurados relacionados con DiscussionForumPosting.

Debes incluir las propiedades obligatorias para que tu contenido sea apto para usarse en la Búsqueda de Google. También puedes incluir las propiedades recomendadas para agregar más información sobre las páginas de los foros de debate, lo que podría brindar una mejor experiencia del usuario.

DiscussionForumPosting

El tipo DiscussionForumPosting define una publicación original que es el tema de debate. Si bien este tipo en general se compone de texto, es posible tener una publicación en el foro que solo consista en contenido multimedia.

Propiedades obligatorias

author

Person o Organization

Incluye información sobre el autor de la publicación. Para ayudar a Google a comprender mejor a los autores en varias funciones, sugerimos seguir las prácticas recomendadas de lenguaje de marcado de autor.

Incluye todas las propiedades que sean relevantes para el autor con las propiedades compatibles de los datos estructurados de artículo y página de perfil como guía.

author.name

Text

El nombre del autor de la publicación.

datePublished

DateTime

Corresponde a la fecha y hora en que se realizó la publicación en formato ISO 8601.

text, image o video

Para representar el contenido de la publicación, debes incluir una de las siguientes propiedades:

Esto no es obligatorio si representas una publicación en otra página (con una url externo), como en las páginas posteriores de foros o en páginas de categorías de foros.

Propiedades recomendadas

author.url

URL

Un vínculo a una página web que identifica de forma exclusiva al autor de la publicación, que probablemente sea una página de perfil del foro. Te recomendamos que agregues lenguaje de marcado a esa página con datos estructurados de páginas de perfil.

comment

Comment

Un comentario sobre la publicación o su respuesta, si corresponde. Marca comentarios en el orden en el que aparecen en la página.

creativeWorkStatus

Text

Si la publicación se borró, pero permanece para el contexto o las conversaciones, establece esta propiedad en Deleted.

dateModified

DateTime

Corresponde a la fecha y hora en que se editó la publicación en formato ISO 8601, si corresponde. Si no se realizaron cambios, no es necesario duplicar la fecha de publicación.

headline

Text

El título de la publicación. Si no hay un título separado, no dupliques ni trunques el texto en un título.

image

ImageObject o URL

Cualquier imagen intercalada en la publicación, si corresponde. Si no hay imágenes, no incluyas imágenes predeterminadas, de íconos ni de marcadores de posición en este campo.

interactionStatistic

InteractionCounter

Estadísticas del usuario que se aplican a la publicación principal, si corresponde.

Google admite estos interactionTypes:

isPartOf

CreativeWork o URL

La fuente principal de la publicación, si esta se produce en un lugar particular del sitio web general, si corresponde. Por ejemplo, un subforo o grupo dentro del sitio web más amplio. Si se usa un CreativeWork (como WebPage), usa la propiedad URL para especificar su URL.

sharedContent

CreativeWork

El contenido compartido principal en la publicación, si corresponde. La forma más común en que se puede utilizar es compartir WebPages (con URLs) como un tema de debate, pero también se pueden usar imágenes o videos con esta propiedad, en especial si son el contenido principal del comentario.

Este es un ejemplo de cómo agregar que hay un vínculo compartido en la publicación:

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

Text

Cualquier texto de la publicación, si corresponde. Esto es muy común, pero en algunos casos puede omitirse si la publicación incluye otro contenido multimedia.

url

URL

Corresponde a la URL canónica del debate. En conversaciones de varias páginas, establece esta propiedad como la URL de la primera página. En el caso de un solo debate, suele ser la URL actual.

video

VideoObject

Todos los videos intercalados en la publicación, si corresponde.

Comment

El tipo Comment define un comentario en un CreativeWork original. En este caso, es un DiscussionForumPosting. Comparte muchas de las mismas propiedades con nuestros lineamientos para DiscussionForumPosting.

Propiedades obligatorias

author

Person o Organization

Información sobre el autor del comentario. Para ayudar a Google a comprender mejor a los autores en varias funciones, sugerimos seguir las prácticas recomendadas de lenguaje de marcado de autor.

Incluye todas las propiedades que sean relevantes para el autor con las propiedades compatibles de los datos estructurados de artículo y página de perfil como guía.

datePublished

DateTime

Corresponde a la fecha y hora en que se realizó el comentario en formato ISO 8601. Si no se realizaron cambios, no es necesario duplicar la fecha de publicación.

text

Text

Texto principal del comentario. Lo ideal sería que este campo coincida con el texto que está en la página en el comentario.

Propiedades recomendadas

author.url

URL

Un vínculo a una página web que identifica de forma exclusiva al autor del comentario, que probablemente sea una página de perfil del foro. Te recomendamos que agregues lenguaje de marcado a esa página con datos estructurados de páginas de perfil.

comment

Comment

Otro comentario sobre el comentario o en respuesta a este, si corresponde. Marca los comentarios en el orden en el que aparecen en la página.

creativeWorkStatus

Text

Si se borró el comentario, pero permanece en el contexto o en las conversaciones, establece esta propiedad en Deleted, si corresponde.

dateModified

DateTime

Corresponde a la fecha y hora en que se editó el comentario por última vez en formato ISO 8601, si corresponde.

image

ImageObject o URL

Cualquier imagen intercalada en el comentario, si corresponde. Si no hay imágenes, no incluyas imágenes predeterminadas, de íconos ni de marcadores de posición en este campo.

interactionStatistic

InteractionCounter

Estadísticas del usuario que se aplican al comentario, si corresponde.

Google admite estos interactionTypes:

sharedContent

CreativeWork

El contenido compartido principal en el comentario, si corresponde. La forma más común en que se puede utilizar es compartir WebPages (con URLs) como un tema de debate, pero también se pueden usar imágenes o videos con esta propiedad, en especial, si son el contenido principal del comentario.

Este es un ejemplo de cómo agregar que hay un vínculo compartido en el comentario:

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

url

URL

La URL de este comentario específico en la página, si corresponde. No incluyas esta propiedad si se trata solo de la URL de la publicación original.

video

VideoObject

Todos los videos intercalados en el comentario, si corresponde.

InteractionCounter

El InteractionCounter permite que se asocie un recuento con un tipo de interacción determinado. Se puede usar en contenido (DiscussionForumPosting y Comment) y author propiedades.

Propiedades obligatorias

userInteractionCount

Integer

La cantidad de veces que se realizó esta interacción.

interactionType

Subtipo de Action

Para obtener una lista de los subtipos Action válidos de esta propiedad, verifica la propiedad que usa InteractionCounter (por ejemplo, interactionStatistic).

Cómo supervisar resultados enriquecidos con Search Console

Search Console es una herramienta que te ayuda a supervisar el rendimiento de tus páginas en la Búsqueda de Google. Si bien no es necesario que te registres en Search Console para que se incluya tu contenido en los resultados de la Búsqueda de Google, puede ayudarte a comprender y mejorar la forma en que Google ve tu sitio. Te recomendamos que revises Search Console en los siguientes casos:

  1. Después de implementar datos estructurados por primera vez
  2. Después de lanzar plantillas nuevas o actualizar código
  3. Para analizar tráfico periódicamente

Después de implementar datos estructurados por primera vez

Después de que Google haya indexado tus páginas, busca problemas con el informe de estado de resultados enriquecidos relevante. Lo ideal es que haya un aumento de los elementos válidos y no de los elementos no válidos. Si encuentras problemas en los datos estructurados, haz lo siguiente:

  1. Corrige los elementos no válidos.
  2. Inspecciona una URL publicada para verificar si persiste el problema.
  3. Solicita una validación desde el informe de estado.

Después de lanzar plantillas nuevas o actualizar código

Cuando realices cambios significativos en tu sitio web, supervisa los aumentos en los elementos no válidos de datos estructurados.
  • Si notas un aumento en la cantidad de elementos no válidos, tal vez se deba a que implementaste una plantilla que no funciona o a que tu sitio interactúa con la plantilla actual de una forma diferente e incorrecta.
  • Si notas una disminución de los elementos válidos (que no coincide con un aumento en la cantidad de elementos no válidos), es posible que ya no estés incorporando datos estructurados en tus páginas. Usa la Herramienta de inspección de URLs para saber cuál es la causa del problema.

Cómo analizar el tráfico periódicamente

Analiza el tráfico de la Búsqueda de Google con el Informe de rendimiento. Los datos te mostrarán con qué frecuencia tu página aparece como resultado enriquecido en la Búsqueda, con qué frecuencia los usuarios hacen clic en ella y cuál es la posición promedio en la que apareces en los resultados de la búsqueda. También puedes extraer esos resultados automáticamente con la API de Search Console.

Solución de problemas

Si tienes problemas para implementar o depurar datos estructurados, te brindamos algunos recursos que podrían resultarte útiles.