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.

Il percorso del JSON-LD: markup dentro <script> → Google analizza la struttura → rich snippet con stelle e prezzo direttamente nella SERP.
Google raccomanda ufficialmente JSON-LD come formato preferito. A differenza di Microdata e RDFa, JSON-LD vive dentro un tag <script> e non si incorpora nel markup HTML — più facile da mantenere e aggiornare in modo indipendente dal layout.

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.

+36%

CTR dai rich snippet

Gli snippet con stelle e altri elementi avanzati mostrano costantemente una CTR più alta rispetto agli snippet semplici

900+

Tipi in Schema.org

Il vocabolario copre tutto, da ricette e prodotti a paper scientifici e software

JSON-LD

Raccomandazione di Google

Google raccomanda ufficialmente JSON-LD per tutte le nuove implementazioni di dati strutturati

0

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.

FormatoDove viveAccoppiamento con l'HTMLRaccomandazione Google
JSON-LDTag <script type="application/ld+json">Separato dall'HTMLPreferito
MicrodataAttributi itemscope, itemtype, itempropIncorporato negli elementi HTMLSupportato
RDFaAttributi vocab, typeof, propertyIncorporato negli elementi HTMLSupportato
JSON-LD è la scelta ovvia per i nuovi progetti: il codice è isolato dal layout, facile da generare dinamicamente e semplice da aggiornare senza toccare i template HTML. Microdata e RDFa sono supportati da Google, ma qualsiasi modifica al layout può rompere il markup in silenzio.

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.

html
<!-- 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 schemaRisultato avanzato su GooglePriorità
Product + OfferPrezzo, disponibilità, rating nello snippet; schede ShoppingCritico per l'e-commerce
LocalBusiness + AggregateRatingKnowledge Panel, Map Pack, stelleCritico per le attività locali
FAQPageDomande espandibili sotto lo snippetAlta per le pagine di contenuto
Article / NewsArticleCarosello Top Stories, data di pubblicazioneAlta per media e blog
BreadcrumbListBreadcrumb al posto dell'URL nello snippetAlta per qualsiasi sito
HowToIstruzioni passo-passo con foto nella SERPMedia per le pagine di tutorial
EventScheda evento con data e luogoMedia per le pagine di eventi
RecipeScheda ricetta con foto, tempo, calorieMedia per i siti di cucina
Organization (non-Local)Knowledge Graph, logo nei risultatiBase 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.

TipoPer chiCampi aggiuntivi chiave
OrganizationQualsiasi azienda, ONG, brand senza indirizzo fisiconame, url, logo, sameAs
LocalBusinessQualsiasi attività con indirizzo fisicoaddress, telephone, openingHours, geo
StoreNegozio al dettagliocurrenciesAccepted, paymentAccepted
FoodEstablishmentCafé, ristorante (tipo base)servesCuisine, menu, hasMap
RestaurantRistoranteservesCuisine, menu, acceptsReservations
CafeOrCoffeeShopCaffetteriaservesCuisine
FastFoodRestaurantFast foodservesCuisine
MedicalOrganizationStruttura medica (base)medicalSpecialty
HospitalOspedaleavailableService, medicalSpecialty
MedicalClinicClinicamedicalSpecialty, availableService
DentistStudio dentisticoavailableService
LegalServiceStudio legale—
LawyerAvvocato—
AccountingServiceStudio contabile / audit—
FinancialServiceBanca, assicurazione, società di investimento—
RealEstateAgentAgenzia immobiliare—
AutomotiveBusinessConcessionario, officina auto (base)—
AutoDealerConcessionaria auto—
AutoRepairOfficina auto—
HotelHotelamenityFeature, checkinTime, checkoutTime
SportsActivityLocationStruttura sportiva (base)availableService
GymOrHealthClubPalestra / fitness club—
GovernmentOrganizationOrganizzazione governativa—
EducationalOrganizationIstituto di istruzione (base)—
CollegeOrUniversityUniversità / college—
SchoolScuola—
CorporationGrande 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.

json
{
  "@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.

json
{
  "@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"
}
I giorni della settimana in openingHoursSpecification vanno scritti in inglese con l'iniziale maiuscola: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. Gli orari usano il formato 24 ore HH:MM. Per l'apertura h24: opens "00:00", closes "23:59".

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.

TipoCaso d'usoNote
ProductSchema base per qualsiasi prodottoObbligatori name, image, description
OfferAnnuncio specifico: prezzo + disponibilitàObbligatori price, priceCurrency, availability
AggregateOfferRange di prezzi (più offerte)lowPrice, highPrice, offerCount
ProductGroupGruppo di prodotti con variantivariesBy, hasVariant
IndividualProductVariante specifica dentro un ProductGroupisVariantOf → ProductGroup
BrandBrand 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.

json
{
  "@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"
  }
}
Valori di availability: InStock, OutOfStock, PreOrder, Discontinued. Usa sempre il prefisso completo https://schema.org/ — le forme abbreviate (solo "InStock") non sono garantite essere riconosciute correttamente.

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.

