Datos estructurados de foros de debate (DiscussionForumPosting)

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

Las etiquetas de foros de debate están diseñadas para los sitios de tipo foro en los que los usuarios comparten perspectivas de primera mano. Cuando los sitios de foros añaden estas etiquetas, la Búsqueda de Google puede identificar mejor los debates online en la Web y usarlas en funciones como los debates y foros y las perspectivas.

Cómo usar DiscussionForumPosting en un foro

Por lo general, te recomendamos que anides los comentarios debajo de la publicación con la que estén relacionados. Si el foro tiene su propia estructura organizada en conversaciones, utiliza un árbol de comentarios para representarla:

{
  "@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 la naturaleza es 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 de 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 única publicación, utiliza 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"
    ...
  }
}

Las páginas web que tienen una lista de publicaciones (por ejemplo, en una página de perfil, tema o categoría) es habitual que no tengan toda la información presente en la misma página y requieran que el usuario haga clic para obtener información adicional (como respuestas). Puedes elegir incluir solo la información que está presente en la página (e 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 esa publicación. Para mostrar que las páginas son un conjunto de publicaciones relacionadas, puede ser útil adjuntarlas todas a una Collection o ItemList.

Cómo añadir datos estructurados

Los datos estructurados son un formato estandarizado con el que se puede proporcionar información sobre una página y clasificar su contenido. Consulta cómo funcionan los datos estructurados si aún no te has familiarizado con ellos.

A continuación se explica a grandes rasgos cómo crear, probar y publicar datos estructurados. Si necesitas una guía detallada para añadir datos estructurados a una página web, consulta el codelab de datos estructurados.

  1. Añade las propiedades obligatorias. Consulta más información sobre dónde insertar datos estructurados en una página en función del formato que estés utilizando.
  2. Sigue las directrices.
  3. Valida tu código con la prueba de resultados enriquecidos y corrige los errores críticos. Te recomendamos que también corrijas 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. Crea varias páginas que incluyan tus datos estructurados y comprueba cómo las ve Google con la herramienta de inspección de URLs. Asegúrate de que Google pueda acceder a tu página y de que no esté bloqueada por un archivo robots.txt, por la etiqueta noindex ni por requisitos de inicio de sesión. Si la página se ve bien, puedes solicitar que Google vuelva a rastrear tus URLs.
  5. Para que Google siempre tenga la versión actualizada de tus páginas, te recomendamos que envíes un sitemap. Puedes automatizar este envío con la API Sitemap de Search Console.

Ejemplos

En el siguiente ejemplo de etiquetas se muestra una página de foro lineal y sin conversaciones:

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>

Directrices

Para que los datos estructurados de tu foro de debate se puedan utilizar en la Búsqueda de Google, debes seguir estas directrices:

Directrices de contenido

  • Usa la etiqueta DiscussionForumPosting solo para describir una publicación generada por un usuario en el foro de un sitio web. No utilices estas etiquetas en contenido creado principalmente por los editores del sitio web o sus agentes.
  • Aunque recomendamos las etiquetas válidas de otros tipos (Article, SocialMediaPosting, VideoObject) que puedan utilizar unas etiquetas muy similares con comentarios, información del autor y estadísticas de interacción, no se deberían usar las etiquetas DiscussionForumPosting. Ejemplos:

    Casos prácticos que son válidos:

    • Una página del foro de una comunidad en la que los usuarios pueden hablar sobre un juego determinado
    • Una plataforma de foro genérica que aloja una gran variedad de contenido de subforo

    Casos prácticos que no son válidos:

    • Un artículo o blog escrito directamente por un agente para el sitio web (incluso con comentarios).
    • Reseñas de usuarios sobre un producto
  • Ten en cuenta que, en la mayoría de los casos prácticos de Google, una página de preguntas se considera un caso especial de una página de foro de debate. Si la estructura del sitio web del foro está compuesta principalmente por preguntas con respuestas, te recomendamos que uses etiquetas de preguntas. Si la estructura es más general y no suele ser contenido de preguntas y respuestas, DiscussionForumPosting es una mejor opción.
  • Comprueba que en cada elemento DiscussionForumPosting se incluye el texto completo de la publicación y que en cada elemento Comment se incluye el texto completo de la respuesta si se encuentra en esa página.

Directrices técnicas

  • A diferencia de nuestra preferencia general de datos estructurados, te recomendamos que proporciones las etiquetas DiscussionForumPosting en microdatos (o RDFa) si es posible. De esta forma, no tendrás que duplicar bloques de texto grandes en las etiquetas. Sin embargo, se trata solo de 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 pueda usarse en la Búsqueda de Google. También puedes especificar las propiedades recomendadas para proporcionar más información sobre las páginas de tu foro de debate y, así, ofrecer una mejor experiencia de usuario.

DiscussionForumPosting

El tipo DiscussionForumPosting define una publicación original que será tema de debate. Aunque este tipo de contenido generalmente se compone de texto, es posible tener una publicación en el foro que solo contenga contenido multimedia.

Propiedades obligatorias

author

Person o Organization

Información sobre el autor de la publicación. Para ayudar a Google a identificar mejor a los autores en distintas funciones, te recomendamos que sigas las prácticas recomendadas para etiquetar autores.

Incluye todas las propiedades que sean relevantes para el autor con las propiedades admitidas de los datos estructurados de artículos y páginas de perfil.

author.name

Text

Nombre del autor de la publicación.

datePublished

DateTime

Indica la fecha y la hora de 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:

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

Propiedades recomendadas

author.url

URL

Indica el enlace a una página web que solo identifica al autor de la publicación, probablemente una página de perfil del foro. Te recomendamos que marques esa página con datos estructurados de página de perfil.

comment

Comment

Un comentario sobre la publicación o una respuesta a ella, si procede. Marca los comentarios en el orden en el que aparecen en la página.

creativeWorkStatus

Text

Si la publicación se ha eliminado, pero sigue estando disponible para contextualizarla o organizarla en conversaciones, asigna el valor Deleted a esta propiedad.

dateModified

DateTime

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

headline

Text

Título de la publicación. Si no hay un título independiente, no dupliques ni trunques el texto para convertirlo en un título.

image

ImageObject o URL

Cualquier imagen insertada en la publicación, si procede. Si no hay imágenes, no incluyas imágenes predeterminadas, de icono ni de marcador de posición en este campo.

interactionStatistic

InteractionCounter

Estadísticas de usuario aplicadas a la publicación principal, si procede.

Google admite las siguientes interactionTypes:

isPartOf

CreativeWork o URL

Fuente principal de la publicación en caso de que aparezca en una parte concreta de todo el sitio web, si procede. Por ejemplo, un subforo o un grupo dentro del sitio web general. Si se utiliza CreativeWork (como WebPage), usa la propiedad URL para especificar su URL.

sharedContent

CreativeWork

El contenido principal compartido en la publicación, si procede. La forma más habitual de utilizarlo es compartir WebPages (con URLs) como un tema de debate, pero también se pueden utilizar imágenes o vídeos con esta propiedad, sobre todo si son el contenido principal del comentario.

Aquí tienes un ejemplo de cómo indicar que hay un enlace compartido en la publicación:

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

Text

Texto de la publicación, si procede. Es muy habitual, pero en algunos casos se puede omitir si hay otro contenido multimedia en la publicación.

url

URL

URL canónica del debate. En las conversaciones de varias páginas, asigna a esta propiedad la URL de la primera página. En el caso de ser un debate de una página, suele ser la URL actual.

video

VideoObject

Cualquier vídeo insertado en la publicación, si procede.

Comment

El tipo Comment define un comentario en un CreativeWork original. En este caso, es un objeto DiscussionForumPosting. Comparte muchas de las propiedades con nuestras directrices de DiscussionForumPosting.

Propiedades obligatorias

author

Person o Organization

Información sobre el autor del comentario. Para ayudar a Google a identificar mejor a los autores en distintas funciones, te recomendamos que sigas las prácticas recomendadas para etiquetar autores.

Incluye todas las propiedades que sean relevantes para el autor con las propiedades admitidas de los datos estructurados de artículos y páginas de perfil.

datePublished

DateTime

Indica la fecha y la hora en las que se publicó el comentario en formato ISO 8601. Si no se han hecho cambios, no es necesario duplicar la fecha de publicación.

text

Text

Texto principal del comentario. Lo ideal es que este campo coincida con el texto que se incluye en la página del comentario.

Propiedades recomendadas

author.url

URL

Indica el enlace a una página web que solo identifica al autor del comentario, probablemente una página de perfil del foro. Te recomendamos que marques esa página con datos estructurados de página de perfil.

comment

Comment

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

creativeWorkStatus

Text

Si el comentario se ha eliminado, pero sigue estando disponible para contextualizarlo o organizarlo en conversaciones, asigna el valor Deleted a esta propiedad, si procede.

dateModified

DateTime

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

image

ImageObject o URL

Cualquier imagen insertada en el comentario, si procede. Si no hay imágenes, no incluyas imágenes predeterminadas, de icono ni de marcador de posición en este campo.

interactionStatistic

InteractionCounter

Estadísticas de usuario aplicadas al comentario, si procede.

Google admite las siguientes interactionTypes:

sharedContent

CreativeWork

El contenido principal compartido en el comentario, si procede. La forma más habitual de utilizarlo es compartir WebPages (con URLs) como un tema de debate, pero también se pueden utilizar imágenes o vídeos con esta propiedad, sobre todo si son el contenido principal del comentario.

Aquí tienes un ejemplo de cómo indicar que hay un enlace compartido en el comentario:

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

url

URL

La URL de ese comentario concreto de la página, si procede. No incluyas esta propiedad si solo es la URL de la publicación original.

video

VideoObject

Cualquier vídeo insertado en el comentario, si procede.

InteractionCounter

InteractionCounter permite asociar un recuento a un determinado tipo de interacción. Se puede utilizar tanto en propiedades de contenido (DiscussionForumPosting y Comment) como en propiedades author.

Propiedades obligatorias

userInteractionCount

Integer

El número de veces que se ha realizado esta interacción.

interactionType

Subtipo de Action

Para ver una lista con los subtipos de Action válidos para esta propiedad, comprueba la propiedad que usa InteractionCounter (por ejemplo, interactionStatistic).

Monitorizar resultados enriquecidos con Search Console

Search Console es una herramienta que te ayuda a monitorizar el rendimiento de tus páginas en la Búsqueda de Google. No hace falta que te registres en Search Console para que tu sitio web aparezca en los resultados de la Búsqueda de Google, pero, si lo haces, sabrás cómo lo ve Google y qué puedes hacer para mejorarlo. Te recomendamos que consultes Search Console en los siguientes casos:

  1. Después de implementar datos estructurados por primera vez
  2. Después de publicar plantillas nuevas o modificar el código
  3. Al hacer el análisis periódico del tráfico

Después de implementar datos estructurados por primera vez

Una vez que Google haya indexado tus páginas, puedes comprobar si hay algún problema en el informe de estado de resultados enriquecidos correspondiente. Lo ideal es que haya un aumento en el número de elementos válidos y que no lo haya en el número de elementos no válidos. Si detectas problemas en tus datos estructurados, haz lo siguiente:

  1. Corrige los elementos no válidos.
  2. Inspecciona la URL en tiempo real para ver si el problema continúa.
  3. Solicita que se valide la corrección desde el informe de estado.

Después de publicar plantillas nuevas o modificar el código

Cuando hagas cambios significativos en tu sitio web, observa si se incrementa la cantidad de elementos no válidos de datos estructurados.
  • Si notas que hay más elementos no válidos, quizá sea porque has implementado una plantilla que no funciona, o puede que tu sitio esté interactuando con la plantilla que utilizas de un modo diferente que no es adecuado.
  • Si notas que hay menos elementos válidos, pero no hay un incremento de elementos no válidos, es posible que hayas dejado de insertar datos estructurados en tus páginas. Para saber cuál es la causa del problema, utiliza la herramienta de inspección de URLs.

Al hacer el análisis periódico del tráfico

Consulta el informe de rendimiento para analizar el tráfico de tus páginas en la Búsqueda de Google. En él, verás con qué frecuencia aparece tu página como resultado enriquecido en la Búsqueda, cada cuánto hacen clic en ella los usuarios y cuál es la posición media que ocupa tu sitio web en los resultados de búsqueda. También puedes obtener automáticamente estos resultados con la API de Search Console.

Solucionar problemas

Si tienes problemas para implementar o depurar datos estructurados, a continuación se incluyen algunos recursos que pueden serte útiles.