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

> Pagina: https://ui.eneawork.it/blog/product-schema-ecommerce
> Markdown: https://ui.eneawork.it/blog/product-schema-ecommerce.md

*2026-11-01*

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.

Il catalogo EneUI conta 111.985 componenti, 1.556 blocchi e 12.808 icone da 1.472 librerie, letti da /api/stats il 1 novembre 2026. La funzione che serve /blocks/category/pricing restituisce 41 blocchi lo stesso giorno, e 17 blocchi portano la categoria ecommerce in data/blocks.json. La query «product schema» non compare fra le 1.352 query Autocomplete registrate il 31 ottobre 2026 in docs/keyword-data.json: il dataset non documenta quel volume.

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

## FAQ

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