SEO
Product schema per l'e-commerce, con il prezzo giusto
Product schema è un blocco JSON-LD che dichiara nome, immagine, prezzo e disponibilità di una pagina prodotto. Va nella pagina, e il prezzo deve coincidere.
In sintesi
- Product schema descrive una pagina di prodotto con @type Product: nome, immagine e un'offerta con prezzo e valuta.
- Google separa Product snippets, per le pagine senza acquisto, e Merchant listings, per quelle dove si compra.
- Un prezzo nel markup diverso dal prezzo visibile è una discrepanza semantica che nessun validatore segnala.
Product schema è un blocco JSON-LD con @type Product che dichiara nome, immagine, prezzo e disponibilità di una pagina di prodotto. Si scrive dentro la pagina, non nel feed, e deve ripetere ciò che l'utente vede.
Due tipi, non uno
Google documenta due insiemi di requisiti. Product snippets copre le pagine dove non si compra, per esempio una recensione, e chiede name, image e almeno uno fra offers, review e aggregateRating. Merchant listings copre le pagine dove si compra e aggiunge i dettagli di vendita: spedizione e politica di reso. Fonte: pagina Product structured data di Google Search Central, letta il 1 novembre 2026.
Il blocco minimo
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Camicia in lino",
"image": ["https://example.com/img/camicia-lino.jpg"],
"sku": "CAM-LIN-01",
"brand": { "@type": "Brand", "name": "Example" },
"offers": {
"@type": "Offer",
"url": "https://example.com/prodotti/camicia-lino",
"price": "79.00",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
}
}
I campi che decidono il risultato: name uguale al titolo visibile, image con URL assoluto, offers.price come stringa senza simbolo di valuta, offers.priceCurrency in ISO 4217 e offers.availability come URL schema.org, per esempio https://schema.org/InStock. sku, gtin13, mpn e brand identificano il prodotto quando esiste un catalogo; senza identificatori Google confronta solo testo e prezzo.
Il prezzo deve coincidere
Un prezzo nel markup diverso dal prezzo in pagina è una discrepanza, non un errore di sintassi: nessun validatore la vede, e Google può applicare un'azione manuale. Il caso tipico è la pagina variante, dove il selettore taglia cambia il prezzo via JavaScript e il JSON-LD resta sul valore base. Se le varianti sono reali, il markup corretto è ProductGroup con hasVariant, non dieci Product scollegati.
La verifica prima del deploy
cat > check-product.mjs s.slice(s.indexOf(">") + 1, s.indexOf("")));
const blocks = raw.map((s) => JSON.parse(s)).filter((j) => j["@type"] === "Product");
for (const p of blocks) {
const o = p.offers || {};
console.log(p.name, o.price, o.priceCurrency, o.availability);
}
console.log(`${blocks.length} Product blocks`);
EOF
curl -s https://ui.eneawork.it/blocks/creativetimofficial-ui/product-details-01 > page.html
node check-product.mjs page.html
Lo script separa ogni blocco JSON-LD, tiene i Product e stampa nome, prezzo, valuta e disponibilità. Sul blocco product-details-01 stampa 0 Product blocks: un blocco di layout contiene il posto del prezzo, non il prezzo. Il dato va aggiunto dal tuo strato dati, e lo script dice subito se manca.
Il catalogo EneUI
Per una pagina prodotto i record da guardare sono product-detail-01 di commercn, la product card di Ravikatiyar e il checkout interattivo di Kokonut UI, licenza MIT. La categoria pricing raccoglie 41 blocchi per la parte commerciale. Nessuno di questi record dichiara un prezzo: sono struttura, e il markup Product va scritto sopra leggendo i dati veri. Verificato il 1 novembre 2026.
La limitazione
Product schema non crea un merchant listing completo. Per la scheda ricca con spedizione, resi e venditori Google usa anche il feed di Merchant Center, e senza identificatori il risultato resta più povero. Su un catalogo con varianti il markup di una pagina che ne copre dieci richiede ProductGroup: un Product per variante, tutti collegati, altrimenti la pagina dichiara un prodotto che non esiste.
Dove continuare
Il formato generale del markup è in schema FAQPage passo per passo; i blocchi per un negozio sono in blocchi per e-commerce; la sequenza per aprire il negozio è in creare un sito e-commerce.
Domande frequenti
Product schema è obbligatorio?
No. È un'aggiunta volontaria che aiuta Google a capire la pagina e può produrre un rich result. Senza markup la pagina resta valida, ma perde i dettagli di prezzo e disponibilità nel risultato.
Dove va messo il prezzo?
In offers.price, come stringa senza simbolo, con offers.priceCurrency in ISO 4217. Il valore deve coincidere con il prezzo visibile e con quello del checkout.
Serve un feed Merchant Center?
Per i Product snippets no: basta il JSON-LD nella pagina. Per i merchant listings completi, con spedizione e resi, Google legge anche il feed, e i due dati devono concordare.
Posso marcare più prodotti nella stessa pagina?
Sì. Un blocco per prodotto, oppure un ItemList che li elenca, purché ogni Product abbia il proprio URL e il proprio prezzo. Non duplicare lo stesso prodotto con dati diversi.
Cosa faccio se il prezzo cambia spesso?
Aggiorna il markup nella stessa richiesta che aggiorna il prezzo visibile, e aggiorna updatedAt della pagina. Un prezzo vecchio nel JSON-LD è la causa più comune di azione manuale su un negozio.