⌨️ Sviluppo web

Dati strutturati con Schema.org e JSON-LD: guida pratica

Cosa sono i dati strutturati, perché JSON-LD è il formato più comodo, esempi per articoli, organizzazioni e breadcrumb e come verificarli senza errori.

Un essere umano che legge una pagina capisce al volo che "14 marzo" è la data di pubblicazione, che il nome in fondo è l'autore e che il numero con il simbolo dell'euro è un prezzo. Per un programma non è così ovvio. I dati strutturati sono informazioni aggiuntive, in un formato standard, che descrivono esplicitamente di cosa parla una pagina e quali sono le sue proprietà principali.

Schema.org: il vocabolario comune

Schema.org è un vocabolario condiviso, nato dalla collaborazione tra i principali motori di ricerca, che definisce tipi (come Article, Organization, Person, Product, Event, LocalBusiness) e le loro proprietà (come headline, author, datePublished, price). I tipi sono organizzati in una gerarchia: NewsArticle e BlogPosting sono specializzazioni di Article, che a sua volta deriva da CreativeWork.

Il vocabolario si può esprimere in tre sintassi: Microdata, RDFa e JSON-LD. Le prime due inseriscono attributi direttamente negli elementi HTML; JSON-LD, invece, mette tutti i dati in un blocco separato.

Perché JSON-LD

JSON-LD è il formato più pratico per diversi motivi:

  • è separato dal markup visibile, quindi puoi modificare il layout senza toccare i dati strutturati e viceversa;
  • è facile da generare da un modello o da un generatore statico, partendo dagli stessi dati che producono la pagina;
  • è leggibile e verificabile a colpo d'occhio;
  • è il formato raccomandato nella documentazione di Google.

Si inserisce in un elemento script con un tipo specifico, che il browser non esegue:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Dati strutturati con Schema.org e JSON-LD",
  "datePublished": "2025-02-10",
  "dateModified": "2025-03-01",
  "author": {
    "@type": "Person",
    "name": "Nome Autore",
    "url": "https://www.esempio.it/chi-sono/"
  },
  "image": "https://www.esempio.it/img/copertina.jpg"
}
</script>

@context indica il vocabolario, @type il tipo dell'entità descritta. Le date seguono il formato ISO 8601.

Esempi utili per la maggior parte dei siti

Organizzazione o persona

Sulla home page di un sito aziendale o personale puoi descrivere l'entità che sta dietro al sito:

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Esempio Srl",
  "url": "https://www.esempio.it/",
  "logo": "https://www.esempio.it/img/logo.png",
  "sameAs": [
    "https://www.linkedin.com/company/esempio"
  ]
}

La proprietà sameAs collega l'entità ai suoi profili ufficiali su altre piattaforme, aiutando i motori a capire che si tratta della stessa organizzazione.

Il percorso di navigazione aiuta a rappresentare la posizione della pagina nel sito:

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Guide", "item": "https://www.esempio.it/guide/" },
    { "@type": "ListItem", "position": 2, "name": "SEO", "item": "https://www.esempio.it/guide/seo/" }
  ]
}

Più entità nella stessa pagina

Puoi inserire più blocchi JSON-LD oppure usare @graph per raccoglierli in uno solo, collegando le entità tra loro con identificativi @id. Per esempio, l'articolo può indicare come publisher l'organizzazione descritta altrove nel grafo, senza ripeterne tutti i dati.

Cosa ottieni (e cosa no)

I dati strutturati possono rendere una pagina idonea ai risultati arricchiti: stelle di valutazione, prezzi, date di eventi, breadcrumb al posto dell'URL e altri formati speciali. Tre precisazioni importanti:

  1. Idonea non significa garantita: il motore decide se e quando mostrare un risultato arricchito.
  2. I tipi che generano risultati arricchiti e i loro requisiti cambiano nel tempo: alcuni vengono introdotti, altri limitati. Prima di investire su un tipo specifico, controlla la documentazione aggiornata del motore di ricerca.
  3. I dati strutturati non sono di per sé un fattore che fa salire la pagina in classifica; aiutano la comprensione e la presentazione.

La regola fondamentale: corrispondenza con il contenuto visibile

I dati strutturati devono descrivere ciò che l'utente vede nella pagina. Inserire recensioni che non compaiono, prezzi diversi da quelli mostrati o domande e risposte nascoste è contrario alle linee guida dei motori di ricerca e può portare a provvedimenti manuali che tolgono l'idoneità ai risultati arricchiti. Il modo più sicuro per rispettare la regola è generare JSON-LD e HTML visibile dalla stessa fonte di dati.

Generare i dati automaticamente

In un generatore statico o in un CMS, il blocco JSON-LD va prodotto dal modello della pagina, non scritto a mano. Un esempio concettuale in JavaScript:

const datiStrutturati = {
  '@context': 'https://schema.org',
  '@type': 'BlogPosting',
  headline: articolo.titolo,
  datePublished: articolo.data,
  author: { '@type': 'Person', name: articolo.autore }
};
const json = JSON.stringify(datiStrutturati).replace(/</g, '\\u003c');

La sostituzione del carattere < evita che un titolo contenente </script> chiuda prematuramente il blocco: è una piccola precauzione di sicurezza da non dimenticare quando i dati provengono da input editabili.

Verificare

  • Lo strumento di test dei risultati arricchiti di Google indica se la pagina è idonea e segnala errori e avvisi.
  • Il validatore ufficiale di Schema.org controlla la correttezza rispetto al vocabolario, indipendentemente da un motore specifico.
  • Nella Search Console, i report sui miglioramenti mostrano gli errori rilevati su tutto il sito nel tempo.

Distingui gli errori (che rendono il dato inutilizzabile) dagli avvisi (proprietà consigliate mancanti): i secondi non bloccano nulla, ma completarli rende i dati più ricchi.

In sintesi

  • I dati strutturati descrivono in modo esplicito il contenuto della pagina con il vocabolario Schema.org.
  • JSON-LD è il formato più comodo: separato dal markup e facile da generare.
  • Possono rendere la pagina idonea ai risultati arricchiti, senza garanzie.
  • Devono sempre corrispondere al contenuto visibile: generali dalla stessa fonte dei dati della pagina.
  • Verifica con gli strumenti di test e monitora gli errori nel tempo.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche