Segnalazioni in sospeso, bug confermati, stato delle correzioni e voci risolte

Problemi noti dei moduli PrestaShop mypresta.rocks

Controlla segnalazioni in sospeso, bug confermati, note di compatibilità, stato delle correzioni e problemi risolti prima di aggiornare un modulo o aprire un ticket di supporto.

Sfoglia problemi

Le segnalazioni restano visibili durante la revisione

Una voce pubblica di solito inizia con un ticket di supporto, un test di compatibilità o una segnalazione cliente. Le nuove segnalazioni pubbliche compaiono prima come in sospeso; dopo la revisione confermiamo il comportamento, aggiorniamo il modulo interessato quando serve una correzione e modifichiamo lo stato.

Le voci aperte mostrano cosa controllare prima dell'aggiornamento

Usa questa pagina prima di installare un aggiornamento, testare un modulo su una nuova versione di PrestaShop o decidere se serve un ticket di supporto. I problemi aperti spiegano cosa è ancora in verifica o correzione, mentre ricerca e filtri per stato aiutano a restringere rapidamente l'elenco.

I problemi risolti restano visibili

Le voci corrette non vengono nascoste dopo il rilascio. Mantenerle visibili rende più facile capire la cronologia del modulo: puoi vedere cosa è stato segnalato, quale modulo era interessato e quando il problema è stato gestito.

382 problemi tracciatiVoci pubbliche del tracker0 in attesa di revisioneInviati e in attesa di triage1 attualmente apertiAncora in verifica o correzione378 risoltoCorretto e mantenuto visibile99% tasso di correzioneVoci pubbliche risolte2026-08-08 ultimo aggiornamentoUltima modifica del tracker

Cosa sta succedendo ora

Uno sguardo rapido a segnalazioni in sospeso, problemi aperti e correzioni recenti. Usa il tracker completo sotto per cercare per modulo, filtrare per stato o ordinare l'intero elenco.

Tutti i problemi tracciati

Cerca per modulo o dettagli del problema, filtra per stato e ordina per data di aggiornamento o numero di segnalazioni.

Nessun problema noto corrispondente.

L'installazione della 1.0.0 creava tre variabili intitolate al catalogo di mypresta.rocks: un conteggio di moduli, di servizi e di pacchetti. Un negozio che vende altro apriva la schermata Content Variables e trovava tre voci senza condizioni e senza significato per il proprio catalogo.

Il suggerimento nella schermata Content Variables indicava di scrivere un segnaposto per un conteggio di moduli. Dopo la correzione delle variabili predefinite quella chiave non esiste più in un negozio nuovo, quindi l'esempio non puntava a nulla e il primo tentativo restituiva un risultato vuoto.

Rimuovere un prodotto dalla wishlist via AJAX aggiorna la lista, ma il badge dell'icona wishlist nell'header continua a mostrare il vecchio conteggio fino al ricaricamento della pagina.

Su Safari iOS il menu a tendina si apre e si chiude immediatamente perché la propagazione dell'evento touchstart viene gestita in modo diverso, attivando il gestore del clic esterno.

Sia obtp.js di Outbrain sia il tag manager di Matomo modificano la proprietà document.referrer, facendo sì che lo script caricato per ultimo legga un valore di referrer errato.

Quando il servizio VIES dell'UE è lento o non disponibile, la richiesta di validazione della partita IVA si blocca per 30 secondi prima del timeout, congelando lo step di checkout.

I negozi dietro Cloudflare bannano gli indirizzi IP dei proxy di Cloudflare invece del reale IP del visitatore, bloccando potenzialmente migliaia di visitatori legittimi che passano dallo stesso edge server.

Il generatore della sitemap gira come processo singolo e raggiunge i limiti di memoria PHP sui cataloghi grandi con molte combinazioni e immagini.

I clienti business che acquistano come ospiti non vedono l'opzione di pagamento differito anche quando la loro partita IVA soddisfa i criteri B2B, perché il modulo verifica l'appartenenza a un gruppo clienti, che richiede un account.

Le estensioni del browser come uBlock Origin bloccano il pattern URL standard dello script di tracciamento Matomo (/matomo.js), impedendo la raccolta dei dati analitici per i visitatori che li usano.

Quando il cliente torna alla pagina di conferma prima che il webhook Stripe venga attivato, l'ordine viene convalidato due volte. La seconda convalida (webhook) genera un'eccezione perché la transizione di stato dell'ordine non è valida.

I prodotti con descrizioni lunghe ricevono un numero eccessivo di link iniettati (a volte 15+), che i motori di ricerca possono interpretare come link spam.

Con 3 o più prodotti selezionati, la tabella di confronto supera il viewport su mobile senza alcun indicatore di scorrimento orizzontale, nascondendo i prodotti più a destra.

Lo snippet JavaScript di Olark usa costrutti simili a eval che vengono bloccati dagli header CSP, impedendo il caricamento del widget di chat.

Lo script di tracciamento viene caricato sulle pagine del back office tramite displayBackOfficeHeader, registrando l'attività degli admin insieme alle sessioni dei clienti. Questo espone dati admin sensibili nelle registrazioni di Clarity.

Le categorie vuote (usate come landing page informative) non renderizzano il secondo blocco descrizione perché il template controlla il numero di prodotti prima di mostrare qualsiasi contenuto della categoria.

Il prezzo dell'Offer JSON-LD usa il prezzo di listino base invece del prezzo dopo le regole di prezzo specifiche, le regole fiscali o gli sconti di gruppo.

Sia l'Insight Tag lato browser sia la Conversions API lato server inviano lo stesso evento di conversione senza una chiave di deduplicazione, portando LinkedIn Campaign Manager a conteggiare due volte le conversioni.

Il pulsante torna-su è visibile anche sulle pagine più corte dell'altezza del viewport, dove lo scorrimento non è possibile. Questo aggiunge inutile disordine visivo.

Il token di accesso alla pagina a lunga durata scade dopo 60 giorni senza alcun avviso nella dashboard del modulo. Il feed smette di aggiornarsi e mostra contenuti obsoleti.

La funzione di registrazione di Smartsupp cattura i tasti digitati nei campi dei moduli di pagamento, potenzialmente registrando dati sensibili della carta nei replay di sessione.

L'e-mail reinviata rigenera il riepilogo dell'ordine con i prezzi attuali del catalogo, che possono differire dai prezzi al momento dell'ordine se i prezzi sono stati modificati.

I codici di backup 2FA vengono mostrati solo al momento della configurazione. Se l'admin li perde insieme al proprio dispositivo di autenticazione, resta bloccato in modo permanente.

La funzione di replay delle sessioni cattura i campi di inserimento password nel checkout, mostrando caratteri mascherati che potrebbero potenzialmente essere correlati alle battiture.

Dopo che un visitatore invia sul sito un qualsiasi modulo contenente la sua e-mail, HubSpot associa retroattivamente tutta la sua precedente cronologia di navigazione anonima all'indirizzo e-mail, il che può violare il GDPR.

Le fatture in valute che usano la virgola come separatore decimale (EUR in alcune impostazioni locali) vengono esportate con i punti, causando errori di import nei software di contabilità locali.

Il modulo applica il lazy loading a tutte le immagini, inclusa la prima immagine prodotto che appare nel viewport al caricamento della pagina, causando uno spostamento visibile del layout.

Il data layer passa i prezzi dei prodotti come '€29.99' (con simbolo di valuta) invece di '29.99' (solo valore numerico). Il sistema di AdRoll non riesce a interpretare il valore e scarta i dati di fatturato.

Il carosello a scorrimento automatico continua a muovere i loghi anche quando l'utente ci passa sopra con il mouse per leggere il nome di un cliente o cliccare un link, rendendo l'interazione frustrante.

Le animazioni CSS transform su più elementi attivano la promozione a layer del compositore, esaurendo la memoria GPU sui dispositivi mobili di fascia bassa e causando visibili perdite di frame.

L'evento di conversione invia il totale dell'ordine nella valuta predefinita del negozio invece che nella valuta scelta dal cliente, causando discrepanze nei ricavi nei report di Bing Ads.

Android 13 richiede che le app dichiarino con quali altre app possono interagire. Il link intent viber:// fallisce silenziosamente sulle versioni più recenti di Android.

I prodotti senza recensioni generano comunque un blocco schema.org AggregateRating con ratingCount=0. Google Search Console lo segnala come errore nei dati strutturati.

Se un prodotto si chiama 'Blue Running Shoes' nella categoria 'Running Shoes', il pattern {product} - {category} produce 'Blue Running Shoes - Running Shoes', che i motori di ricerca segnalano come keyword stuffing.

Gli importi degli ordini con virgola decimale (formato europeo, ad es. 99,99) rompono il parametro dell'URL di postback S2S, portando Taboola a rifiutare la conversione.

L'evento fbq('track', 'Purchase') invia sempre la valuta predefinita del negozio (EUR), anche quando il cliente ha pagato in GBP, causando discrepanze di fatturato in Facebook Ads Manager.

Se la visibilità della bacheca Pinterest è impostata su 'Secret', il widget di embed mostra uno stato vuoto anche se la bacheca contiene dei pin. Non viene visualizzato alcun errore.

La richiesta di account rivenditore accetta qualsiasi testo nel campo della partita IVA, senza validarne il formato rispetto al pattern IVA del paese selezionato.

