Combinazioni PrestaShop e ChatGPT: quale prezzo legge l'AI
Su una scheda PrestaShop con combinazioni un crawler AI vede un prezzo solo, quello predefinito. L'ho misurato su un negozio reale: 9 combinazioni, 3 prezzi, 1 nell'HTML.
Su una scheda PrestaShop con combinazioni, un crawler AI che non esegue JavaScript vede un prezzo solo: quello della combinazione predefinita. Le altre varianti le vede come nomi in un menu a tendina, senza cifra accanto. L’ho misurato su un negozio di arredamento che seguo, su un letto matrimoniale con 9 combinazioni e tre prezzi diversi: nell’HTML che il server manda all’indirizzo della scheda c’è solo il più basso. Se un utente chiede a ChatGPT quanto costa la versione con contenitore, la risposta che ha a disposizione è sbagliata del 21%.
⚠️ Il caso che ha aperto la questione
Il 30 ottobre Hoa Cong di Seer Interactive ha pubblicato quello che ha registrato osservando ChatGPT mentre cerca sul web: le query che lancia, i risultati che riceve, le pagine che cita. Il campione è piccolo e lei lo dichiara (9 prompt, piano gratuito, modello mini), ma due casi sono istruttivi per chi vende online. Per una valigia la risposta indicava circa 72 dollari per la versione cabina, mentre la scheda prodotto collegata era quella del bagaglio da stiva, a 174,99: chi clicca trova un altro prodotto a un altro prezzo. E per due app di lingue i prezzi nella risposta non sono arrivati: in un caso erano caricati via JavaScript, nell’altro nell’HTML non c’erano proprio. Che sia stato il JavaScript a nasconderli, l’autrice lo indica come spiegazione probabile, non come prova.
Che i crawler delle AI scarichino il JavaScript senza eseguirlo non è una novità: l’ho già raccontato a proposito del limite dei 2 MB di Googlebot, con i dati di Vercel. La domanda che mi interessava era più stretta: su PrestaShop, dove le combinazioni sono la norma per arredamento, abbigliamento e ricambi, quale prezzo trova un bot che legge solo l’HTML?
🛠️ La misura su una scheda reale
Ho preso 30 schede a campione dalla sitemap di ciascuno di due negozi PrestaShop che seguo. Sul primo, un catalogo di attrezzatura, nessuna aveva combinazioni. Sul secondo, un arredamento online, 3 su 30. Ho tenuto quella con più varianti: un letto matrimoniale 160x200 con 3 colori e 3 tipologie di rete, quindi 9 combinazioni.
Il primo passo è stato aprire ogni combinazione e annotare il prezzo. Il secondo, scaricare con curl l’indirizzo canonico della scheda, quello senza combinazione, e cercare cosa ci fosse dentro.
| Cosa c’è nella scheda | Nell’HTML della pagina canonica | Lo legge un crawler AI |
|---|---|---|
| Nome, descrizione, immagini | Sì | Sì |
| Nomi delle opzioni (Con rete, Contenitore, Contenitore doppia alzata, 3 colori) | Sì, come voci di menu e pulsanti | Sì, ma senza prezzo accanto |
| Prezzo della combinazione predefinita, 446,64 € | Sì, nel testo, nel microdata Offer e nel meta product:price:amount | Sì |
| Prezzo con contenitore, 565,54 € | No | No |
| Prezzo con contenitore doppia alzata, 666,67 € | No | No |
| Link alle altre combinazioni | No, la pagina linka solo la predefinita | No |
| Dati strutturati JSON-LD di tipo Product | Assenti, il tema usa il microdata | Solo il microdata con un’offerta |
Le 9 combinazioni hanno tre prezzi: 446,64 € per le tre con rete, 565,54 € per le tre con contenitore, 666,67 € per le tre con contenitore doppia alzata. Nell’HTML canonico la cifra 565,54 e la cifra 666,67 non compaiono da nessuna parte.
Ho ripetuto lo scaricamento presentandomi come OAI-SearchBot, ChatGPT-User e ClaudeBot: stessa pagina, stessa dimensione, stesso prezzo. Il negozio non tratta i bot in modo diverso dalle persone, quindi il problema non è un blocco: è quello che la pagina contiene prima che qualcuno la tocchi.
I comandi per rifarlo sul tuo shop
Non serve niente di installato oltre a curl e grep. Prendi l’indirizzo di una scheda con combinazioni, quello che trovi nella sitemap o nel tag canonical:
URL="https://www.tuoshop.it/categoria/123-nome-prodotto.html"
# prezzi presenti nell'HTML del server
curl -s -A "Mozilla/5.0 (compatible; OAI-SearchBot/1.3)" "$URL" \
| grep -o 'itemprop="price"[^>]*content="[^"]*"\|product:price:amount"[^>]*'
# combinazione che il server ha messo nella pagina (tema classic)
curl -s "$URL" | grep -o 'id_product_attribute":[0-9]*' | head -1
Se il terminale non fa per te, c’è il controllo equivalente dal browser: apri la scheda, tasto destro, “Visualizza sorgente pagina”, e cerca con Ctrl+F (Cmd+F su Mac) le cifre dei prezzi. La sorgente è l’HTML che manda il server, cioè quello che legge un crawler AI. Poi torna sulla scheda, cambia le opzioni una alla volta e segna i prezzi. Se il browser mostra cifre che il primo comando non ha trovato, quelle cifre per un crawler AI non esistono.
⚠️ Perché PrestaShop si comporta così
Non è un difetto di quel negozio: è il funzionamento del tema classic di PrestaShop 1.7 e 8, e di quello che ho misurato. I temi su misura e alcuni moduli possono cambiare le cose, quindi il controllo va rifatto sul tuo. PrestaShop costruisce la scheda sul server con la combinazione predefinita, quella che hai segnato come default nel back office. Quando il cliente cambia un’opzione, il tema chiede al server i dati della nuova combinazione e aggiorna prezzo, disponibilità e riferimento nella pagina. Su quel negozio il tema aggiorna anche l’indirizzo, che diventa qualcosa come /44079-25020-letto-...html#/..., e quell’indirizzo, aperto direttamente, il server lo restituisce con il prezzo giusto.
Il punto è che nessuno ci arriva senza JavaScript. La pagina canonica non contiene link a quegli indirizzi, e anche quando un indirizzo di combinazione viene aperto, il suo tag canonical rimanda alla scheda base. Per Google è la scelta corretta, perché altrimenti si troverebbe nove pagine quasi uguali da indicizzare, ma il risultato è che la versione “ufficiale” della scheda racconta una variante su nove.
Un crawler AI non clicca sul menu delle opzioni. Legge la scheda come la vede chi non ha ancora scelto niente, e la presenta come la scheda del prodotto.
⚠️ Cosa può sbagliare un’AI con quella pagina
Mettiti nei panni del modello davanti alla domanda “quanto costa il letto con contenitore?”. Ha una pagina che nomina l’opzione “Contenitore” e un solo prezzo, 446,64 €. La risposta più naturale è quella cifra, che sottostima il prezzo reale del 21% (565,54 €). Per la doppia alzata lo scarto sale al 33%: 220 euro di differenza fra quello che l’utente si aspetta e quello che trova nel carrello.
Non ho testato la risposta di ChatGPT su quel prodotto: le risposte cambiano da un giorno all’altro e un test singolo non dimostrerebbe niente. Quello che ho misurato è l’informazione disponibile, ed è l’informazione che Seer ha visto usare male in un caso identico. Per un negozio il danno non è la citazione mancata: è il cliente che arriva convinto di un prezzo e trova un’altra cifra, cioè il carrello abbandonato con un motivo in più.
Vale anche al contrario. Se la predefinita è la combinazione più cara, l’AI dirà che il prodotto costa più di quanto parte, e chi confronta più negozi in una sola risposta ti scarta prima ancora di visitarti.
✅ Come far leggere tutti i prezzi a chi non esegue JavaScript
La regola è una: quello che vuoi che un’AI sappia deve stare nell’HTML che il server manda all’indirizzo canonico. Le strade, in ordine di costo:
- Una riga “da X a Y €” vicino al prezzo. Se le combinazioni hanno prezzi diversi, scrivere sotto il prezzo principale l’intervallo completo, generato dal template con il prezzo minimo e massimo delle combinazioni, toglie l’ambiguità più grave. È una modifica al template dei prezzi del tema, non un modulo.
- Una tabella delle varianti nella scheda. Opzione per opzione, con il prezzo accanto, nella descrizione o in una scheda dedicata, costruita lato server. Risolve davvero la domanda “quanto costa la versione X”, perché mette la risposta nella forma in cui un modello la può citare. Per una scheda con 9 combinazioni sono 9 righe; per una con 300 conviene raggruppare per l’opzione che sposta il prezzo, come la tipologia di rete in questo caso.
- I dati strutturati delle varianti. Google documenta un formato apposta,
ProductGroupconhasVariant, che descrive ogni variante con il suo prezzo. Serve a Google per i risultati con prodotti; non lo metto tra le leve per le risposte AI, perché i dati strutturati non sono un fattore dichiarato da nessun sistema generativo e nel mio test sul markup non hanno spostato niente. Vale la pena se lo fai per Google, non come scorciatoia per ChatGPT. - Il feed per Merchant Center con tutte le varianti. Ogni combinazione come prodotto a sé, con il proprio prezzo e lo stesso
item_group_id. È il canale con cui Google riceve i prezzi giusti a prescindere dalla pagina, e l’ho descritto nel pezzo sul feed Merchant multi-paese.
Poi c’è una scelta che non costa niente: decidere con criterio qual è la combinazione predefinita. Se è quella che vendi di più, l’errore dell’AI colpisce meno persone. Se è la più economica, accompagnala sempre con l’intervallo di prezzo, altrimenti il prezzo d’ingresso diventa il prezzo e basta.
⚠️ Le pagine delle combinazioni non vanno aperte all’indice
La tentazione, letto il problema, è togliere il canonical dalle combinazioni o linkarle tutte dalla scheda, così che ogni variante abbia la sua pagina leggibile. Su un catalogo vero vuol dire moltiplicare le pagine quasi identiche per il numero di combinazioni, con il crawl di Googlebot che si disperde su copie della stessa scheda: lo stesso spreco che si vede nei log di un PrestaShop quando le faccette non sono governate. La scheda canonica resta una, e dentro ci va scritto quello che oggi sta solo dietro il menu.
✅ Prima di toccare il template
Fai la misura su tre schede: quella con più combinazioni, quella che vendi di più, quella con la differenza di prezzo più ampia fra le varianti. Se l’HTML canonico contiene già tutti i prezzi, il tuo tema li scrive e non c’è niente da fare. Se ne contiene uno, sai quanto vale il problema guardando lo scarto fra quel prezzo e gli altri. Il ragionamento è lo stesso del pezzo su cosa cita l’AI degli e-commerce PrestaShop: prima di ottimizzare per le risposte generative, controllare che la pagina dica il vero a chi la legge senza cliccare. Se vuoi che la misura la faccia io su tutto il catalogo, scrivimi.
❓ Domande frequenti
ChatGPT legge il prezzo delle combinazioni di PrestaShop?
Come verifico quale prezzo vede un crawler AI sulla mia scheda?
Devo rendere indicizzabile ogni combinazione per farla leggere alle AI?
I dati strutturati ProductGroup risolvono il problema con ChatGPT?
Quale combinazione conviene impostare come predefinita?
Hai un progetto in testa?
Raccontami cosa ti serve o cosa non funziona. Rispondo entro 24 ore, senza preventivi a scatola chiusa.