Google Merchant Center analizza il markup Schema.org/Product presente nelle pagine HTML del tuo store per verificare che i dati inviati nel feed corrispondano a ciò che l’utente vede effettivamente. Quando questa corrispondenza manca - perché il JSON-LD è incompleto, assente o dichiara valori difformi dal contenuto visibile - GMC emette una disapprovazione per “structured data policy”. Sui negozi Shopify questo problema è più comune di quanto si pensi: temi non aggiornati, app SEO che iniettano markup ridondante e configurazioni Shopify Markets mal gestite sono le cause più frequenti. Questa guida descrive come identificare il campo incriminato, correggerlo e ripristinare la visibilità dei prodotti nelle Shopping Ads.
Cosa intende Google con “structured-data-policy”
Le linee guida di Google Search Central sui dati strutturati per prodotti stabiliscono che il markup Schema.org/Product deve soddisfare quattro requisiti simultanei.
Riflettere fedelmente i contenuti visibili dalla pagina. Ogni campo del JSON-LD o del microdata deve corrispondere ai valori che un utente può leggere senza compiere ulteriori click: nessun valore nascosto ai visitatori ma visibile ai crawler.
Non contenere segnali artificialmente positivi. Dichiarare "availability": "https://schema.org/InStock" su un prodotto esaurito, un campo shippingDetails con costo zero quando la spedizione è a pagamento, o un prezzo scontato nel markup che non appare nella pagina costituiscono violazioni esplicite della policy.
Includere i campi obbligatori. Per schema.org/Product con Offer, GMC richiede come minimo: name, image, description, almeno uno tra sku e gtin, offers.price, offers.priceCurrency, offers.availability.
Essere accessibili ad AdsBot al momento della scansione. Il markup iniettato esclusivamente via JavaScript client-side - non presente nell’HTML sorgente restituito dal server - può non essere rilevato da AdsBot durante la scansione iniziale e viene trattato come markup assente.
La violazione più frequentemente sanzionata è la contraddizione tra il valore dichiarato nel markup e il valore visibile nella pagina: un prezzo nel JSON-LD diverso da quello mostrato all’utente viene classificato come potenzialmente fuorviante e può evolvere in una disapprovazione per price-discrepancy.
Perché si attiva la disapprovazione su Shopify
Shopify genera automaticamente un blocco JSON-LD schema.org/Product nella maggior parte dei temi Liquid, ma esistono cinque punti di rottura tipici nei negozi italiani e internazionali.
Tema con prezzo nella valuta base invece della valuta locale. I temi che non gestiscono correttamente Shopify Markets o Shopify Payments con valute multiple possono esporre "priceCurrency": "USD" e il prezzo in dollari nel JSON-LD mentre la pagina mostra il prezzo in euro per i clienti italiani. AdsBot legge la valuta effettivamente renderizzata: la discrepanza genera una violazione immediata.
App SEO o di recensioni con secondo blocco JSON-LD. Applicazioni come JSON-LD for SEO, Smart SEO, SEO Booster, Judge.me o Yotpo possono aggiungere un secondo script <script type="application/ld+json"> con tipo Product. Se questo blocco contiene un campo offers con valori difformi da quelli del tema - prezzi in un’altra valuta, disponibilità hardcodata, priceCurrency mancante - Google legge entrambi i blocchi e segnala la contraddizione.
Disponibilità hardcodata nel JSON-LD del tema. Alcuni temi meno recenti o personalizzati contengono un valore statico per la disponibilità - tipicamente "InStock" - invece di usare la variabile Liquid product.available. Quando un prodotto si esaurisce su Shopify, la pagina mostra correttamente il pulsante disabilitato, ma il JSON-LD dichiara ancora InStock: questa è una violazione di inaccurate-availability che si cumula con la structured data policy.
Spedizione gratuita dichiarata in modo non corretto. Se il JSON-LD include un blocco shippingDetails con "value": "0" ma la spedizione gratuita su Shopify è configurata solo sopra una soglia minima d’ordine (Impostazioni → Spedizione e consegna), i prodotti al di sotto di tale soglia presentano una discrepanza tra il markup e il checkout reale.
Markup non visibile ad AdsBot nei negozi headless. I negozi che usano Hydrogen o un frontend custom con rendering client-side devono generare il JSON-LD lato server, nell’HTML della risposta HTTP. Se il blocco schema.org/Product è iniettato solo dopo l’idratazione React, AdsBot può non trovarlo e classificare la pagina come priva di markup valido.
Come rilevare il problema nel tuo store
Segui questi controlli nell’ordine indicato per localizzare esattamente il campo problematico.
Controllo 1 - Rich Results Test su un URL disapprovato
- Apri search.google.com/test/rich-results.
- Incolla l’URL di un prodotto disapprovato e avvia il test.
- Nella sezione “Prodotto” verifica:
price,priceCurrency,availability,nameeimagesono presenti con valori validi? - Se appare “Nessun risultato avanzato rilevato” per il tipo Prodotto, il JSON-LD è assente o malformato.
Controllo 2 - Confronto sorgente HTML vs. pagina visibile
Apri la pagina prodotto in un browser, premi Ctrl+U (Visualizza sorgente) e cerca "@type": "Product". Confronta manualmente:
pricenel JSON-LD vs. prezzo visualizzato nella pagina (inclusa IVA se applicabile)availabilityvs. stato del pulsante Aggiungi al carrello- Numero di blocchi
<script type="application/ld+json">con tipoProduct- più di uno è quasi sempre un problema
Controllo 3 - GMC Diagnostica
In Google Merchant Center: Prodotti → Diagnostica → Problemi a livello di prodotto, filtra per “dati strutturati”. Il pannello mostra le URL specifiche, il tipo di errore e il campo incriminato.
Controllo 4 - Google Search Console
Vai su Search Console → Esperienza → Miglioramenti → Prodotti. Se lo stesso errore compare anche qui, la scansione organica lo rileva indipendentemente da GMC - doppia priorità di risoluzione.
Correzione passo dopo passo
-
Apri il codice del tema attivo in Shopify Admin: Negozio online → Temi → [tema attivo] → Modifica codice.
-
Individua il blocco JSON-LD del prodotto. Cerca
"@type": "Product"inproduct.liquid,product.jsonotheme.liquid. Se è assente, il tema non genera markup strutturato e dovrai aggiungerlo. -
Sostituisci i valori statici con variabili Liquid dinamiche. Un blocco minimo conforme alla policy GMC per un negozio Shopify monolingua / monovaluta è il seguente:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": {{ product.title | json }},
"image": {{ product.featured_image | img_url: 'master' | prepend: 'https:' | json }},
"description": {{ product.description | strip_html | truncate: 5000 | json }},
"sku": {{ product.selected_or_first_available_variant.sku | json }},
"offers": {
"@type": "Offer",
"url": {{ shop.url | append: product.url | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"price": "{{ product.selected_or_first_available_variant.price | divided_by: 100.0 }}",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
}
}
</script>
Domande frequenti
Domande frequenti
- Cosa significa esattamente 'structured data policy' in una notifica GMC?
- Google disapprova un prodotto per structured data policy quando il markup Schema.org/Product è assente, contiene campi obbligatori mancanti oppure riporta valori che contraddicono i dati visibili nella pagina (prezzo, disponibilità, spedizione). La policy è definita nelle linee guida di Google Search Central: ogni campo del blocco JSON-LD o microdata deve corrispondere esattamente a ciò che l'utente vede senza click aggiuntivi. Non si tratta di una sospensione dell'account - è una disapprovazione a livello di prodotto, risolvibile correggendo il markup nelle pagine interessate.
- Il problema riguarda solo alcuni prodotti o può colpire l'intero catalogo?
- Nella maggior parte dei casi la violazione è a livello di prodotto: solo gli URL con markup errato vengono disapprovati. Se però il problema si trova nel template del tema - ad esempio un prezzo hardcodato nel JSON-LD base - la disapprovazione può estendersi all'intero catalogo contemporaneamente. In rari casi, quando i segnali artificiali (disponibilità o spedizione gratuita dichiarate falsamente) sono sistematici e reiterati, GMC può escalare la violazione a livello di account.
- Come identifico quale campo JSON-LD è sbagliato?
- Il metodo più rapido è il Rich Results Test (search.google.com/test/rich-results): incolla l'URL del prodotto disapprovato e controlla la sezione "Prodotto". Lo strumento mostra i campi mancanti o non validi con messaggi di errore specifici. In alternativa, apri il sorgente HTML della pagina (Ctrl+U) e cerca "@type: Product" per confrontare manualmente i valori del markup con quelli visibili. Google Search Console → Miglioramenti → Prodotti fornisce un riepilogo aggregato degli errori rilevati durante la scansione organica.
- Shopify genera automaticamente i dati strutturati - devo modificare il codice?
- Sì, nella maggior parte dei casi. Shopify include un blocco JSON-LD di base, ma temi personalizzati o di terze parti possono avere markup incompleto, hardcodato o non aggiornato per Shopify Markets. Alcune app SEO aggiungono un secondo blocco JSON-LD che può contraddire quello del tema. La modifica al codice - di solito in product.liquid o theme.liquid - è quasi sempre necessaria per correggere la violazione in modo permanente. Non è richiesta competenza avanzata: la correzione tipica consiste nel sostituire valori statici con variabili Liquid dinamiche.
- Quanto tempo ci vuole per vedere la risoluzione dopo la correzione?
- Dopo la correzione e la richiesta di revisione in GMC, i tempi tipici variano da 1 a 5 giorni lavorativi. Inviare un feed incrementale tramite Merchant API v1 dopo la correzione può accelerare il processo: GMC ri-valuta i prodotti aggiornati con priorità rispetto alla coda di scansione ordinaria. Se il problema coinvolge molti prodotti, alcune disapprovazioni possono restare in coda più a lungo.
- Posso usare microdata invece di JSON-LD su Shopify?
- Sì, Google accetta sia JSON-LD che microdata per Schema.org/Product. Tuttavia JSON-LD è il formato raccomandato perché è separato dal markup HTML visibile e più semplice da mantenere. La maggior parte dei temi Shopify moderni usa JSON-LD. Se il tuo tema usa microdata (attributi itemscope e itemtype), i criteri di conformità sono identici: i valori devono corrispondere esattamente a quelli visibili nella pagina.
Fonti e riferimenti
Fonti ufficiali citate
- Google Search Central: dati strutturati per prodotti (schema.org/Product) https://developers.google.com/search/docs/appearance/structured-data/product
- Google Rich Results Test https://search.google.com/test/rich-results
- Schema.org: definizione del tipo Product https://schema.org/Product
Checklist di ricorso
I passaggi di questa pagina, nella sua casella.