Gli eventi GA4 add_shipping_info e add_payment_info si basano su un MutationObserver che osserva la classe CSS .-current sugli elementi degli step del checkout nativo di PrestaShop. I moduli di checkout one-page, i temi di checkout personalizzati o i moduli che usano indicatori di step diversi non attiveranno questi due eventi specifici.

Tutti gli altri eventi di tracciamento (begin_checkout, purchase, visualizzazioni di pagina, aggiunta al carrello) funzionano indipendentemente dal modulo di checkout in uso — sono interessati solo gli eventi degli step intermedi del checkout.

PrestaShop 1.6 non dispone dell'hook displayAfterBodyOpeningTag, quindi i fallback noscript per GTM, Meta Pixel e Pinterest Tag non vengono iniettati. Questo riguarda solo gli utenti con JavaScript completamente disabilitato, cosa estremamente rara.

Impatto: Minimo. I visitatori senza JavaScript non vengono tracciati da nessun pixel, a prescindere dai tag noscript. I fallback noscript servono principalmente come segnali di verifica per le piattaforme.

Quando il reinvio degli acquisti persi si attiva via cron, genera uno pseudo client ID (cifre casuali + timestamp) perché il cookie _ga del browser originale non è disponibile. Gli acquisti reinviati appaiono quindi come sessioni/utenti separati nei report GA4.

Soluzione alternativa: Abilitare il tracciamento User-ID nella configurazione della piattaforma GA4. Se il cliente era loggato al momento dell'acquisto, lo User-ID collegherà l'evento lato server al suo profilo utente esistente.

La specifica OneTag di Criteo limita gli eventi viewList a un massimo di 3 ID prodotto. Le pagine di categoria con più prodotti inviano solo i primi 3 ID. È una limitazione della piattaforma Criteo, non un bug del modulo.

L'API del pixel di Quora non accetta parametri di ricavo nella chiamata standard track('Purchase'). L'evento di acquisto viene attivato correttamente ma senza il valore della transazione. È una limitazione dell'API di tracciamento di Quora.

Un task cron che fallisce (es. timeout, errore di memoria) viene ritentato immediatamente al successivo intervallo del cron, causando potenzialmente migliaia di esecuzioni fallite all'ora.

I cambi di stato tramite l'API WebService attivano sia l'hook API sia l'hook admin, facendo eseguire due volte le azioni automatizzate (e-mail, aggiornamenti di magazzino).

Il codice inserito nell'editor del blocco HTML viene sanificato al salvataggio, rimuovendo tutti i tag . Questo impedisce casi d'uso legittimi come l'inserimento di widget di terze parti.

