Dati strutturati per forum di discussione (DiscussionForumPosting)

Illustrazione della funzionalità Discussioni e forum

Il markup per forum di discussione è progettato per qualsiasi sito in stile forum in cui le persone condividono collettivamente prospettive in prima persona. Quando si aggiunge questo markup ai siti di forum, la Ricerca Google può identificare meglio le discussioni sul web e utilizzare questo markup in funzionalità quali Discussioni e forum e Prospettive.

Come utilizzare DiscussionForumPosting all'interno di un forum

In generale, consigliamo di nidificare i commenti sotto il post a cui fanno riferimento. Se il forum ha una propria struttura di thread, utilizza un albero di commenti per rappresentarne la struttura:

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

Se ha una struttura più lineare (ad esempio, un post originale seguito da una serie di risposte), nidifica tutte le risposte sotto il post originale come commenti. Idealmente, le pagine successive di contenuti nei forum con più pagine includono il post originale con l'URL della pagina 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",
    ...
  }]
}

Se l'URL riguarda principalmente un singolo post, utilizza mainEntity (o mainEntityOfPage) per identificare il DiscussionForumPosting principale:

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

Per le pagine web che contengono un elenco di post (ad esempio, su una pagina di profilo, argomento o categoria), è normale che non includano tutte le informazioni presenti nella stessa pagina e richiedano all'utente di fare clic per ottenere informazioni aggiuntive (come le risposte). Spetta a te scegliere se includere solo le informazioni presenti nella pagina (nonché l'URL al post della discussione specifica).

Non contrassegnare un solo post nella pagina come entità principale se non è una pagina di discussione del post. Per mostrare che le pagine sono un insieme correlato di post, potrebbe essere utile collegarle tutte a Collection o ItemList.

Come aggiungere dati strutturati

I dati strutturati sono un formato standardizzato per fornire informazioni su una pagina e classificarne i contenuti. Se non li hai mai utilizzati, scopri di più su come funzionano i dati strutturati.