json
{
  "@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.

json
{
  "@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"
      }
    }
  ]
}
Per un risultato avanzato Product Google richiede: name, image e un Offer annidato. Senza Offer (prezzo e disponibilità) lo snippet arricchito non verrà mostrato. In più: brand, sku o gtin13 aumentano le chance di comparire su Google Shopping.

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.

json
{
  "@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"
  }
}
ratingCount — numero totale di rating (inclusi quelli senza testo). reviewCount — numero di recensioni testuali. Se hai solo stelle senza testo — usa ratingCount. Se hai solo recensioni testuali — usa reviewCount. I due campi possono essere forniti insieme.

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.

json
{
  "@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."
      }
    }
  ]
}
Requisito critico di Google: le recensioni nel markup devono essere recensioni autentiche di utenti reali sul tuo sito. Vietato: mostrare solo recensioni a 5 stelle, nascondere le negative, pubblicare recensioni scritte dal team editoriale. Le violazioni comportano un'azione manuale e la perdita dei risultati avanzati.

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 schemaRequisiti immagineLarghezza min.
ProductAlmeno una foto del prodotto; preferibile sfondo bianco800 px consigliati
Article / NewsArticleAlmeno 3 immagini: 16:9, 4:3, 1:11200 px
RecipeObbligatoria la foto del piatto finitoQualsiasi; ottimale 1200×628
LocalBusinessFoto di ingresso, interni, facciataQualsiasi
Organization (logo)Rettangolare, sfondo bianco/trasparente112×112 min, rapporto fino a 1×10
Esempio di markup immagini Schema.org via JSON-LD:
json
{
  "@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"
  }
}
Per Article Google richiede almeno un'immagine larga 1200 px con rapporto 16:9, 4:3 o 1:1. Fornisci tutte e tre le varianti — Google sceglie quella giusta per ogni posizione. Le immagini devono essere scansionabili (non bloccate in robots.txt) e avere un URL stabile.

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.

html
<!-- 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>
Nota seller: { "@id": "https://example.com/#organization" } — un riferimento all'organizzazione definita prima tramite il suo @id. Si chiama graph linking: Google collega le entità in un grafo di conoscenza unificato senza duplicare i dati.

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.

Passo 1Rich Results Test

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.

Passo 2Schema Markup Validator

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.

Passo 3Google Search Console

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.

Verifica rapida: assicurati che il JSON-LD sia presente nella risposta HTML del server, non solo aggiunto via JavaScript. Apri DevTools → Network → trova la prima richiesta → Preview → cerca script type="application/ld+json". Se il blocco manca, Googlebot potrebbe non vedere il markup.

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?
No. Google dichiara ufficialmente che i dati strutturati non sono un segnale di ranking. Il markup aiuta Google a capire i contenuti ma non spinge meccanicamente le posizioni. L'effetto indiretto è reale: i risultati avanzati alzano la CTR, e una CTR più alta è un segnale di qualità. Quindi il markup corretto funziona — solo non come fattore diretto.
Si possono aggiungere dati strutturati via Google Tag Manager?
Tecnicamente sì — GTM può iniettare un tag <script> con JSON-LD. Ma Google preferisce il markup nella risposta HTML del server, non aggiunto via JavaScript. Il markup iniettato da GTM potrebbe non essere riconosciuto durante la scansione se Googlebot non esegue il JS per quella pagina. L'approccio ottimale è generare il JSON-LD lato server.
Quante recensioni includere nel markup Review?
Google non richiede un numero fisso. Nella pratica: se meno di 10 recensioni, includile tutte. Se sono centinaia — bastano 3–5 recenti. Conta di più la qualità: ogni Review richiede corpo del testo, autore e data. Troppe poche recensioni possono impedire a Google di mostrare le stelle nello snippet.
Perché i risultati avanzati non compaiono anche se il markup ha passato la validazione?
Diversi motivi: (1) Google non ha ancora riscansionato la pagina — attendi 1–4 settimane o richiedi la reindicizzazione; (2) reviewCount è troppo basso; (3) la pagina viola le policy di Google (ad es. le recensioni sembrano manipolate); (4) i risultati avanzati per quel tipo di schema competono con altre funzioni della SERP. Controlla Search Console → Miglioramenti.
Come indicare il prezzo per un negozio internazionale?
Usa un Offer separato per valuta, oppure più Offer dentro un AggregateOffer. Il campo priceCurrency usa codici ISO 4217: USD, EUR, GBP, JPY. Google mostra il prezzo del paese/lingua per cui la pagina è destinata. Assicurati che hreflang sia configurato correttamente, così ogni lingua vede il markup nella propria valuta.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it