I negozi configurati con URL relativi al protocollo (//) invece di https:// generano percorsi immagine non funzionanti per le icone dei badge di fiducia.

Quando il rinvio del JS è attivo, i gestori onclick inline nei template dei moduli di terze parti scattano prima che vengano caricati gli script da cui dipendono, causando errori 'function not defined'.

Il widget di notifica delle vendite in tempo reale mostra gli ordini creati tramite il back office a scopo di test. Questi ordini di prova non dovrebbero apparire ai clienti.

L'evento purchase si attiva sulla pagina di conferma dell'ordine e di nuovo quando il callback dell'email di stato ordine genera un'impressione di pagina. I clienti che aprono l'email dell'ordine generano un evento purchase duplicato.

Nei listing di categoria su mobile, il testo del sottotitolo trabocca e si sovrappone al prezzo del prodotto perché l'altezza della card è fissa.

I crawler dei motori di ricerca gonfiano il conteggio delle visualizzazioni prodotto. Il solo Googlebot aggiunge centinaia di 'visualizzazioni' al giorno.

Correzione prevista: 01/04/2026

Gli indirizzi email contenenti un carattere + (ad es. user+shop@gmail.com) venivano rifiutati durante il checkout come ospite, pur essendo conformi alle RFC.

Il browser delle segnalazioni carica tutte le segnalazioni in memoria prima di paginarle lato client. I negozi con oltre 500 segnalazioni riscontrano un ritardo evidente e problemi di memoria del browser.

Salvare il contenuto di una scheda la sposta all'ultima posizione. Il campo posizione non è incluso nei dati del modulo durante un salvataggio del solo contenuto.

Il modulo si aggancia a displayProductExtraContent, ma i parametri dell'hook sono cambiati in PS 9.0 — l'oggetto Product è ora incapsulato in un ProductPresenter.

Dopo che PrestaShop applica un aggiornamento minore automatico, il verificatore di integrità dei file contrassegna tutti i file core aggiornati come 'modified', generando centinaia di falsi allarmi.

Il timestamp anti-spam nascosto poteva essere inizializzato troppo tardi sul tema Hummingbird quando gli script erano differiti o il DOM del modulo cambiava dopo il caricamento della pagina.

I negozi con traffico elevato esauriscono il rate limit dell'API Instagram Basic Display (200 richieste/ora) perché ogni caricamento di pagina effettua una chiamata API in tempo reale.

Ogni esecuzione del cron registra ora di inizio, ora di fine e output senza alcuna rotazione. Dopo mesi di attività, la tabella dei log supera 1GB sui negozi attivi.

Il pulsante flottante del checkout express veniva spinto sotto la parte visibile della pagina sui dispositivi mobili quando il carrello conteneva più di 5 righe d'ordine.

Quando TheCheckout di Prestasmart era installato insieme a Checkout Revolution, entrambi i moduli tentavano di sovrascrivere la pagina di checkout, causando un loop di redirect o un checkout vuoto. Erano interessati i clienti che usavano TheCheckout come checkout predefinito e Checkout Revolution solo per i pulsanti express.

I pattern URL personalizzati per le pagine CMS (es. /help/returns invece di /content/3-returns) creano un conflitto di routing in cui rispondono sia la route del modulo sia quella nativa di PrestaShop, causando errori 404 intermittenti.

Le domande che contengono virgolette doppie (es. Come si usa la modalità "avanzata"?) rompono il binding dell'attributo data perché le virgolette non vengono escapate.

L'ordinamento drag-and-drop funziona per le singole voci FAQ all'interno di una categoria, ma non per riordinare le categorie stesse. La lista delle categorie non inizializza la libreria Sortable.js.

Il controllo della dimensione del file usa filesize() di PHP, che restituisce false per file più grandi di 2GB sui sistemi a 32 bit. Anche a 64 bit, leggere l'intero file in memoria per l'analisi provoca un crash.

Correzione prevista: 15/03/2026

Alcuni clienti hanno segnalato una pagina bianca dopo il reindirizzamento da PayPal. Il problema si verificava quando il cookie di sessione scadeva durante il flusso di pagamento o quando l'URL di reindirizzamento conteneva una risposta non valida.

Il rilevamento delle orfane controlla solo le associazioni prodotto, non il contenuto delle pagine CMS. Le immagini incorporate nell'HTML delle pagine CMS tramite tag vengono contrassegnate come orfane ed eliminate.

La funzione 'Pulisci regole carrello scadute' elimina le regole carrello con date_to < NOW(), ma questo include regole ancora attive e assegnate a ordini futuri.

Il contatore 'X di Y riscattati' per le offerte a quantità limitata mostra sempre 0. Il contatore legge dalla tabella di utilizzo cart_rule, ma il nome della colonna è cambiato in PS 8.0.

L'elaborazione di immagini PNG ad alta risoluzione (3000px+) con ImageMagick esaurisce il limite di memoria configurato, arrestando completamente la coda di ottimizzazione.

Quando più sconti percentuali si cumulano (es. fedeltà 10% + vendita flash 50% + coupon 25%), il totale può diventare negativo.

Uno sconto programmato per il '1° marzo 00:00' si attiva a mezzanotte UTC, cioè all'1 di notte CET (fuso orario del negozio). Per le vendite flash sensibili al tempo è un problema significativo.

I valori degli attributi contenenti caratteri speciali (come '6" pipe' o 'M&S compatible') vengono mostrati come '6" pipe' nel menu a tendina del filtro admin.

La regola 'Compra 2, ricevi 1 gratis' si applica a prodotti in categorie esplicitamente escluse dalla regola di sconto. Il controllo di esclusione valida solo la categoria principale, non tutte le categorie associate.

Gli header CSP di PrestaShop 9.0 bloccano lo script di embed di TikTok da www.tiktok.com perché non è tra le origini consentite predefinite.

Un cliente con account su più negozi vede i ticket di tutti i negozi uniti in un'unica lista. L'ID cliente è condiviso, ma il contesto del ticket non è filtrato per negozio.

La Content Security Policy predefinita di PrestaShop 9.0 blocca l'esecuzione degli script inline, impedendo il caricamento del widget Crisp. La console mostra 'Refused to execute inline script'.

Cambiare lo stato del ticket tramite il menu delle azioni di massa non attiva l'email di notifica. Solo i cambi di stato dei singoli ticket inviano email.

Su connessioni veloci, il contenuto della pagina protetta è brevemente visibile per 200-300ms prima che l'overlay password basato su JavaScript lo copra.

Il pulsante WhatsApp flottante e il banner di consenso ai cookie si ancorano entrambi all'angolo in basso a destra, sovrapponendosi su mobile.

La migrazione del database su un nuovo server o il ripristino da un backup azzera il valore AUTO_INCREMENT, generando potenzialmente numeri d'ordine personalizzati duplicati.

Il caricamento degli allegati del ticket rifiuta i PDF oltre i 2MB con un errore generico. Il limite di caricamento era hardcoded nella validazione JavaScript ma non documentato.

Quando il nome di un prodotto contiene & (es. 'Salt & Pepper Mill'), il linker inietta un tag anchor che corrompe l'entità HTML, producendo markup non valido.

PrestaShop 9.0 ha cambiato la lista CMS dell'admin passando a controller Symfony. L'hook del modulo per rinominare le pagine CMS nel menu non viene più eseguito sul nuovo controller.

L'hook di creazione del ticket viene attivato due volte all'invio del modulo — una volta dal controller e una volta dalla validazione AJAX.

I negozi con molte categorie vedono solo le prime 50 nel builder del menu. La query dell'albero delle categorie usa un LIMIT 50 predefinito.

La bolla del widget di chat compare dopo un ritardo di 2 secondi, spingendo in alto il contenuto del footer e causando un Cumulative Layout Shift evidente.

Pagando con Stripe, l'email di conferma dell'ordine veniva inviata una volta dal gestore del webhook Stripe e una volta dall'hook standard di convalida dell'ordine, generando email duplicate.

I loghi dei clienti caricati nell'admin vengono visualizzati alla risoluzione originale (spesso oltre 2000 px di larghezza) anche se vengono mostrati a 150 px di larghezza, causando un peso della pagina enorme.

Dopo aver toccato un link del menu su mobile, l'overlay resta aperto durante la navigazione, causando un flash del menu sulla nuova pagina.

Il testo del mega menu eredita il colore del body della pagina (bianco su bianco) quando il tema usa un header invertito.

Spostando il mouse in diagonale dalla voce di menu verso il menu a tendina, questo si chiude perché il puntatore esce brevemente dall'area di attivazione.

Il sale_price_effective_date usa il formato 'Y-m-d', ma Google richiede ISO 8601 con offset del fuso orario (2025-06-15T00:00:00+02:00).

I prodotti con stock a 0 compaiono comunque nel feed quando l'opzione 'escludi esauriti' è attiva. La query di controllo dello stock usa la quantità a livello di prodotto invece dello stock_available a livello di combinazione.

Quando un ordine viene eliminato, lo stock scalato durante l'ordine non viene ripristinato, causando discrepanze di inventario.

Quando il server Redis è irraggiungibile, il modulo ripiega silenziosamente sulla cache basata su file senza alcuna notifica all'admin. Il negozio sembra funzionare, ma con prestazioni degradate.

Sulle pagine che si caricano rapidamente, il dataLayer.push() per page_view viene eseguito prima che lo script del contenitore GTM sia caricato, causando la perdita del primo evento page_view.

La scansione di sicurezza completa interroga l'intero catalogo prodotti e lo storico degli ordini, acquisendo lock sulle tabelle che rallentano le operazioni del front office durante l'orario di attività.

La scansione di anteprima mostra '1.247 voci orfane', ma l'esecuzione della pulizia ne rimuove solo 1.102. La query di anteprima non filtra per contesto negozio, mentre l'eliminazione sì.

Le varianti prodotto (combinazioni) non includono il codice a barre EAN-13 nel feed anche quando è impostato sulla combinazione. Il generatore del feed legge solo l'EAN del prodotto padre.

Google Merchant Center rifiuta i prodotti con link immagine in HTTP. La generazione degli URL delle immagini non rispetta la configurazione force_ssl.

Il popup di adesione al sondaggio Recensioni dei clienti Google viene mostrato nella pagina di conferma dell'ordine anche quando il pagamento è fallito o è stato annullato, chiedendo ai clienti di recensire un acquisto mai completato.

I ticket con solo note interne dello staff (nessuna risposta del cliente) non vengono mai chiusi automaticamente perché il timestamp dell'ultima attività considera solo le risposte dei clienti.

La generazione del feed XML avviene in un'unica richiesta HTTP e va in timeout a 30 secondi per i cataloghi di grandi dimensioni.

Quando due banner sono assegnati allo stesso hook con la stessa priorità, si renderizzano uno sopra l'altro invece di impilarsi verticalmente. Il CSS usa position:absolute senza tenere conto degli elementi fratelli.

In precedenza, il passaggio da un metodo di pagamento all'altro (ad es. da Stripe a PayPal) reimpostava il corriere selezionato a quello predefinito. Il problema è stato risolto nella versione 3.2.1.

Il deep link di LINE (line://...) non apre nulla sui dispositivi privi dell'app LINE, lasciando i clienti confusi. Non è previsto alcun fallback alla versione web.

Su iOS, il deep link t.me reindirizza all'App Store se Telegram non è il gestore predefinito, anche quando l'app è installata.

Ogni caricamento di pagina attiva chiamate API verso Facebook, Pinterest e LinkedIn per recuperare i contatori di condivisione, aggiungendo 500-1000ms al tempo di caricamento della pagina.

Premere Invio nel campo e-mail attiva sia l'evento submit del modulo sia il gestore keydown, generando due richieste di iscrizione verso Mailchimp. La seconda richiesta fallisce con 'already subscribed'.

Nei negozi con lingue RTL (arabo, ebraico) il carosello si anima nella direzione sbagliata e il testo è allineato da sinistra a destra, rendendo le testimonianze difficili da leggere.

Le richieste all'API dei conteggi di condivisione restituiscono 0 perché Facebook ha dismesso l'API pubblica dei conteggi di condivisione nel 2024. I contatori mostrano valori a zero fuorvianti.

L'evento ViewContent passa un singolo ID prodotto come stringa invece del formato array richiesto, facendo fallire l'abbinamento con il Catalogo di Facebook per gli annunci dinamici.

I post Facebook incorporati hanno una larghezza fissa di 500px che deborda dal contenitore sui dispositivi mobili, causando lo scorrimento orizzontale.

I crawler dei motori di ricerca che seguono i link dei banner gonfiano le statistiche dei clic. Il tracciamento non distingue tra visitatori umani e bot.

Filtrare per intervallo di date senza selezionare esplicitamente gli stati ordine include tutti gli ordini indipendentemente dallo stato, compresi quelli annullati e in errore.

Il player YouTube incorporato inizia la riproduzione con l'audio quando il feed entra nel viewport, violando le politiche di riproduzione automatica dei browser e spaventando i visitatori.

Il pulsante di chiusura bianco (×) è invisibile sui banner con sfondi chiari/bianchi.

Le immagini banner a tutta larghezza fuoriescono dal viewport sui dispositivi mobili, causando scorrimento orizzontale. Il contenitore dell'immagine aveva width:100% ma l'immagine stessa non aveva alcun vincolo max-width.

I negozi B2B che mostrano i prezzi senza imposte riportano comunque il totale dell'ordine imposte incluse come valore di conversione, gonfiando il ROAS riportato in Google Ads.

Sul tema Hummingbird vengono renderizzati sia la navigazione del tema sia il mega menu, causando menu duplicati.

I banner pianificati per una data/ora specifica compaiono 1 ora in anticipo al cambio dell'ora legale. Lo scheduler non tiene conto della variazione dell'offset del fuso orario.

Lo slideshow dei banner continua ad avanzare quando la scheda del browser è in background, consumando CPU. Al ritorno, l'utente vede una slide casuale invece del punto in cui era rimasto.

Una pagina prodotto su 'Shower Drain' crea un link interno a se stessa quando il termine 'shower drain' compare nella descrizione del prodotto.

Il widget delle recensioni Trustpilot si carica in modo asincrono e, al momento del rendering, spinge il contenuto verso il basso di 120px, penalizzando il punteggio CLS in Google PageSpeed.

Gli eventi di acquisto lato server vengono rifiutati dall'API di X con l'errore 'missing twclid' perché l'ID del clic pubblicitario originale non viene conservato lungo il flusso di acquisto.

Quando un processo batch accredita punti storici, i clienti che superano una soglia di livello non ricevono la notifica di avanzamento. Il controllo del livello viene eseguito solo per le aggiunte di punti in tempo reale.

I clienti con connessioni mobili lente ricevono punteggi reCAPTCHA v3 bassi (sotto 0.5), perché i segnali di interazione della pagina non si caricano completamente prima dell'invio del modulo, causando blocchi da falsi positivi.

Se il gruppo di un cliente cambia (es. promosso a VIP dall'admin), lo scaglione di sconto usa ancora il vecchio gruppo finché il cliente non esce e rientra, perché lo scaglione è memorizzato in cache nella sessione.

Aggiungere un prodotto al carrello via AJAX sostituisce il contenuto della pagina ma non reinizializza l'Intersection Observer per le immagini in lazy loading, che quindi non vengono mai caricate.

La lista admin carica in memoria tutte le voci dello storico punti per la paginazione. I negozi con molti clienti e ordini accumulano centinaia di migliaia di righe.

Un termine di pagamento 'Net 30' su un ordine del venerdì imposta la scadenza a un sabato. I sistemi contabili rifiutano fatture con scadenza nel weekend.

La validazione del codice referral distingue tra maiuscole e minuscole, quindi 'FRIEND20' non corrisponde a 'friend20'. I clienti che copiano i codici dalle email si ritrovano spesso con maiuscole diverse.

L'email di notifica della scadenza dei punti viene sempre inviata nella lingua predefinita del negozio invece che nella lingua preferita del cliente.

Lo script di inizializzazione del pixel Quora presuppone che jQuery sia disponibile globalmente. Sul tema Hummingbird (che non carica jQuery per impostazione predefinita), il pixel fallisce con 'jQuery is not defined'.

Il cron job attiva le vendite all'orario pianificato, ma i permessi dei file delle regole carrello generate differiscono dall'utente del web server. I file di cache delle regole carrello risultano illeggibili.

Il popup AJAX del carrello mostra i prodotti pack senza il badge pack, rendendo poco chiaro che il prodotto è un pack con il suo contenuto.

Usare il credito negozio insieme a uno sconto percentuale da regola carrello provoca un errore Negative amount. Il credito viene applicato dopo lo sconto percentuale, ma la percentuale è calcolata sul totale prima del credito, facendo sì che la riduzione combinata superi l'importo dell'ordine.

Gli eventi del Pixel di Facebook messi in coda prima del consenso (ad es. il PageView sulla landing page) andavano persi definitivamente dopo la concessione del consenso. Il pixel si attivava per i nuovi eventi, ma la coda pre-consenso veniva scartata.

I badge progettati con effetti di trasparenza sono invisibili sulle immagini prodotto che hanno anch'esse sfondi trasparenti, poiché i due livelli trasparenti si fondono.

Quando il negozio ha force_ssl attivo, l'URL canonico generato usa ancora http:// perché il modulo legge il dominio dalla configurazione senza controllare l'impostazione SSL.

La timeline visuale nella pagina di dettaglio ordine carica solo gli ultimi 90 giorni di eventi. Per gli ordini B2B di lunga durata si perdono così l'ordine originale e le prime comunicazioni.

L'annullamento di un articolo in un ordine con più articoli detrae i punti dell'intero ordine invece dei soli punti dell'articolo annullato. Il gestore dell'annullamento usa il totale punti dell'ordine, non i punti per articolo.

Il nome visualizzato di Skype for Business viene troncato al primo carattere speciale (& o

Le pagine categoria con paginazione (pagina 2, 3, ecc.) non avevano alcun tag canonical, permettendo a Google di indicizzare ogni URL paginato come contenuto separato.

Gli ospiti che creano un account in seguito non ricevono i punti per gli ordini effettuati prima della creazione dell'account. L'associazione dell'ordine avviene dopo l'esecuzione dell'hook di calcolo dei punti.

Quando si modifica la quantità di un prodotto in un ordine esistente, il totale dell'ordine viene aggiornato, ma gli sconti delle regole carrello associate (ad es. 'spedizione gratuita oltre 100 €') non vengono ricalcolati.

Ogni indirizzo del cliente crea un contatto ActiveCampaign separato, perché la sincronizzazione usa e-mail+indirizzo come chiave univoca invece della sola e-mail.

Il prezzo originale barrato appare solo nella pagina di dettaglio del prodotto, non nelle card dell'elenco prodotti della categoria. Nel template della categoria mancava il blocco di visualizzazione dello sconto.

Gli endpoint AJAX della dashboard finanziaria restituiscono 404 quando la lingua dell'interfaccia di amministrazione non è l'inglese. L'URL del controller AJAX era codificato con il prefisso della lingua inglese.

La creazione di una regola di vendita per oltre 50 prodotti causa un timeout PHP perché ogni prodotto genera una query separata di creazione della regola carrello.

Le regole di ban che usano la notazione CIDR (es. 2001:db8::/32) vengono ignorate perché la funzione di confronto gestisce solo intervalli IPv4.

L'email di riepilogo di fine vendita elenca tutti i prodotti in saldo di tutti i negozi invece dei soli prodotti del negozio corrente.

Le gallerie prodotto con URL video (YouTube, Vimeo o self-hosted) mostrano un segnaposto generico con pulsante di riproduzione invece di una vera miniatura del video. Il modulo estrae correttamente gli ID video dagli URL tramite espressioni regolari, ma non recupera l'immagine di anteprima effettiva dall'API della piattaforma video.

YouTube fornisce le miniature all'indirizzo https://img.youtube.com/vi/{id}/maxresdefault.jpg e Vimeo tramite la sua API oEmbed. Nessuna delle due fonti viene attualmente utilizzata — il modulo ripiega su un overlay statico con icona di riproduzione in SVG.

Su PrestaShop 1.7.6 con PHP 7.2, la pagina di checkout va in crash a causa delle dichiarazioni di proprietà tipizzate, non supportate in PHP 7.2.

Il badge '-30%' calcola lo sconto dal prezzo base, ma quando un prodotto ha già un prezzo specifico, lo sconto effettivo è diverso.

I prodotti aggiunti al carrello prima dell'inizio di una vendita flash non ricevono lo sconto quando la vendita si attiva. Il prezzo del carrello viene memorizzato in cache e non viene ricalcolato quando nuove regole carrello diventano attive.

I trasferimenti tra magazzini vengono registrati come due eventi separati (diminuzione + aumento) invece di un singolo record di trasferimento. Questo rende impossibile tracciare il movimento.

I riferimenti ordine più lunghi di 10 caratteri vengono tagliati nel CSV esportato perché la colonna era definita con un formato a larghezza fissa.

Il widget di chat viene sempre mostrato in inglese indipendentemente dalla lingua del negozio selezionata dal cliente, perché il parametro locale non viene passato durante l'inizializzazione.

Il log delle attività admin non ha alcun meccanismo di rotazione o pulizia. Nei negozi attivi con più amministratori la tabella dei log supera i 500MB entro un anno.

Il conto alla rovescia raggiunge 00:00:00 e poi mostra valori negativi (-00:00:15), perché l'orario di fine viene calcolato lato server mentre il conto alla rovescia gira lato client.

Le descrizioni delle categorie di cookie (Essenziali, Statistiche, Marketing) sono scritte a codice in inglese. I negozi multilingua mostrano le descrizioni in inglese indipendentemente dalla lingua del visitatore.

Caricando 3 file contemporaneamente tramite l'interfaccia drag-and-drop dell'admin, viene salvato solo l'ultimo file. Il gestore di upload asincrono usa lo stesso nome di file temporaneo per tutti i caricamenti concorrenti.

L'hook di esportazione dati GDPR non include la cronologia dei consensi ai cookie del cliente (quando sono stati accettati, quali categorie).

Aggiungere un nuovo file a un prodotto che ha già la versione 3.2 resetta il contatore di versione a 1.0 invece di incrementarlo automaticamente a 3.3. Il campo versione veniva resettato durante l'invio del form.

I prodotti assegnati a una vendita settimanale restano visibili nella sezione saldi dopo la fine della settimana promozionale, perché il cron di pulizia non rimuove le voci specific_price.

Quando la full page cache è attiva, tutti i visitatori vedono la stessa pagina in cache — con o senza il banner dei cookie. Lo stato del banner non può essere personalizzato con il caching lato server.

Gli URL dei post del blog mancano dalla sitemap XML generata da SEO Revolution. Il modulo blog non registra i propri URL nell'hook di generazione della sitemap.

Cambiare l'URL parlante di un prodotto da /old-name a /new-name crea un redirect. Cambiarlo di nuovo in /newest-name crea una catena: /old-name → /new-name → /newest-name invece di aggiornare il primo redirect.

Quando un visitatore rifiuta i cookie, il modulo blocca TUTTA l'esecuzione degli script, comprese le funzionalità essenziali del sito come le operazioni sul carrello e la navigazione. Il meccanismo di blocco era troppo aggressivo.

Le lingue aggiunte manualmente (non provenienti dal pacchetto lingue predefinito di PrestaShop) mostrano un'icona di immagine rotta perché il modulo cerca le immagini delle bandiere nella directory /img/flags/ del tema usando il codice ISO.

Dopo il reset della configurazione del modulo, i gruppi di attributi creati dall'utente come "Materiale" o "Stagione" non ricompaiono nell'elenco dei filtri disponibili. L'operazione di reset svuota la tabella di mappatura mprfilterrevolution_template_item, che memorizza l'associazione tra gruppi di attributi e template di filtri.

Si tratta di una limitazione di progettazione — il modulo non può distinguere tra mappature di filtri create dall'utente e mappature predefinite durante la reinstallazione.

Il contenuto della finestra delle preferenze cookie fuoriesce dal viewport su mobile senza possibilità di scorrimento. L'overlay della modale intercetta gli eventi touch.

I prodotti con stock a zero ma con l'opzione 'consenti gli ordini se esaurito' attiva compaiono sotto il filtro 'Disponibile'. Questo confonde i clienti, che si aspettano di vedere prodotti effettivamente disponibili.

La dashboard di analisi delle ricerche non traccia le ricerche che restituiscono zero risultati, che sono le più preziose per identificare prodotti o contenuti mancanti.

Lo script GA4 viene eseguito prima che il consenso ai cookie venga verificato, perché viene caricato tramite Google Tag Manager, che si inizializza in modo indipendente.

Dopo il passaggio alla visualizzazione dei prezzi tasse escluse, l'aggiunta di un prodotto al carrello via AJAX riporta i prezzi a tasse incluse perché la risposta AJAX non rispetta il cookie dello switcher.

Le pagine di categoria paginate (page=2, page=3) puntavano il loro canonical a page=1, cosa che Google interpreta come soppressione intenzionale dei duplicati. Questo ha rimosso completamente le pagine paginate dall'indice.

Se il nome di un prodotto contiene un carattere pipe (|), il parser del pattern del meta title tratta tutto ciò che segue come placeholder di categoria, troncando il nome reale.

Un cliente che naviga nel Negozio A e poi visita il Negozio B vede prodotti del Negozio A nella sua sezione 'visti di recente', che potrebbero non esistere o avere prezzi diversi nel Negozio B.

Un URL canonical personalizzato che inizia con http:// viene sovrascritto in https:// quando forza SSL è attivo, ignorando il valore canonical configurato esplicitamente.

Il cookie di consenso viene impostato con path='/' ma senza l'attributo domain, quindi non viene inviato nelle richieste ai sottodomini. Nei negozi con prefisso www, il cookie impostato su www.domain.com non viene letto su domain.com.

La libreria di esportazione XLSX usa l'interpolazione di stringhe in un modo deprecato in PHP 8.2, producendo un file corrotto.

I prodotti senza wholesale_price impostato mostrano un costo di 0, falsando il report dei margini che indica un margine del 100%.

Il cookie 'mostra solo una volta per visitatore' viene impostato come cookie di sessione invece che persistente, quindi viene cancellato alla chiusura del browser. I visitatori di ritorno rivedono il popup.

L'aggiunta di una nuova lingua al negozio crea i file sitemap per lingua, ma l'indice della sitemap (sitemap.xml) non viene rigenerato per includerli.

Differenze di arrotondamento tra il calcolo delle imposte del modulo (round di PHP) e l'arrotondamento nativo di PrestaShop (Tools::ps_round con PS_PRICE_ROUND_MODE) causano discrepanze di 0.01-0.02 per ordine nei report delle imposte.

Il widget MRR include erroneamente gli ordini non in abbonamento, gonfiando il ricavo ricorrente. La query filtra solo per intervallo di date, non per tipo di ordine.

Quando una pagina CMS ha un friendly URL personalizzato definito tramite il modulo, i tag alternate hreflang non vengono generati. Le pagine prodotto e categoria standard funzionano correttamente.

L'esportazione massiva delle fatture PDF per più di 1000 ordini causa un errore di esaurimento della memoria PHP. L'esportazione carica tutti i dati degli ordini in memoria in una volta sola.

Un ordine effettuato alle 18 mostra 'Consegna entro giovedì' basandosi sulla spedizione in giornata, ma l'orario limite del corriere è alle 15, quindi in realtà parte domani.

Il CSV include solo la colonna dell'importo totale. I contabili hanno bisogno di colonne separate per importo netto, aliquota, importo dell'imposta e totale lordo.

La password generata automaticamente è inserita in chiaro nell'e-mail di benvenuto, risultando visibile nelle anteprime e potenzialmente memorizzata nella cache dei client di posta.

Il report multivaluta converte tutti gli ordini usando il tasso di cambio odierno invece del tasso al momento dell'acquisto. I report storici cambiano a ogni aggiornamento del tasso.

Il caricamento sincrono dell'SDK di Intercom blocca il thread principale durante il caricamento della pagina, aggiungendo un ritardo significativo alla metrica TTI.

Il tag hreflang x-default non viene generato quando la lingua predefinita del negozio ha un URL senza prefisso di lingua (es. /product-name invece di /en/product-name).

Il grafico dei ricavi mostra i prezzi comprensivi di imposte, gonfiando i ricavi riportati. La query del report non sottrae le imposte da order_total quando il negozio mostra i prezzi tasse incluse.

Quando un cliente appartenente a un gruppo con prezzi speciali (es. ingrosso) usava il checkout express, il prezzo scontato non veniva applicato. L'importo Stripe usava il prezzo di listino invece del prezzo specifico del gruppo.

Le frecce sinistra/destra non permettono di passare da un'immagine all'altra in modalità a schermo intero. Il listener keydown era collegato al contenitore dello slideshow, che non riceve il focus.

L'ordine delle immagini impostato tramite drag-and-drop nella galleria viene perso al salvataggio del prodotto. Il campo posizione non è incluso nel form di salvataggio.

Le immagini caricate tramite l'API non attivano l'hook di generazione delle miniature. I clienti vedono un'icona di immagine rotta al posto delle miniature piccole.

Il gesto di pinch-to-zoom su mobile viene intercettato dallo zoom nativo del browser invece che dallo zoom della galleria.

I pagamenti con addebito diretto SEPA richiedono 5–14 giorni lavorativi per il regolamento. Il webhook charge.succeeded scattava giorni dopo il checkout, ma il gestore dello stato dell'ordine non lo riconosceva come lo stesso ordine perché faceva il match sull'ID charge invece che sull'ID payment intent.

Le immagini WebP vengono rifiutate durante il caricamento con l'errore 'Invalid file format'. La lista dei tipi MIME consentiti non includeva image/webp.

Un aumento del 10% su €9.99 dà €10.989, che viene arrotondato a €10.99 invece dell'atteso €10.99 (che in realtà dovrebbe essere visualizzato come €10.99 ma memorizzato diversamente). Il problema è che €19.99 + 10% = €21.989 viene arrotondato a €21.99 invece che a €21.99.

Il chatbot utilizza la preferenza di lingua del browser invece del contesto linguistico corrente del negozio, mostrando risposte in inglese ai clienti francofoni sul negozio francese.

L'URL di condivisione Pinterest non specifica il parametro media, quindi il crawler di Pinterest sceglie la prima immagine che trova nella pagina (spesso il logo o un banner) invece dell'immagine del prodotto.

Il layout a masonry lascia dei vuoti quando le immagini hanno proporzioni variabili. Il posizionamento automatico della CSS grid non riempie gli spazi vuoti.

Quando i filtri vengono applicati via AJAX sulle pagine categoria, l'elenco delle impressioni prodotto non viene aggiornato nel dataLayer, quindi GTM traccia solo i prodotti del caricamento iniziale della pagina.

Ogni checkout con PayPal Express crea una nuova voce di indirizzo anche quando il cliente ha già salvato un indirizzo identico, riempiendo la rubrica di duplicati.

Quando si duplica un prodotto nel back office, i valori degli attributi globali del prodotto di origine non vengono riportati sul duplicato.

La funzione filigrana modifica l'immagine originale caricata invece di creare una copia con filigrana. Se la filigrana viene rimossa in seguito, l'immagine originale è già danneggiata.

Sul tema Hummingbird (PS 8+), i pulsanti di checkout express ereditavano un border-radius di 0px dal reset dei pulsanti del tema, risultando squadrati invece dello stile arrotondato standard di Stripe.

Quando lo scroll infinito carica nuovi prodotti, l'IntersectionObserver del lazy loading non rileva le nuove immagini perché vengono aggiunte al DOM dopo l'inizializzazione dell'observer.

I metodi di pagamento che reindirizzano a un gateway esterno (PayPal, bonifico bancario) e poi tornano alla pagina di conferma non attivano l'evento PURCHASE perché il contesto di sessione viene perso durante il redirect.

Gli script di test automatizzati che creano ordini consumano la quota di e-mail transazionali di Brevo, perché le e-mail di conferma degli ordini di test passano attraverso la stessa pipeline degli ordini reali.

Le storie sono contenuti effimeri che scadono dopo 24 ore. Il widget di embed mostra uno stato rotto quando la storia scade, senza alcun fallback elegante.

Su iOS Safari l'evento touchend scatta contemporaneamente all'evento click, facendo aprire e chiudere la lightbox nello stesso frame.

Tutte le modifiche all'ordine appaiono come 'Modificato dall'amministratore' senza specificare quale account dipendente amministratore ha effettuato la modifica.

La funzione di export CSV usa un limite hardcoded di 50 caratteri per i nomi dei prodotti. I prodotti con nomi più lunghi vengono troncati.

Le immagini all'interno del popup Quick View non si caricano mai perché l'Intersection Observer non rileva gli elementi all'interno di un overlay modale creato dinamicamente.

La formula del punto di riordino non tiene conto del lead time per fornitore. Tutti i magazzini mostrano lo stesso suggerimento di riordino, indipendentemente dal fatto che il fornitore consegni in 2 giorni o 2 settimane.

Quando viene venduto un prodotto pack, lo stock dei singoli prodotti viene decrementato ma non lo stock delle combinazioni per taglie/colori specifici. Il gestore dei pack funziona solo a livello di prodotto, non di combinazione.

La visualizzazione delle stelle arrotonda all'intero più vicino invece di mostrare le mezze stelle, facendo apparire una media di 4.4 come 4.0 stelle (visivamente fuorviante).

Tutti i timestamp dei movimenti di stock vengono mostrati in UTC, il che confonde i commercianti in altri fusi orari. La query del report non applicava la conversione del fuso orario.

Lo scanner di codici a barre usa gli eventi della tastiera per catturare i codici scansionati. Su Firefox il timing dell'evento keypress è diverso, causando la perdita di alcuni caratteri.

La pagina prodotto mostra una quantità disponibile diversa da quella del modulo magazzino. Il modulo memorizza in cache i livelli di stock con un TTL di 10 minuti, ma la pagina prodotto legge direttamente da ps_stock_available.

L'avviso di stock basso scatta a ogni esecuzione del cron finché lo stock è sotto la soglia, inviando e-mail duplicate.

Il numero di fattura viene riservato alla creazione dell'ordine ma usato solo se la fattura viene generata. Gli ordini annullati consumano numeri, creando buchi nella sequenza.

Ricaricare o rivisitare la pagina di conferma dell'ordine attiva di nuovo l'evento di conversione Purchase, causando un tracciamento delle conversioni duplicato.

Il pixel TikTok si inizializza e invia page_view immediatamente al caricamento dello script, prima che il banner di consenso ai cookie sia stato accettato. Questo viola i requisiti di consenso del GDPR.

Il token CAPTCHA è legato alla sessione del server, ma le pagine in cache non hanno una sessione. Il modulo invia un token CAPTCHA valido che non corrisponde ad alcuna sessione lato server.

L'importazione dei trasferimenti di stock da CSV salta silenziosamente le righe in cui la colonna del magazzino di origine è vuota (che significa 'dal fornitore').

Quando due ordini per lo stesso prodotto vengono effettuati contemporaneamente, entrambi decrementano lo stock dallo stesso valore in cache, producendo uno stock negativo.

Quando CCC è attivo, i file CSS/JS compilati non corrispondono ai checksum originali, generando falsi avvisi 'file modificato'.

L'attivazione degli header CSP blocca gli script di terze parti, inclusi Google Analytics, Stripe.js e i provider di font. La policy predefinita è troppo restrittiva.

L'importazione di URL personalizzati da un file CSV salta le righe contenenti caratteri Unicode (come ü, ñ, ø) senza alcun messaggio di errore. L'import segnala il successo, ma quegli URL mancano.

Apple Pay richiede un certificato SSL valido. I negozi che usano certificati autofirmati in sviluppo non mostrano alcun pulsante Apple Pay, senza alcun messaggio di errore.

Lo scanner di malware usa exec() per il confronto dei file, funzione che molti provider di hosting condiviso disabilitano. Non viene mostrato alcun errore.

I file di backup del database si chiamano backup_001.sql, backup_002.sql, rendendoli indovinabili se la directory di backup è esposta.

Una race condition nel gestore della sessione dipendente fa sì che il modulo rilevi ogni caricamento di pagina come un nuovo evento di login, inondando l'e-mail dell'amministratore.

La lista di moderazione dell'admin mostra solo il nome del cliente e il testo della recensione, senza foto né nome del prodotto. Gli admin devono aprire ogni recensione per capire a quale prodotto si riferisce.

Sia la bolla della chat di Tawk.to sia il pulsante di scorrimento verso l'alto occupano l'angolo in basso a destra, sovrapponendosi su tutte le dimensioni di schermo.

L'audit di sicurezza contrassegna tutti i file override dei moduli come potenziali minacce, anche quelli legittimi. Questo crea rumore nel report.

Password comuni come 'Password123!' ottengono il punteggio 'Forte' perché il controllo valida solo lunghezza e varietà dei caratteri, non gli attacchi a dizionario.

Il rate limiter conta le richieste di autocompletamento della ricerca AJAX come tentativi di login. Dopo 10 ricerche rapide, l'IP del cliente viene bloccato temporaneamente.

Quando un carrello contiene prodotti che si esauriscono tra la creazione del carrello e l'invio dell'e-mail, l'e-mail di carrello abbandonato mostra prodotti che il cliente non può acquistare.

Le pagine di categoria e le pagine dei risultati di ricerca non hanno un'immagine OG predefinita, quindi le piattaforme social scelgono un'immagine casuale della pagina oppure non mostrano nulla.

Se il provider SMS non è raggiungibile, gli amministratori non possono completare il login 2FA e restano bloccati in modo permanente.

Quando il negozio è dietro Cloudflare, il firewall vede gli indirizzi IP di Cloudflare invece degli IP reali dei visitatori. Tutto il traffico legittimo viene bloccato.

Dopo la Brexit, il modulo valida solo i prefissi IVA dell'UE tramite VIES. Le partite IVA del Regno Unito (GB) vengono rifiutate anche se andrebbe usata l'API HMRC.

I clienti ospiti ricevono un link di download che punta alla pagina dell'account cliente, a cui non possono accedere. Il link dovrebbe puntare alla pagina di tracciamento dell'ordine ospite con il download allegato.

Gli URL S3 pre-firmati scadono per impostazione predefinita dopo 15 minuti. Per i file di grandi dimensioni (>2GB) su connessioni lente, il download va in timeout.

Il feed incorporato mostra i post come semplici condivisioni di link senza immagini o descrizioni, perché l'API di LinkedIn restituisce dati minimi per le anteprime dei post incorporati.

I prodotti nelle categorie escluse aggirano il controllo di esclusione quando vengono aggiunti al carrello tramite un URL diretto con il parametro id_product invece che dalla pagina prodotto.

L'estrattore del CSS critico non interpreta le dichiarazioni di proprietà personalizzate CSS (--var-name: value) e salta l'intero blocco di regole che le contiene, perdendo gli stili above-the-fold.

Il plugin di chat Messenger carica l'intero SDK JavaScript di Facebook (800KB+) a ogni caricamento di pagina, penalizzando notevolmente i punteggi di velocità.

Le password generate automaticamente includono caratteri come 0, O, 1, l e I, facilmente confondibili quando vengono letti da una lettera di benvenuto stampata o da uno schermo mobile.

Durante la creazione di un archivio ZIP di più file digitali, i file con caratteri Unicode nel nome (es. 'présentation.pdf') vengono saltati silenziosamente. La classe ZipArchive richiede il flag ENC_UTF_8.

La notifica mostra 'John Smith from London just purchased...', rivelando nomi e località reali dei clienti senza consenso.

L'URL del feed registrato su Criteo cambia quando il modulo viene reinstallato, perché il parametro token viene rigenerato. Criteo riceve errori 404 sul vecchio URL del feed.

Il tag delle conversioni avanzate invia al caricamento della pagina l'e-mail del cliente con hash SHA-256 prima che il cliente abbia accettato i cookie di marketing, violando il GDPR.

L'editor di testo formattato per le note di rilascio rimuove l'HTML al salvataggio, convertendo il testo formattato in testo semplice. L'AdminController usava strip_tags nella fase di validazione.

Nei negozi che usano l'opzione 'Imposta lo stato dell'ordine su Consegnato per i prodotti virtuali', l'aggiornamento dello stato fallisce perché l'hook del modulo si attiva prima del controllo dei prodotti virtuali del core.

Quando un cliente riprende un download parziale (richiesta HTTP Range), il contatore dei download si incrementa di nuovo, finendo per raggiungere il limite di download.

La cronologia delle conversazioni del cliente è legata a un ID visitatore casuale. Quando un cliente autenticato esce e rientra, riceve un nuovo ID visitatore e perde la cronologia della chat.

Il caricamento di file di prodotti digitali più grandi di 64MB fallisce silenziosamente — l'interfaccia admin mostra un successo ma nessun file viene salvato. Il problema è il valore predefinito di upload_max_filesize di PHP.

L'e-mail di notifica all'amministratore del negozio contiene il messaggio del cliente ma non il prodotto a cui si riferisce la richiesta. L'amministratore deve indovinare dal contesto.

I link di download restano attivi anche dopo che l'ordine è stato annullato o rimborsato. La validità del link controlla solo la data di scadenza, non lo stato dell'ordine.

I file PDF scaricati risultano corrotti (0 byte o con HTML anteposto) quando l'output buffering di PHP è attivato da un altro modulo o dalla configurazione del server.

I negozi che usano transizioni di pagina basate su AJAX inviano l'evento page_view di UET due volte — una al caricamento iniziale e una alla navigazione AJAX — gonfiando i conteggi delle pagine viste in Microsoft Advertising.

Il controllo dei voti duplicati si basa su un cookie del browser. Cancellare i cookie o usare la modalità in incognito consente voti illimitati sulla stessa richiesta di funzionalità.

Il controllo di scadenza del link di download usa l'ora del server, mentre la generazione del link usa l'ora del negozio. Sui server in cui il fuso orario PHP differisce da quello del negozio, i link possono scadere prima che il cliente li clicchi.

Se il dipendente che ha creato il post ha i campi del nome vuoti, la riga dell'autore mostra solo '—' o resta vuota.

Dopo aver modificato un post del blog nel back office, il front-end continua a mostrare il vecchio contenuto finché la cache non viene svuotata manualmente. La chiave di cache non include il timestamp di aggiornamento del post.

Dopo l'attivazione dell'SSL, le immagini incorporate nel contenuto dei post fanno ancora riferimento a URL http://, causando avvisi di contenuto misto e immagini non caricate.

L'import CSV aggiorna solo il prezzo base del prodotto, ignorando gli impatti sui prezzi a livello di combinazione inclusi nel CSV. I prezzi delle combinazioni restano invariati.

Le categorie del blog annidate oltre 2 livelli (es. News > Tech > AI) non sono visibili nell'albero delle categorie dell'admin. La query ricorsiva aveva un limite di profondità hardcoded pari a 2.

Il contatore delle vendite si incrementa alla creazione dell'ordine ma non si decrementa mai quando gli ordini vengono annullati o rimborsati, mostrando un totale gonfiato.

Le animazioni attivate dallo scorrimento con un ritardo (ad es. rivelazioni di card scaglionate) non vengono mai riprodotte se l'utente scorre oltre l'elemento prima che il ritardo scada, lasciando spazi vuoti.

I prodotti che hanno solo immagini in formato WebP vengono esclusi dalla sitemap delle immagini perché il generatore filtra solo le estensioni .jpg/.png.

L'SDK di Klaviyo identifica i visitatori tramite e-mail non appena la inseriscono in un qualsiasi campo di un modulo (checkout, newsletter, contatti), tracciandone la cronologia di navigazione senza un consenso marketing esplicito.

I post programmati per una pubblicazione futura vengono pubblicati immediatamente quando il fuso orario del server differisce da quello del negozio. Lo scheduler confronta i timestamp senza conversione di fuso orario.

I prodotti con ecotassa mostrano l'importo dell'ecotassa sottratto due volte nella visualizzazione tasse escluse, perché l'ecotassa è già esclusa dal prezzo netto.

Il widget dei prodotti correlati in fondo ai post del blog mostra prodotti di tutti i negozi invece che solo del negozio corrente.

Il link con protocollo signal:// non funziona sui browser desktop a meno che Signal Desktop non sia installato, senza alcun feedback all'utente su cosa sia andato storto.

I provider di hosting con header X-Frame-Options: SAMEORIGIN restrittivi bloccano il caricamento dell'iframe del widget Discord, mostrando uno spazio vuoto al suo posto.

Caratteri come & e " nella seconda descrizione di categoria appaiono nella loro forma codificata (&amp;) perché Smarty applica l'escape due volte — una nel template del modulo e una nel wrapper del tema.

Cliccando su 'Pagina successiva' nell'elenco del blog viene generato un URL come /blog?page=2 invece di /blog/page/2, che restituisce 404. I link di paginazione usano il formato URL sbagliato quando gli URL parlanti sono attivi.

L'applicazione di un filtro via AJAX sostituisce il contenuto della categoria, incluso il tag H1, che torna al nome di categoria predefinito invece dell'H1 personalizzato.

I clienti dei gruppi VIP o all'ingrosso vedono i prezzi normali durante il checkout express, perché il contesto del gruppo non viene passato al provider di pagamento.

Lo script di inizializzazione di Zendesk Chat include la chiave API completa in un tag script visibile, che potrebbe essere usata per accedere all'API di Zendesk Chat.

L'URL di condivisione viene generato con un token basato sulla sessione. Quando il cliente che condivide cancella i propri cookie, il link condiviso diventa non valido per tutti.

Durante l'elaborazione di una richiesta di cancellazione dei dati GDPR, il modulo non elimina né anonimizza le recensioni prodotto pubblicate del cliente, lasciando visibili il suo nome e i contenuti.

Uno sconto fedeltà del 15% su un prodotto da €0.50 viene arrotondato a €0.08 di sconto, ma il controllo dell'importo minimo della regola carrello fallisce e applica invece €0.00.

La pulizia degli account ospite elimina le voci ospite più vecchie della soglia configurata, ma non verifica se quegli ospiti hanno contenuti del carrello non scaduti. Questo fa perdere potenziali dati per il recupero dei carrelli abbandonati.

L'output del feed RSS include tag HTML grezzi nel campo invece di testo semplice. Alcuni lettori RSS lo visualizzano in modo errato.

Su schermi più stretti di 375px il banner dei cookie copre l'intero viewport senza alcun modo di scorrere oltre, bloccando di fatto tutto il contenuto della pagina.

Il form dei commenti compare in fondo a ogni post anche quando l'opzione 'Consenti commenti' è disattivata nelle impostazioni del modulo. Il template controllava un override per singolo post inesistente invece dell'impostazione globale.

Sui browser desktop, cliccando il pulsante WhatsApp si apre l'interfaccia WhatsApp Web ma il modello di messaggio precompilato è vuoto, perché la codifica dell'URL usa + invece di %20 per gli spazi.

Condividendo un post del blog sui social media, l'immagine in evidenza del post non viene inclusa in og:image. La generazione dei meta tag usava il metodo sbagliato per ottenere l'URL dell'immagine.

La ricerca GeoIP usa l'IP del server proxy invece dell'IP reale del visitatore, bloccando o reindirizzando clienti legittimi che usano VPN aziendali.

Le modifiche all'API di Twitter del 2023 hanno rotto l'endpoint del widget timeline v1.1. Le timeline incorporate mostrano lo stato vuoto generico invece dei tweet.

Durante le vendite lampo, più notifiche si accodano e vengono mostrate contemporaneamente, coprendo il contenuto del prodotto e il pulsante di aggiunta al carrello.

L'SDK completo di LiveChat con i suoi asset (1,2 MB) viene caricato su ogni pagina, anche quando la chat è chiusa. Questo penalizza in modo significativo i punteggi di velocità delle pagine su mobile.

Le stime di consegna includono le festività pubbliche come giorni lavorativi, mostrando date di consegna troppo ottimistiche (ad es. 'Consegna entro il 25 dicembre').

Cambiare il prefisso di rotta da /blog a /journal fa sì che tutti i post esistenti restituiscano 404, perché i vecchi URL non vengono reindirizzati.

L'aggiunta di un prodotto al carrello provoca un refresh della pagina che fa perdere tutti i filtri selezionati. L'aggiornamento AJAX del carrello provocava un ricaricamento completo della pagina invece di un aggiornamento parziale.

Le immagini in verticale creano righe irregolari nella griglia perché il CSS presuppone proporzioni quadrate derivanti dal ritaglio predefinito di Instagram.

L'intervallo del filtro prezzo mostra prezzi al netto delle tasse anche quando il negozio è configurato per mostrare i prezzi tasse incluse. I clienti vedono prezzi diversi nel filtro rispetto alle schede prodotto.

Se un prodotto è attivo in inglese ma disattivato in francese, il tag hreflang per il francese viene comunque generato e punta a una pagina 404.

Quando è installato anche ps_facetedsearch (anche se disattivato), gli URL dei filtri del modulo entrano in conflitto perché entrambi usano il parametro 'q'.

L'Intelligent Tracking Prevention (ITP) di Safari limita la durata dei cookie impostati via JavaScript a 7 giorni e li blocca del tutto negli iframe, facendo perdere il cookie di consenso tra una pagina e l'altra.

L'aggiornamento della quantità di un articolo già presente nel carrello attiva nuovamente l'evento AddToCart, gonfiando il conteggio delle aggiunte al carrello in Pinterest Analytics.

L'aggiornamento massivo elabora tutte le immagini in un'unica richiesta HTTP, causando un timeout sui cataloghi di grandi dimensioni.

Il codice di tracciamento Hotjar viene iniettato sia nella pagina principale sia in tutti gli iframe (gateway di pagamento, captcha, embed social), creando registrazioni duplicate e overhead di prestazioni.

Quando la logica del filtro è impostata su AND (devono corrispondere tutti i criteri selezionati), i prodotti con più attributi dello stesso tipo restituiscono zero risultati. Il JOIN SQL era errato — serviva un GROUP BY con HAVING COUNT.

Quando un ordine passa a uno stato di workflow personalizzato, l'e-mail di notifica usa il template predefinito di PrestaShop invece del template personalizzato del modulo, perché la directory dei template e-mail non è registrata.

Cliccare rapidamente sulle opzioni dei filtri causa errori 'net::ERR_ABORTED', perché ogni clic crea un nuovo XHR che annulla il precedente. L'elenco prodotti sfarfalla.

Sui dispositivi mobili, con più di 5 gruppi di filtri, il pannello supera l'altezza del viewport senza possibilità di scorrimento. Il contenitore del pannello aveva overflow:hidden per esigenze di animazione su desktop.

I dati strutturati FAQ sulle pagine categoria non superano la validazione perché il @type è collocato dentro uno schema Product invece che come entità FAQPage autonoma.

PS 9.0 ha cambiato il formato di memorizzazione dei colori degli attributi. Il modulo legge il valore del colore dalla colonna legacy ps_attribute.color, rimossa in PS 9.0. Adattato per leggere i dati colore dalla nuova struttura di metadati degli attributi, con fallback alla colonna classica per le versioni precedenti.

L'applicazione dei filtri crea URL come /category/color-red/size-l che Google indicizza come pagine separate. Queste pagine filtrate competono con la pagina di categoria principale nei risultati di ricerca.

Nelle configurazioni multistore, i filtri per attributo configurati per un negozio compaiono anche negli altri negozi. Nella query di configurazione dei filtri mancava la condizione id_shop.

Cliccando su 'Cancella tutti i filtri' i prodotti visibili vengono reimpostati, ma tutti i badge dei contatori mostrano (0). La query di conteggio applica ancora i parametri rimossi.

Dopo aver applicato i filtri, premendo il pulsante indietro del browser non si torna allo stato senza filtri. L'URL viene aggiornato tramite pushState ma il gestore popstate non era implementato.

Selezionare un filtro colore via AJAX reimposta lo slider dell'intervallo di prezzo su min-max invece di mantenere l'intervallo selezionato dall'utente. I limiti di prezzo venivano ricalcolati dall'intero catalogo invece che dai risultati filtrati.

I prodotti con nomi contenenti & o " mostrano le entità HTML grezze nei suggerimenti di autocompletamento invece dei caratteri decodificati.

Sulle pagine categoria, il dropdown di ricerca viene tagliato dall'overflow:hidden del contenitore del listing prodotti.

I clienti che cercano per numero di riferimento del prodotto o codice a barre ottengono zero risultati. L'indice di ricerca include solo nome, descrizione e tag.

Quando anche ps_searchbar è attivo, compaiono due campi di ricerca e le richieste AJAX partono in doppio.

Su Android, premere il pulsante indietro mentre l'overlay di ricerca è aperto porta alla pagina precedente invece di chiudere l'overlay.

Dopo molte ricerche, il cookie che memorizza la cronologia supera il limite browser di 4 KB, causando lo scarto silenzioso di tutti i cookie. Questo interrompe la sessione.

Il dropdown del filtro per categoria nella pagina dei risultati mostra le categorie, ma selezionandone una vengono restituiti tutti i risultati invece di filtrare. PS 9.0 ha cambiato la query della struttura dell'albero delle categorie.

La query di ricerca impiega più di 3 secondi nei negozi con oltre 10K prodotti, perché esegue il join di 5 tabelle senza indicizzazione adeguata.

L'installazione del modulo fallisce su MySQL 5.7 con l'errore 'Cannot create FULLTEXT index'. La tabella di ricerca era stata creata con ROW_FORMAT=COMPRESSED, che non supporta FULLTEXT su MySQL 5.7.

L'autocompletamento mostra prodotti esauriti con la politica di magazzino 'rifiuta ordine'. I clienti cliccano solo per scoprire che non possono acquistare.

Quando la sessione del server scade, l'endpoint di ricerca AJAX restituisce un redirect 302 alla pagina di login come HTML. Il JS frontend prova a interpretarlo come JSON e genera 'Unexpected token

I prodotti aggiornati tramite l'API WebService di PrestaShop non attivano l'aggiornamento dell'indice di ricerca. Il modulo si aggancia a actionProductUpdate, che non viene chiamato dall'API.

Quando l'header diventa sticky allo scroll, il dropdown di autocompletamento viene renderizzato dietro di esso per un conflitto di z-index. Il dropdown aveva z-index: 100 mentre l'header sticky usa z-index: 1000.

Cercare 'über' o 'café' restituisce zero risultati anche se esistono prodotti con quei termini. L'indice FULLTEXT non abbina i caratteri accentati agli equivalenti non accentati.

Quando PrestaShop è configurato senza prefissi di lingua negli URL (una sola lingua per dominio), il tag hreflang x-default manca. Google Search Console mostra l'avviso 'missing hreflang x-default'.

Lo schema FAQ emette gli elementi Question/Answer all'interno dello schema Product invece che come schema FAQPage autonomo. Google richiede FAQPage come tipo di primo livello per l'idoneità ai risultati avanzati.

Il calcolatore del punteggio SEO divide per zero quando la descrizione del prodotto è vuota, mostrando NaN% invece di un punteggio basso.

L'import CSV per i redirect URL in blocco va in timeout quando il file contiene più di 500 righe. L'import viene eseguito in una singola richiesta HTTP.

Il modulo modifica il file .htaccess per le direttive robots, ma Nginx non legge i file .htaccess.

I prodotti in categorie annidate (ad es. Home > Clothing > T-Shirts) generano voci BreadcrumbList duplicate perché sia l'albero delle categorie sia la pagina prodotto emettono il proprio schema breadcrumb.

Il meta tag og:image è vuoto sulle pagine categoria, quindi le condivisioni sui social media non mostrano alcuna immagine di anteprima.

Creare un redirect da /old-product a /old-product/ causa un loop di redirect infinito perché il modulo li tratta come URL diversi mentre il web server li normalizza.

Il modulo si aggancia a displayHeader per impostare i meta title, ma PS 9.0 legge le meta informazioni prima nel ciclo di vita della richiesta. L'hook scatta troppo tardi e il meta title personalizzato viene ignorato.

I titoli delle pagine CMS contenenti e commerciali (&) o virgolette producono XML non valido nella sitemap. Gli URL non vengono codificati correttamente in XML.

La generazione della meta description si interrompe a 120 caratteri a causa di un limite hardcoded risalente all'era di PS 1.6. Google supporta fino a 320 caratteri per le meta description.

Lo schema JSON-LD Product restituisce il prezzo di listino base invece del prezzo scontato quando si applicano regole di prezzo specifiche. Google mostra il prezzo sbagliato nei risultati di ricerca.

Se un prodotto è attivo solo in inglese e tedesco ma non in polacco, il tag hreflang per il polacco viene comunque generato e punta a una pagina 404.

Quando la cache Smarty serve una pagina generata inizialmente con un parametro di sessione, l'URL canonico contiene ?PHPSESSID=xxx. Questo causa problemi di contenuti duplicati in Google Search Console.

Non viene mostrato alcun messaggio di errore quando la publishable key di Stripe proviene dalla modalità test mentre la secret key è live (o viceversa). Il pagamento fallisce semplicemente con un errore generico.

Il controller del webhook restituisce sempre HTTP 200, anche quando la creazione dell'ordine fallisce. Questo impedisce a Stripe di ritentare i webhook falliti.

Sui prodotti con combinazioni (taglia/colore), i pulsanti del checkout express non compaiono finché non viene selezionata una combinazione. Il prezzo è sconosciuto fino alla selezione, quindi il PaymentRequest non può essere inizializzato.

I prodotti con prezzo ad es. EUR 9.995 causano un errore Stripe perché l'importo in centesimi (999.5) non è un intero.

La dashboard di Stripe mostra l'avviso 'API version mismatch' perché il modulo usa una versione API meno recente (2023-10-16).

Dopo aver aggiunto un prodotto al carrello via AJAX, il mini-carrello si aggiorna ma il pulsante del checkout express non viene ri-renderizzato. L'inizializzazione del pulsante viene eseguita solo al caricamento della pagina.

L'email di conferma dell'ordine usa la lingua predefinita del negozio anziché la lingua selezionata dal cliente. Il contesto della lingua va perso durante l'elaborazione del webhook.

Quando un cliente ha una partita IVA nel proprio indirizzo, questa non viene inclusa nei metadati del PaymentIntent di Stripe. Ciò impedisce la generazione automatica delle fatture IVA in Stripe.

PHP 8.2 genera avvisi di deprecazione per le proprietà dinamiche. Nell'ObjectModel StripePayment mancava la dichiarazione della proprietà $secure_key.

Il webhook delle contestazioni tenta di impostare uno stato ordine personalizzato che non esiste sulle installazioni PS 8.1 nuove. Lo stato veniva creato durante l'installazione del modulo su PS 1.7, ma all'SQL di installazione mancava il formato della tabella degli stati ordine di PS 8.x.

Il passaggio dal pagamento con carta ad Apple Pay reimposta la selezione del corriere sull'opzione più economica. L'ID del corriere non veniva mantenuto in sessione tra i cambi di metodo di pagamento.

Quando la funzione Combine, Compress, Cache (CCC) di PrestaShop è attiva, il JS del modulo viene caricato prima dell'SDK di Stripe.

Link precompila l'indirizzo di spedizione dal profilo Stripe del cliente, che può differire dal suo indirizzo PrestaShop. Il calcolo delle spese di spedizione usa l'indirizzo Stripe, ma l'ordine salva l'indirizzo PrestaShop, causando una discrepanza nei costi di spedizione.

Quando il checkout ospite è abilitato e un checkout express viene completato, viene creato un account cliente senza hash della password. Il cliente non può più effettuare l'accesso in seguito.

Nelle configurazioni multi-negozio, il gestore del webhook usa il contesto del negozio predefinito anziché quello del negozio in cui è stato effettuato l'ordine. Di conseguenza l'ordine compare nell'elenco ordini del negozio sbagliato.

I Payment Intent abbandonati si accumulano nella dashboard di Stripe con lo stato 'requires_confirmation' e non vengono mai ripuliti.

Sui dispositivi più stretti di 375px (iPhone SE, Galaxy Fold), il contenitore del pulsante del checkout express trabocca e copre il prezzo del prodotto.

Quando un rimborso parziale viene elaborato dalla dashboard di Stripe, il gestore del webhook crea una voce di pagamento con importo negativo. Questo fa sì che il totale dell'ordine venga visualizzato in modo errato nel back office.

Il checkout express salta la pagina carrello standard, quindi le regole carrello che concedono la spedizione gratuita non vengono mai valutate. Il costo di spedizione nel foglio di pagamento mostra sempre il prezzo del corriere.

Chrome mobile blocca il popup 3DS di Stripe perché viene aperto durante un callback asincrono anziché in seguito a un gesto diretto dell'utente.

Race condition tra il gestore dell'URL di ritorno e il webhook: entrambi tentano di convalidare l'ordine. La seconda chiamata fallisce con l'eccezione 'Order already validated'.

Dopo aver completato il checkout PayPal Express, il redirect verso order-confirmation.php fallisce con una pagina vuota. Il problema si verifica perché il callback di PayPal imposta l'ID del carrello a null prima che il controller di conferma dell'ordine lo legga.

Ogni checkout express crea una nuova voce di indirizzo anche quando il cliente ha già registrato un indirizzo identico.

Quando la valuta del negozio è diversa dalla valuta predefinita dell'account Stripe, il foglio Google Pay mostra un codice valuta errato. L'importo era corretto, ma il simbolo ISO 4217 veniva preso dalle impostazioni dell'account Stripe anziché dalla valuta del carrello PrestaShop.

Safari 17.2 applica una gestione più rigida dei cookie SameSite durante i callback della Payment Request API. Il foglio di pagamento Stripe si apre ma non riceve il totale del carrello e mostra 'NaN' come importo.

Caricamento...
Torna su