Ecco una panoramica su come creare, testare e rilasciare i dati strutturati. Per una guida passo per passo su come aggiungere dati strutturati a una pagina web, consulta il codelab sui dati strutturati.

  1. Aggiungi le proprietà obbligatorie. In base al formato che utilizzi, scopri dove inserire i dati strutturati nella pagina.
  2. Segui le linee guida.
  3. Convalida il codice utilizzando lo strumento di Test dei risultati avanzati e correggi eventuali errori critici. Prendi in considerazione anche la possibilità di correggere eventuali problemi non critici che potrebbero essere segnalati nello strumento, in quanto possono contribuire a migliorare la qualità dei tuoi dati strutturati (tuttavia, questo non è necessario per l'idoneità per i risultati avanzati).
  4. Implementa alcune pagine che includono dati strutturati e utilizza lo strumento Controllo URL per verificare come Google vede la pagina. Assicurati che la pagina sia accessibile per Google e che non venga bloccata da file robots.txt, tag noindex o requisiti di accesso. Se la pagina non presenta problemi, puoi chiedere a Google di ripetere la scansione degli URL.
  5. Per tenere Google informata delle future modifiche, ti consigliamo di inviare una Sitemap. Puoi automatizzare questa operazione con l'API Search Console Sitemap.

Esempi

Il seguente esempio di markup mostra una pagina di forum lineare non in thread:

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

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

Linee guida

Affinché i dati strutturati per forum di discussione siano idonei all'utilizzo nella Ricerca Google, devi seguire queste linee guida:

Norme relative ai contenuti

  • Utilizza il markup DiscussionForumPosting solo per descrivere un post generato dagli utenti su un sito web. Non utilizzare questo markup per contenuti creati principalmente dai publisher del sito web o dai loro agenti.
  • Se il tuo sito è più simile a una piattaforma di social media generica, puoi utilizzare SocialMediaPosting, che è il tipo principale di DiscussionForumPosting, con gli stessi requisiti.
  • Anche se incoraggiamo markup validi di altri tipi (Article, ImageObject, VideoObject) che possono utilizzare un markup molto simile con commenti, informazioni sugli autori e statistiche sulle interazioni, questi non devono utilizzare il markup DiscussionForumPosting. Ecco alcuni esempi:

    Casi d'uso validi:

    • Una pagina di un forum della community in cui gli utenti possono parlare di un determinato gioco
    • Una piattaforma di forum generica che ospita una vasta gamma di contenuti di forum secondari
    • Una piattaforma di social media in cui gli utenti possono pubblicare e rispondere a commenti o contenuti multimediali

    Casi d'uso non validi:

    • Un articolo o un blog scritto direttamente da un agente per il sito web (anche con commenti)
    • Recensioni degli utenti su un prodotto
  • Tieni presente che, per la maggior parte dei casi d'uso di Google, una pagina di domande e risposte è considerata un caso speciale di pagina di forum di discussione. Se la struttura del sito web del forum è costituita principalmente da domande con risposte, ti consigliamo di utilizzare invece il markup per domande e risposte. Se la struttura è più generica e di solito non comprende contenuti di domande e risposte, DiscussionForumPosting sarebbe una scelta migliore.
  • Assicurati che ogni elemento DiscussionForumPosting includa l'intero testo del post e che ogni elemento Comment includa l'intero testo della risposta, se presente nella pagina.

Linee guida tecniche

  • A differenza della nostra preferenza generale per i dati strutturati, ti consigliamo di fornire il markup DiscussionForumPosting in formato Microdati (o RDFa), se possibile. In questo modo, non sarà necessario duplicare grandi blocchi di testo all'interno del markup. Tuttavia, si tratta solo di un suggerimento, e JSON-LD è ancora pienamente supportato.

Definizioni dei tipi di dati strutturati

Questa sezione descrive i tipi di dati strutturati relativi a DiscussionForumPosting.

Affinché i tuoi contenuti siano idonei a essere utilizzati nella Ricerca Google, devi includere le proprietà obbligatorie. Puoi anche includere le proprietà consigliate per aggiungere ulteriori informazioni sulle tue pagine di forum di discussione, che potrebbero fornire un'esperienza utente migliore.

DiscussionForumPosting (o SocialMediaPosting)

Il tipo DiscussionForumPosting definisce un post originale che è l'argomento di discussione. Anche se questo tipo è generalmente composto da un testo, è possibile avere un post su un forum costituito solo da contenuti multimediali.

Proprietà obbligatorie

author

Person o Organization

Informazioni sull'autore del post. Per consentire a Google di comprendere meglio gli autori in varie funzionalità, ti consigliamo di seguire le best practice per il markup degli autori.

Includi tutte le proprietà significative per l'autore, utilizzando come guida le proprietà supportate dei dati strutturati per articoli e pagine del profilo.

author.name

Text

Il nome dell'autore del post.

datePublished

DateTime

La data e l'ora in cui il post è stato creato, nel formato ISO 8601.

text, image o video

Per rappresentare i contenuti del post, devi includere una delle seguenti proprietà:

Non sono necessarie se stai rappresentando un post su un'altra pagina (con un url esterno) come nelle pagine successive dei forum o nelle pagine di categoria dei forum.

Proprietà consigliate

author.url

URL

Un link a una pagina web che identifica in modo univoco l'autore del post, in genere una pagina del profilo del forum. Ti consigliamo di eseguire il markup di questa pagina utilizzando i dati strutturati per pagine del profilo.

comment

Comment

Un commento o una risposta al post, se applicabile. Esegui il markup dei commenti nell'ordine in cui appaiono sulla pagina.

creativeWorkStatus

Text

Se il post è stato eliminato, ma è ancora disponibile per fornire contesto o per i thread, imposta questa proprietà su Deleted, se applicabile.

dateModified

DateTime

La data e l'ora in cui il post è stato modificato, nel formato ISO 8601, se applicabili. Se non sono state apportate modifiche, non è necessario duplicare la data di pubblicazione.

headline

Text

Il titolo del post. Se non c'è un titolo separato, non duplicare o troncare il testo. Questa operazione non è consigliata per un SocialMediaPosting.

image

ImageObject o URL

Eventuali immagini incorporate nel post, se applicabili. Se non sono presenti, non includere immagini predefinite, segnaposto o icone in questo campo.

interactionStatistic

InteractionCounter

Statistiche sugli utenti applicate al post principale, se applicabili.

Google supporta i seguenti valori interactionTypes:

isPartOf

CreativeWork o URL

La fonte principale del post se si trova in una determinata parte del sito web generico, se applicabile. Ad esempio, un forum o un gruppo secondario all'interno di un sito web più ampio. Se viene utilizzato CreativeWork (come WebPage), usa la proprietà URL per specificarne l'URL.

sharedContent

CreativeWork

I contenuti principali condivisi nel post, se applicabili. Il modo più comune per usare questa proprietà è condividere WebPages (con URL) come argomento di discussione, ma è possibile utilizzare anche immagini o video con questa proprietà, in particolare se sono i contenuti principali del commento.

Ecco un esempio di come aggiungere la presenza di un link condiviso nel post:

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

Text

Qualsiasi testo nel post, se applicabile. Si tratta di un elemento molto comune, ma in alcuni casi può essere tralasciato se il post contiene altri contenuti multimediali.

url

URL

L'URL canonico della discussione. Nei thread di più pagine, imposta questa proprietà sull'URL della prima pagina. Per una singola discussione, di solito si tratta dell'URL corrente.

video

VideoObject

Eventuali video incorporati nel post, se applicabili.

Comment

Il tipo Comment definisce un commento su un CreativeWork originale. In questo caso è un DiscussionForumPosting. Condivide molte delle stesse proprietà con le nostre linee guida per DiscussionForumPosting.

Proprietà obbligatorie

author

Person o Organization

Informazioni sull'autore del commento. Per consentire a Google di comprendere meglio gli autori in varie funzionalità, ti consigliamo di seguire le best practice per il markup degli autori.

Includi tutte le proprietà significative per l'autore, utilizzando come guida le proprietà supportate dei dati strutturati per articoli e pagine del profilo.

datePublished

DateTime

La data e l'ora in cui il commento è stato creato, nel formato ISO 8601. Se non sono state apportate modifiche, non è necessario duplicare la data di pubblicazione.

text, image o video

Per rappresentare i contenuti del commento, devi includere una delle seguenti proprietà:

Proprietà consigliate

author.url

URL

Un link a una pagina web che identifica in modo univoco l'autore del commento, in genere una pagina del profilo del forum. Ti consigliamo di eseguire il markup di questa pagina utilizzando i dati strutturati per pagine del profilo.

comment

Comment

Un altro commento a riguardo o in risposta al commento, se applicabile. Esegui il markup dei commenti nell'ordine in cui appaiono sulla pagina.

creativeWorkStatus

Text

Se il commento è stato eliminato, ma rimane per fornire contesto o per i thread, imposta questa proprietà su Deleted, se applicabile.

dateModified

DateTime

La data e l'ora in cui il commento è stato modificato l'ultima volta, nel formato ISO 8601, se applicabile.

image

ImageObject o URL

Eventuali immagini incorporate nel commento, se applicabili. Se non sono presenti immagini, non includere immagini predefinite, segnaposto o icone in questo campo.

interactionStatistic

InteractionCounter

Statistiche sugli utenti applicate al commento, se applicabili.

Google supporta i seguenti valori interactionTypes:

sharedContent

CreativeWork

I contenuti principali condivisi nel commento, se applicabili. Il modo più comune per usare questa proprietà è condividere WebPages (con URL) come argomento di discussione, ma è possibile utilizzare anche immagini o video con questa proprietà, in particolare se sono i contenuti principali del commento.

Ecco un esempio di come aggiungere la presenza di un link condiviso nel commento:

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

url

URL

L'URL a questo specifico commento sulla pagina, se applicabile. Non includere questa proprietà se è solo l'URL del post originale.

video

VideoObject

Eventuali video incorporati nel commento, se applicabili.

InteractionCounter

InteractionCounter consente di associare un conteggio a un determinato tipo di interazione. Questa opzione può essere utilizzata sia nelle proprietà dei contenuti (DiscussionForumPosting e Comment) che nelle proprietà author.

Proprietà obbligatorie

userInteractionCount

Integer

Il numero di volte in cui è stata eseguita questa interazione.

interactionType

Sottotipo di Action

Per un elenco di sottotipi Action validi per questa proprietà, controlla la proprietà che utilizza InteractionCounter (ad esempio, interactionStatistic).

Monitorare i risultati avanzati con Search Console

Search Console è uno strumento che consente di monitorare il rendimento delle tue pagine in Ricerca Google. Registrarsi in Search Console non è obbligatorio per essere inclusi nei risultati di Ricerca Google, ma può aiutarti a capire e migliorare il modo in cui Google vede il tuo sito. Ti consigliamo di controllare Search Console nei seguenti casi:

  1. Dopo aver effettuato il deployment dei dati strutturati per la prima volta
  2. Dopo aver rilasciato nuovi modelli o aggiornato il codice
  3. Analisi periodica del traffico

Dopo aver effettuato il deployment dei dati strutturati per la prima volta

Dopo che Google ha indicizzato le tue pagine, cerca i problemi utilizzando il report sullo stato dei risultati avanzati pertinente. L'ideale sarebbe un aumento degli elementi validi e nessun aumento di quelli non validi. Se riscontri problemi nei dati strutturati:

  1. Correggi gli elementi non validi.
  2. Controlla un URL pubblicato per verificare se il problema persiste.
  3. Richiedi la convalida utilizzando il report sullo stato.

Dopo aver rilasciato nuovi modelli o aggiornato il codice

Quando apporti modifiche significative al tuo sito web, monitora l'aumento degli elementi non validi dei dati strutturati.
  • Se vedi un aumento di errori, forse hai reso disponibile un nuovo modello non funzionante oppure il tuo sito interagisce con il modello esistente in modo nuovo, ma non corretto.
  • Se noti una diminuzione degli elementi validi (non associata a un aumento di quelli non validi), forse non stai più incorporando dati strutturati nelle tue pagine. Utilizza lo strumento Controllo URL per scoprire la causa del problema.

Analisi periodica del traffico

Analizza il traffico di Ricerca Google utilizzando il rapporto sul rendimento. I dati mostrano la frequenza con cui la pagina viene visualizzata nei risultati multimediali nella Ricerca, la frequenza con cui gli utenti fanno clic e qual è la posizione media che visualizzi nei risultati di ricerca. Puoi anche estrarre automaticamente questi risultati con l'API Search Console.

Risoluzione dei problemi

Se hai difficoltà con l'implementazione o il debug dei dati strutturati, ecco alcune risorse che potrebbero esserti utili.