Schema.org e JSON-LD: guida completa
Dati strutturati Schema.org: JSON-LD vs Microdata, Organization e sottotipi, Product con Offer, rating e recensioni, foto — con codice pronto all'uso.
I dati strutturati Schema.org sono un vocabolario che i motori di ricerca usano per capire i contenuti delle pagine. Implementati correttamente, trasformano un normale snippet in un risultato avanzato — con stelle di rating, prezzi dei prodotti, orari di apertura o foto mostrati direttamente nei risultati di Google.
Questo articolo copre il sistema completo: dalla scelta del formato giusto e la prioritizzazione degli schema al codice JSON-LD concreto per Organization, Product, AggregateRating, Review e ImageObject — con particolare attenzione ai sottotipi più spesso trascurati.
<script> → Google analizza la struttura → rich snippet con stelle e prezzo direttamente nella SERP.Cos'è Schema.org e perché usare i dati strutturati
Schema.org è un progetto comune di Google, Bing, Yahoo e Yandex lanciato nel 2011. Il vocabolario contiene oltre 900 tipi di dati e migliaia di proprietà. Tutti i tipi ereditano dalla base Thing e si ramificano in Person, Organization, Product, Event, CreativeWork, Action e altri.
CTR dai rich snippet
Gli snippet con stelle e altri elementi avanzati mostrano costantemente una CTR più alta rispetto agli snippet semplici
Tipi in Schema.org
Il vocabolario copre tutto, da ricette e prodotti a paper scientifici e software
Raccomandazione di Google
Google raccomanda ufficialmente JSON-LD per tutte le nuove implementazioni di dati strutturati
Impatto diretto sul ranking
Il markup non spinge direttamente il posizionamento, ma i risultati avanzati alzano la CTR — che migliora indirettamente i segnali di ranking
Il markup Schema.org risolve tre problemi in una volta. Per i motori di ricerca — identifica le entità senza ambiguità: questa è un'organizzazione, non solo un testo con il nome di un'azienda; questo è il prezzo di un prodotto, non solo un numero. Per gli utenti — i risultati avanzati nella SERP rendono gli snippet più informativi prima del clic. Per il business — CTR più alta e presenza nella Knowledge Graph.
Formati: JSON-LD, Microdata, RDFa
I dati strutturati Schema.org si possono aggiungere in tre modi. Per i nuovi progetti la scelta è chiara — JSON-LD. Gli altri sono supportati ma più difficili da mantenere.
| Formato | Dove vive | Accoppiamento con l'HTML | Raccomandazione Google |
|---|---|---|---|
| JSON-LD | Tag <script type="application/ld+json"> | Separato dall'HTML | Preferito |
| Microdata | Attributi itemscope, itemtype, itemprop | Incorporato negli elementi HTML | Supportato |
| RDFa | Attributi vocab, typeof, property | Incorporato negli elementi HTML | Supportato |
Il template JSON-LD di base è lo stesso per ogni pagina: un tag <script> con type application/ld+json, contenente un oggetto JSON con i campi obbligatori @context e @type. Il tag può stare in <head> o alla fine di <body>. Più schema — più blocchi <script> separati.
<!-- Base JSON-LD template -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Site Name",
"url": "https://example.com"
}
</script>
<!-- Multiple schemas — multiple <script> blocks -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Company",
"url": "https://example.com"
}
</script>Priorità degli schema: cosa dà risultati avanzati su Google
Non ogni tipo Schema.org produce un risultato avanzato. Google supporta un insieme limitato di tipi che danno arricchimenti visivi nella SERP. Gli altri schema aiutano Google a capire i contenuti ma non cambiano l'aspetto dello snippet.
Attività e organizzazioni
LocalBusiness, Restaurant, Store — orari, indirizzo, telefono, rating nel Knowledge Panel. Priorità massima per le attività locali.
Prodotti e prezzi
Product + Offer — prezzo, disponibilità, rating direttamente nello snippet. Google Shopping e rich snippet. Essenziale per l'e-commerce.
Contenuti e FAQ
Article, FAQPage, HowTo — le FAQ si espandono direttamente nei risultati, dando molta più spazio SERP alla tua pagina.
Rating e recensioni
AggregateRating + Review — stelle di rating nello snippet. L'elemento visivamente più evidente. Funziona per Product, LocalBusiness, Recipe, Course.
| Tipo di schema | Risultato avanzato su Google | Priorità |
|---|---|---|
| Product + Offer | Prezzo, disponibilità, rating nello snippet; schede Shopping | Critico per l'e-commerce |
| LocalBusiness + AggregateRating | Knowledge Panel, Map Pack, stelle | Critico per le attività locali |
| FAQPage | Domande espandibili sotto lo snippet | Alta per le pagine di contenuto |
| Article / NewsArticle | Carosello Top Stories, data di pubblicazione | Alta per media e blog |
| BreadcrumbList | Breadcrumb al posto dell'URL nello snippet | Alta per qualsiasi sito |
| HowTo | Istruzioni passo-passo con foto nella SERP | Media per le pagine di tutorial |
| Event | Scheda evento con data e luogo | Media per le pagine di eventi |
| Recipe | Scheda ricetta con foto, tempo, calorie | Media per i siti di cucina |
| Organization (non-Local) | Knowledge Graph, logo nei risultati | Base per tutti i siti |
Organization — schema base e tutti i sottotipi
Organization è il tipo base per qualsiasi azienda, organizzazione o brand. La gerarchia dei sottotipi è ampia — ogni sottotipo aggiunge campi specifici. Scegliere il sottotipo giusto conta: Google lo usa per determinare il contesto del business e cosa mostrare nel Knowledge Panel.
| Tipo | Per chi | Campi aggiuntivi chiave |
|---|---|---|
| Organization | Qualsiasi azienda, ONG, brand senza indirizzo fisico | name, url, logo, sameAs |
| LocalBusiness | Qualsiasi attività con indirizzo fisico | address, telephone, openingHours, geo |
| Store | Negozio al dettaglio | currenciesAccepted, paymentAccepted |
| FoodEstablishment | Café, ristorante (tipo base) | servesCuisine, menu, hasMap |
| Restaurant | Ristorante | servesCuisine, menu, acceptsReservations |
| CafeOrCoffeeShop | Caffetteria | servesCuisine |
| FastFoodRestaurant | Fast food | servesCuisine |
| MedicalOrganization | Struttura medica (base) | medicalSpecialty |
| Hospital | Ospedale | availableService, medicalSpecialty |
| MedicalClinic | Clinica | medicalSpecialty, availableService |
| Dentist | Studio dentistico | availableService |
| LegalService | Studio legale | — |
| Lawyer | Avvocato | — |
| AccountingService | Studio contabile / audit | — |
| FinancialService | Banca, assicurazione, società di investimento | — |
| RealEstateAgent | Agenzia immobiliare | — |
| AutomotiveBusiness | Concessionario, officina auto (base) | — |
| AutoDealer | Concessionaria auto | — |
| AutoRepair | Officina auto | — |
| Hotel | Hotel | amenityFeature, checkinTime, checkoutTime |
| SportsActivityLocation | Struttura sportiva (base) | availableService |
| GymOrHealthClub | Palestra / fitness club | — |
| GovernmentOrganization | Organizzazione governativa | — |
| EducationalOrganization | Istituto di istruzione (base) | — |
| CollegeOrUniversity | Università / college | — |
| School | Scuola | — |
| Corporation | Grande società | tickerSymbol, legalName |
Organization di base
Lo schema Organization base si aggiunge alla homepage di qualsiasi sito. Aiuta Google a identificare il brand e a collegarlo ai profili esterni tramite sameAs. Il campo @id con un identificatore univoco permette ad altri schema di referenziare questa organizzazione senza duplicare i dati.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Company Name",
"legalName": "Example LLC",
"url": "https://example.com",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 200,
"height": 60
},
"description": "Brief company description for Knowledge Graph.",
"foundingDate": "2015",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+1-800-123-4567",
"contactType": "customer service",
"availableLanguage": "English"
},
"sameAs": [
"https://www.linkedin.com/company/yourcompany",
"https://twitter.com/yourcompany",
"https://www.facebook.com/yourcompany"
]
}LocalBusiness — attività fisica con indirizzo
LocalBusiness è il sottotipo più importante per le attività con una sede fisica. Uno schema compilato correttamente migliora le chance di comparire nel Google Map Pack (il blocco mappa in cima alla SERP) e in un Knowledge Panel con gli orari. Campi chiave: address, geo, openingHoursSpecification, telephone, priceRange.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://example.com/#business",
"name": "The Birch Restaurant",
"url": "https://example.com",
"telephone": "+1-212-555-0100",
"email": "info@example.com",
"servesCuisine": ["American", "European"],
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10001",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.7128,
"longitude": -74.0060
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "12:00",
"closes": "23:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "12:00",
"closes": "00:00"
}
],
"image": "https://example.com/photos/restaurant.jpg",
"hasMap": "https://maps.google.com/?cid=XXXXXX"
}sameAs — collegamento ai profili esterni
Il campo sameAs dice a Google che la tua organizzazione coincide con i profili sulle piattaforme esterne. È il campo chiave per costruire la Knowledge Graph — il database di entità di Google. Più fonti autorevoli confermano l'esistenza di un'organizzazione, più alta la probabilità di comparire in un Knowledge Panel.
- Wikidata (il più autorevole): https://www.wikidata.org/wiki/Q...
- Wikipedia: https://en.wikipedia.org/wiki/...
- LinkedIn, Twitter/X, Facebook, Instagram
- Il canale YouTube dell'organizzazione
- Google Business Profile (per le attività locali)
- Directory di settore — registri medici, ordini degli avvocati, ecc.
Product — schema prodotto e tutti i sottotipi
Product è lo schema base per qualsiasi prodotto o articolo. Lavora insieme a Offer (prezzo e disponibilità) e AggregateRating (rating). Uno schema Product implementato correttamente dà un risultato avanzato su Google: prezzo, stato di disponibilità e stelle direttamente nello snippet.
| Tipo | Caso d'uso | Note |
|---|---|---|
| Product | Schema base per qualsiasi prodotto | Obbligatori name, image, description |
| Offer | Annuncio specifico: prezzo + disponibilità | Obbligatori price, priceCurrency, availability |
| AggregateOffer | Range di prezzi (più offerte) | lowPrice, highPrice, offerCount |
| ProductGroup | Gruppo di prodotti con varianti | variesBy, hasVariant |
| IndividualProduct | Variante specifica dentro un ProductGroup | isVariantOf → ProductGroup |
| Brand | Brand del prodotto (annidato in Product) | Obbligatorio name |
Product di base con Offer
Google richiede un insieme minimo di campi per il risultato avanzato: name, image, description e un Offer annidato con priceCurrency, price e availability. Senza almeno uno di questi, lo snippet del prodotto non verrà arricchito.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"description": "Lightweight running shoes with foam sole for road running. Weight 230g, drop 10mm.",
"sku": "AIRX-001-BLK",
"mpn": "AIRX001",
"gtin13": "0123456789012",
"brand": {
"@type": "Brand",
"name": "RunMax"
},
"image": [
"https://example.com/photos/airx-front.jpg",
"https://example.com/photos/airx-side.jpg",
"https://example.com/photos/airx-back.jpg"
],
"offers": {
"@type": "Offer",
"url": "https://example.com/products/air-x-pro",
"priceCurrency": "USD",
"price": "89.99",
"priceValidUntil": "2026-12-31",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "RunMax Store"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
}
}AggregateOffer — range di prezzi
Se un prodotto è offerto da più venditori o esiste in varianti con prezzi diversi, usa AggregateOffer. Mostra un intervallo di prezzi (lowPrice – highPrice) invece di un prezzo unico.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Galaxy S25 Smartphone",
"brand": { "@type": "Brand", "name": "Samsung" },
"image": "https://example.com/galaxy-s25.jpg",
"offers": {
"@type": "AggregateOffer",
"priceCurrency": "USD",
"lowPrice": "799",
"highPrice": "1099",
"offerCount": "3",
"offers": [
{
"@type": "Offer",
"name": "128 GB / Black",
"price": "799",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "256 GB / White",
"price": "899",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "512 GB / Violet",
"price": "1099",
"priceCurrency": "USD",
"availability": "https://schema.org/PreOrder"
}
]
}
}ProductGroup — prodotti con varianti
ProductGroup è un gruppo di prodotti correlati che differiscono per parametri (taglia, colore, materiale). Si usa sulle pagine prodotto con varianti. Ogni variante specifica è un Product annidato con isVariantOf che punta al ProductGroup padre.
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Air X Pro Running Shoes",
"description": "Road running shoes available in multiple colours and sizes.",
"url": "https://example.com/products/air-x-pro",
"brand": { "@type": "Brand", "name": "RunMax" },
"productGroupID": "AIRX-PRO",
"variesBy": ["https://schema.org/color", "https://schema.org/size"],
"hasVariant": [
{
"@type": "Product",
"name": "Air X Pro — Black, US 9",
"sku": "AIRX-BLK-9",
"color": "Black",
"size": "US 9",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Air X Pro — Blue, US 11",
"sku": "AIRX-BLU-11",
"color": "Blue",
"size": "US 11",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/OutOfStock"
}
}
]
}AggregateRating e Review — rating e recensioni
Le stelle di rating nei risultati di ricerca sono l'elemento dello snippet visivamente più evidente. Si implementano con due tipi correlati: AggregateRating (il punteggio aggregato di tutti i rating) e Review (una singola recensione testuale). Entrambi i tipi si annidano sempre dentro uno schema padre: Product, LocalBusiness, Recipe, Course, Book, ecc.
AggregateRating — punteggio aggregato
AggregateRating riflette il punteggio aggregato: valore medio e numero di voti. Google lo renderizza come stelle nello snippet. Campi obbligatori: ratingValue (media) e reviewCount oppure ratingCount.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"image": "https://example.com/airx.jpg",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "128",
"ratingCount": "215"
}
}Review — recensioni singole
Review è lo schema di una singola recensione testuale. Si annida dentro l'oggetto padre tramite la proprietà review. Ogni Review contiene autore, rating e corpo del testo. Google può mostrare un estratto del testo della recensione nel risultato avanzato.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"image": "https://example.com/airx.jpg",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"name": "Great shoes for daily runs",
"reviewBody": "Been running in them for 3 months — sole holds up well, feet don't tire. Recommend for road running.",
"datePublished": "2026-03-15",
"author": {
"@type": "Person",
"name": "Alex K."
}
},
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5"
},
"reviewBody": "Good cushioning, but runs a little small. Order half a size up.",
"datePublished": "2026-04-01",
"author": {
"@type": "Person",
"name": "Maria S."
}
}
]
}ImageObject — foto nei dati strutturati
Le immagini in Schema.org si possono specificare in due modi: come stringa URL ("image": "https://example.com/photo.jpg") oppure come ImageObject con metadati. La stringa basta per la maggior parte degli schema, ma per Article, Recipe e HowTo Google raccomanda ImageObject — permette di indicare dimensioni, didascalia e formato.
| Tipo di schema | Requisiti immagine | Larghezza min. |
|---|---|---|
| Product | Almeno una foto del prodotto; preferibile sfondo bianco | 800 px consigliati |
| Article / NewsArticle | Almeno 3 immagini: 16:9, 4:3, 1:1 | 1200 px |
| Recipe | Obbligatoria la foto del piatto finito | Qualsiasi; ottimale 1200×628 |
| LocalBusiness | Foto di ingresso, interni, facciata | Qualsiasi |
| Organization (logo) | Rettangolare, sfondo bianco/trasparente | 112×112 min, rapporto fino a 1×10 |
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"image": [
{
"@type": "ImageObject",
"url": "https://example.com/airx-front.jpg",
"width": 1200,
"height": 1200,
"caption": "Air X Pro — front view"
},
{
"@type": "ImageObject",
"url": "https://example.com/airx-side.jpg",
"width": 1200,
"height": 1200,
"caption": "Air X Pro — side view"
}
],
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}Combinare più schema su una pagina
Più schema su una singola pagina si aggiungono come blocchi <script> separati. Ecco il markup completo di una pagina prodotto: l'organizzazione venditrice, i breadcrumb, il prodotto con prezzo, rating e recensione.
<!-- Schema 1: Selling organisation (on all site pages) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "RunMax Store",
"url": "https://example.com",
"logo": "https://example.com/logo.png"
}
</script>
<!-- Schema 2: Breadcrumbs -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com" },
{ "@type": "ListItem", "position": 2, "name": "Footwear", "item": "https://example.com/shoes" },
{ "@type": "ListItem", "position": 3, "name": "Air X Pro" }
]
}
</script>
<!-- Schema 3: Product with price, rating and review (on product page) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"description": "Road running shoes.",
"sku": "AIRX-001",
"brand": { "@type": "Brand", "name": "RunMax" },
"image": "https://example.com/airx.jpg",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2026-12-31",
"seller": { "@id": "https://example.com/#organization" }
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128",
"bestRating": "5"
},
"review": {
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"author": { "@type": "Person", "name": "Alex K." },
"reviewBody": "Excellent shoes, run in them every day.",
"datePublished": "2026-04-10"
}
}
</script>Validare i dati strutturati
Dopo l'implementazione, valida sempre il markup. Google offre due strumenti ufficiali, e Search Console mostra il quadro reale di ciò che il crawler vede sulle pagine indicizzate.
Apri search.google.com/test/rich-results, inserisci un URL o HTML. Lo strumento mostra quali risultati avanzati sono disponibili per lo schema, quali campi servono e cosa è compilato male. È l'unico posto per confermare se il markup produrrà davvero arricchimenti visivi nella SERP.
Apri validator.schema.org per la validazione completa contro lo standard Schema.org (non solo i tipi supportati da Google). Controlla le proprietà obbligatorie di ogni tipo e segnala combinazioni incompatibili — utile per schema annidati complessi.
Search Console → Miglioramenti → scegli il tipo di schema. Questa sezione mostra gli errori reali sulle pagine indicizzate. Gli errori qui sono ciò che blocca davvero i risultati avanzati adesso, sugli URL live — il segnale più azionabile.
Checklist dati strutturati
Implementazione base JSON-LD
- Tag <script type="application/ld+json"> aggiunto in <head> o a fine <body>
- Ogni blocco contiene @context: "https://schema.org" e @type
- Tutte le entità principali hanno un @id univoco in formato URL-con-fragment (#nome)
- Il JSON è valido — niente virgole finali, tutte le virgolette chiuse
- Il markup è presente nella risposta HTML del server (non solo via JavaScript)
Organization / LocalBusiness
- Sottotipo corretto scelto (Restaurant, Dentist, AutoDealer, ecc.) invece di semplice Organization
- Compilati: name, url, telephone, address (per LocalBusiness)
- geo aggiunto con coordinate precise (latitude, longitude)
- openingHoursSpecification compilato con giorni in inglese e orari HH:MM
- sameAs punta almeno ai profili social + Wikidata (se esiste)
Product
- Compilati: name, description, image (almeno una immagine)
- Offer annidato con: price, priceCurrency, availability, priceValidUntil
- availability usa l'URL completo: https://schema.org/InStock
- sku e/o gtin13 forniti per Google Shopping
- AggregateRating annidato se la pagina ha rating degli utenti
Rating e recensioni
- AggregateRating contiene ratingValue, reviewCount, bestRating, worstRating
- I valori di AggregateRating coincidono con i dati reali del sito
- Review è annidata dentro l'oggetto padre (Product / LocalBusiness), non autonoma
- Ogni Review ha author (Person), reviewRating, datePublished, reviewBody
- Le recensioni nel markup sono recensioni reali di utenti reali
FAQ
Il markup Schema.org influisce direttamente sul posizionamento Google?
Si possono aggiungere dati strutturati via Google Tag Manager?
Quante recensioni includere nel markup Review?
Perché i risultati avanzati non compaiono anche se il markup ha passato la validazione?
Come indicare il prezzo per un negozio internazionale?
Check it with SpiderHead
Free and local: run the audit on your own machine.



