Un checkout WooCommerce lento, che resta in caricamento o che sembra bloccarsi dopo il clic su “Effettua ordine” può avere cause molto diverse.
Il problema può dipendere dal browser, da JavaScript, da una richiesta verso il server, da una query lenta, da un plugin, da una configurazione della cache oppure dal gateway di pagamento.
Il sintomo, però, è spesso lo stesso: il cliente aspetta, il checkout non termina e non è immediatamente chiaro se l’ordine sia stato creato, se il pagamento sia partito o se qualcosa si sia interrotto nel mezzo.
Per diagnosticare correttamente il problema conviene quindi evitare i tentativi casuali e ricostruire il percorso della richiesta.
Cosa succede quando un cliente completa il checkout?
Un checkout WooCommerce non è una singola operazione.
Quando il cliente conferma un ordine, WooCommerce deve elaborare diverse informazioni:
- contenuto del carrello;
- dati di fatturazione e spedizione;
- eventuali coupon;
- tasse;
- costi di spedizione;
- metodo di pagamento;
- stato della sessione;
- disponibilità dei prodotti;
- creazione o aggiornamento dell’ordine;
- comunicazione con il gateway di pagamento.
Con il Checkout Block, WooCommerce utilizza la Store API per gestire una parte importante di questo flusso.
L’endpoint di checkout riceve i dati finali del cliente, il metodo di pagamento e gli eventuali dati aggiuntivi necessari al gateway, quindi tenta di elaborare il pagamento e restituisce il risultato.
Questo significa che un checkout apparentemente “bloccato” può in realtà essersi fermato in punti molto diversi.
La prima domanda da porsi non dovrebbe quindi essere:
“Quale plugin sta causando il problema?”
ma:
“Quale richiesta non si sta completando?”
Prima distinzione: checkout lento o checkout realmente bloccato?
Prima di iniziare la diagnosi conviene distinguere due situazioni.
Checkout lento
Il cliente preme il pulsante di conferma e, dopo diversi secondi, l’ordine viene comunque completato.
In questo caso è probabile che una o più operazioni lato server stiano richiedendo troppo tempo.
Potrebbero essere coinvolti:
- query lente;
- chiamate HTTP esterne;
- gateway di pagamento;
- plugin che eseguono operazioni durante la creazione dell’ordine;
- invio di dati verso CRM, ERP o servizi esterni;
- processi legati a stock, email o automazioni.
Checkout bloccato
Il caricamento non termina oppure compare un errore.
In questo caso può esserci:
- una richiesta HTTP fallita;
- un errore PHP;
- un errore JavaScript;
- una risposta non valida dal gateway;
- un timeout;
- un problema con nonce o sessione;
- una cache configurata in modo errato;
- un conflitto tra estensioni.
La distinzione è importante perché cambia completamente il tipo di verifica da effettuare.
1. Riproduci il problema prima di modificare qualcosa
Il primo passo è cercare di riprodurre il comportamento.
Effettua un ordine di test utilizzando, quando possibile:
- lo stesso prodotto;
- lo stesso metodo di pagamento;
- lo stesso tipo di cliente;
- lo stesso dispositivo o browser;
- lo stesso metodo di spedizione.
Annota esattamente cosa accade.
Ad esempio:
- il pulsante diventa disabilitato?
- compare uno spinner?
- appare un messaggio di errore?
- la pagina cambia?
- il cliente viene rediretto?
- viene comunque creato un ordine?
- il pagamento compare nel gateway?
Questi dettagli aiutano a capire dove cercare.
2. Apri gli strumenti di sviluppo del browser
Uno degli strumenti più utili per diagnosticare un checkout WooCommerce è già incluso nel browser.
Apri i Developer Tools e vai nella sezione Network.
Poi completa nuovamente un ordine di test.
Osserva le richieste che vengono generate durante il checkout.
Con il Checkout Block puoi trovare richieste verso endpoint della Store API, tra cui quelle relative al checkout.
La Store API gestisce funzionalità frontend come carrello e checkout e gli endpoint di checkout richiedono un nonce valido oppure un Cart Token.
Il punto importante non è però memorizzare gli endpoint.
Devi osservare:
- quanto dura ogni richiesta;
- quale restituisce un errore;
- quale rimane pending;
- quale restituisce 4xx o 5xx;
- quale contiene un messaggio significativo nella risposta.
Una richiesta da 15 secondi non è normale solo perché termina con 200
Un errore HTTP è facile da individuare.
Una richiesta molto lenta può essere più insidiosa.
Se una chiamata restituisce 200 OK ma impiega 12, 20 o 30 secondi, il checkout tecnicamente funziona, ma il problema prestazionale è comunque presente.
In quel caso il passo successivo è capire cosa sta accadendo sul server durante quei secondi.
3. Controlla la Console JavaScript
La sezione Console dei Developer Tools può evidenziare errori che impediscono al checkout di proseguire correttamente.
Controlla soprattutto:
- eccezioni JavaScript;
- errori provenienti da plugin;
- richieste CORS bloccate;
- script del gateway;
- risorse non caricate;
- errori relativi a token o nonce.
Un errore JavaScript non significa automaticamente che hai trovato la causa.
Molte pagine possono contenere warning irrilevanti.
L’errore diventa interessante quando compare esattamente nel momento in cui viene eseguito il checkout oppure coinvolge direttamente il componente che gestisce pagamento o ordine.
4. Guarda cosa succede realmente all’ordine
Dopo ogni test, controlla WooCommerce → Ordini.
La presenza o meno di un ordine fornisce già un’indicazione importante.
Nessun ordine creato
Se non compare alcun ordine, il problema potrebbe essere avvenuto prima della creazione o persistenza dell’ordine.
Verifica quindi:
- richiesta di checkout;
- validazione campi;
- sessione;
- JavaScript;
- errori della Store API;
- errori PHP.
Ordine creato ma pagamento non avviato
In questo caso WooCommerce è riuscito ad arrivare più avanti nel flusso.
Potrebbe esserci un problema nella fase di inizializzazione del gateway o nei dati passati al metodo di pagamento.
Pagamento riuscito ma ordine non aggiornato
Questo è un caso diverso ancora.
Il gateway potrebbe aver ricevuto e concluso il pagamento, mentre WooCommerce non ha ricevuto oppure non ha elaborato correttamente il callback, webhook o risultato successivo.
In quel caso il checkout iniziale può non essere il vero problema.
La diagnosi deve spostarsi sulla comunicazione tra gateway e WooCommerce.
5. Controlla i log di WooCommerce
WooCommerce include un sistema di logging accessibile da:
WooCommerce → Stato → Log
Il logger viene utilizzato sia dal core sia da numerose estensioni e gateway per registrare errori, warning e informazioni utili alla diagnosi.
Cerca log associati a:
- gateway di pagamento;
- fatal error;
- Store API;
- webhook;
- plugin coinvolti nel checkout.
Non limitarti a cercare la parola error.
Ricostruisci la sequenza temporale.
Se l’ordine di test è stato effettuato alle 14:32, cerca cosa è successo nei secondi immediatamente precedenti e successivi.
6. Attiva il debug del gateway, se disponibile
Molti gateway WooCommerce includono una modalità debug.
Quando presente, può registrare informazioni relative a:
- richiesta inviata al provider;
- risposta ricevuta;
- ID della transazione;
- stato del pagamento;
- callback;
- webhook;
- eventuali errori API.
La documentazione di alcune estensioni WooCommerce raccomanda proprio di utilizzare il debug del gateway durante la diagnosi delle transazioni, salvando i risultati nei log di WooCommerce.
Il debug va però utilizzato con attenzione.
Su un sito in produzione evita di lasciare logging dettagliato attivo più del necessario e controlla che non vengano memorizzati dati sensibili.
7. Misura il tempo trascorso sul server
Se la richiesta di checkout arriva al server ma impiega troppo tempo, bisogna capire cosa sta rallentando PHP.
Qui gli strumenti del browser non sono più sufficienti.
Possono essere utili:
- profiler PHP;
- Application Performance Monitoring;
- Query Monitor in ambiente di test;
- log delle slow query;
- strumenti forniti dall’hosting.
L’obiettivo è individuare dove viene speso il tempo.
Ad esempio:
Checkout request: 9,8 s
Calcolo carrello: 0,3 s
Query database: 0,6 s
Gateway pagamento: 6,9 s
Hook plugin esterno: 1,4 s
Altro: 0,6 s
In un caso simile ottimizzare il database avrebbe un impatto minimo.
La lentezza è chiaramente concentrata nella comunicazione con il gateway.
8. Cerca query lente
Se il checkout diventa progressivamente più lento con l’aumentare di ordini, prodotti o utenti, il database merita particolare attenzione.
Controlla:
- query molto lunghe;
- query eseguite centinaia di volte;
- tabelle cresciute in modo anomalo;
- metadata utilizzati senza criterio;
- plugin che effettuano ricerche pesanti durante il checkout.
Il numero totale delle query, da solo, non basta.
Una pagina con 200 query rapide può essere più veloce di una pagina con 30 query di cui una impiega diversi secondi.
La domanda corretta è:
quali query contribuiscono realmente al tempo totale?
9. Controlla le chiamate HTTP esterne
Il checkout spesso comunica con sistemi esterni.
Ad esempio:
- gateway di pagamento;
- servizi antifrode;
- sistemi fiscali;
- CRM;
- ERP;
- gestionali;
- API di spedizione;
- sistemi di marketing.
Se una di queste chiamate è sincrona, il cliente deve aspettarne il completamento.
Un servizio esterno che normalmente risponde in 300 millisecondi ma improvvisamente impiega 8 secondi può trasformare un checkout veloce in un checkout apparentemente rotto.
Controlla quindi:
- URL chiamato;
- durata della richiesta;
- codice HTTP;
- timeout;
- eventuali retry.
10. Attenzione ai plugin che lavorano durante la creazione dell’ordine
Un plugin non deve necessariamente essere “rotto” per rallentare il checkout.
Può funzionare esattamente come previsto, ma eseguire operazioni costose nel momento sbagliato.
Un’estensione potrebbe, per esempio:
- inviare dati a un gestionale;
- generare un PDF;
- interrogare un servizio remoto;
- sincronizzare contatti;
- aggiornare molte righe di database;
- calcolare informazioni aggiuntive.
Se tutto questo avviene in modo sincrono durante la richiesta del cliente, il checkout ne risente direttamente.
Quando possibile, operazioni non necessarie per confermare immediatamente l’ordine dovrebbero essere spostate in processi asincroni.
11. Verifica la cache
Checkout e cache richiedono particolare attenzione.
WooCommerce raccomanda di escludere dal page caching almeno:
- Carrello;
- Checkout;
- Il mio account.
Sono pagine dinamiche che contengono informazioni specifiche della sessione e del cliente.
Controlla non solo il plugin di cache WordPress, ma anche:
- cache dell’hosting;
- reverse proxy;
- Varnish;
- CDN;
- edge caching;
- object cache.
Una configurazione errata può generare comportamenti difficili da riprodurre:
- carrelli errati;
- nonce non validi;
- checkout che funziona per alcuni utenti e non per altri;
- dati di sessione incoerenti.
Non disattivare tutta la cache come soluzione definitiva
Disabilitare temporaneamente la cache è utile per verificare un’ipotesi.
Non dovrebbe diventare automaticamente la soluzione.
Se il checkout funziona solo con tutta la cache disabilitata, bisogna identificare quale livello di cache sta interferendo e configurarlo correttamente.
12. Verifica eventuali ottimizzazioni JavaScript
Minificazione, concatenazione, defer e delay JavaScript possono interferire con il checkout.
Controlla soprattutto sistemi che:
- ritardano gli script;
- cambiano l’ordine di caricamento;
- combinano file JavaScript;
- modificano inline script;
- ritardano script di terze parti.
La documentazione WooCommerce raccomanda cautela anche con alcune ottimizzazioni JavaScript nelle configurazioni di caching.
Per la diagnosi, disattiva temporaneamente queste ottimizzazioni e ripeti il test.
Se il problema scompare, riattivale progressivamente fino a individuare quella responsabile.
13. Confronta Checkout Block e checkout classico
È importante sapere quale tipo di checkout sta utilizzando il sito.
Il Checkout Block utilizza l’architettura basata sulla Store API.
Il checkout classico ha invece un flusso frontend differente.
Questo significa che un plugin compatibile con il checkout tradizionale non è automaticamente compatibile con quello a blocchi.
Se il problema è comparso dopo la migrazione al Checkout Block, verifica in particolare:
- gateway;
- plugin che aggiungono campi;
- plugin di spedizione;
- personalizzazioni PHP;
- script JavaScript;
- estensioni che modificano il processo d’ordine.
14. Controlla gli aggiornamenti recenti
Quando un checkout smette improvvisamente di funzionare, ricostruisci le modifiche delle ultime ore o degli ultimi giorni.
Controlla:
- aggiornamento WooCommerce;
- aggiornamento WordPress;
- aggiornamento gateway;
- aggiornamento tema;
- modifica PHP;
- attivazione plugin;
- cambio configurazione cache;
- cambio CDN;
- cambio versione PHP.
WooCommerce continua inoltre a modificare e ottimizzare internamente il flusso di checkout.
Ad esempio WooCommerce 10.9 ha introdotto interventi specifici per ridurre lavoro non necessario nel checkout e pressione sul database, modificando anche il momento in cui vengono persistiti alcuni draft order.
Questo è un ulteriore motivo per evitare diagnosi basate su assunzioni relative a versioni molto vecchie di WooCommerce.
15. Fai un conflict test, ma solo dopo aver raccolto informazioni
Il classico consiglio di “disattivare tutti i plugin” può essere utile, ma dovrebbe essere uno dei passaggi finali della diagnosi, non il primo.
Prima raccogli:
- errore;
- richiesta problematica;
- log;
- ordine coinvolto;
- tempi;
- eventuale risposta del gateway.
Poi, possibilmente in staging:
- passa temporaneamente a un tema standard;
- mantieni WooCommerce;
- mantieni il gateway necessario;
- disattiva le altre estensioni;
- ripeti il test;
- riattiva i plugin progressivamente.
In questo modo il conflict test conferma un’ipotesi invece di sostituire l’analisi.
Un esempio pratico
Immaginiamo questo scenario.
Il cliente preme Effettua ordine.
Il checkout resta in caricamento per circa 18 secondi.
L’ordine viene poi creato correttamente.
Dal browser vediamo:
POST /wc/store/v1/checkout
Tempo totale: 17,8 s
Status: 200
Il problema non è quindi una richiesta fallita.
Nei log del gateway troviamo:
Payment request sent
Gateway response received after 15.4 seconds
Payment successful
A questo punto possiamo escludere molte possibili cause:
- il browser sta inviando correttamente la richiesta;
- WooCommerce riceve il checkout;
- l’ordine viene creato;
- il pagamento riesce;
- il collo di bottiglia è la risposta del gateway.
Disattivare dieci plugin in questo caso sarebbe probabilmente inutile.
La diagnosi ha già individuato il punto critico.
Un secondo esempio: checkout che fallisce immediatamente
Consideriamo invece:
POST /wc/store/v1/checkout
Status: 403
Tempo: 180 ms
La richiesta non è lenta.
Viene rifiutata.
Se la risposta indica un problema relativo a nonce, Cart Token o sessione, bisogna investigare soprattutto:
- cache;
- sessione;
- cookie;
- CDN;
- eventuali script personalizzati.
Gli endpoint di checkout della Store API richiedono infatti un Nonce Token oppure un Cart Token valido.
Ancora una volta, il sintomo percepito dal cliente è “checkout bloccato”, ma la causa è completamente diversa.
Una checklist pratica di diagnosi
Quando un checkout WooCommerce è lento o si blocca, puoi seguire questo ordine:
- riproduci il problema;
- controlla Network nel browser;
- controlla Console;
- verifica se l’ordine viene creato;
- identifica la richiesta lenta o fallita;
- controlla i log WooCommerce;
- abilita il debug del gateway, se disponibile;
- misura query e tempi PHP;
- controlla chiamate HTTP esterne;
- verifica cache e sessione;
- verifica ottimizzazioni JavaScript;
- ricostruisci gli ultimi aggiornamenti;
- esegui un conflict test in staging.
L’ordine è importante.
Ogni passaggio dovrebbe restringere il campo delle possibili cause.
Cosa non fare
Ci sono alcuni interventi che spesso complicano la diagnosi.
Aggiornare tutto contemporaneamente
Potrebbe risolvere il problema, ma non saprai cosa lo ha causato.
Peggio ancora, potresti introdurne uno nuovo.
Disattivare plugin casualmente sul sito live
Oltre a creare possibili effetti collaterali, rischia di modificare lo scenario che stai cercando di analizzare.
Aumentare timeout e memoria senza verificare
Un timeout maggiore può semplicemente trasformare un errore dopo 30 secondi in un errore dopo 60.
Prima bisogna capire cosa sta impiegando tanto tempo.
Dare automaticamente la colpa al gateway
Il gateway è solo uno dei componenti del checkout.
Una transazione può non partire perché WooCommerce non è mai arrivato al punto di chiamarlo.
Oppure il gateway può rispondere correttamente mentre il problema avviene dopo.
Prestazioni del checkout e conversioni
Un checkout tecnicamente funzionante ma lento rimane un problema.
Il cliente non sa cosa sta succedendo dietro le quinte.
Vede soltanto un pulsante, uno spinner e nessuna conferma.
Può quindi:
- cliccare più volte;
- ricaricare la pagina;
- chiudere la scheda;
- riprovare il pagamento;
- contattare l’assistenza.
Ne derivano problemi che vanno oltre le prestazioni:
- ordini duplicati;
- transazioni duplicate;
- carrelli abbandonati;
- richieste al supporto;
- perdita di fiducia.
Per questo il checkout dovrebbe essere trattato come una parte critica dell’infrastruttura WooCommerce e non semplicemente come una pagina del sito.
Il punto non è rendere il checkout “più veloce”: è capire cosa lo rallenta
Un checkout può essere lento per una query SQL.
Oppure per una API esterna.
Oppure per JavaScript.
Oppure per il gateway.
Oppure per una cache configurata male.
Applicare ottimizzazioni generiche senza sapere quale di questi componenti è coinvolto può produrre pochi risultati e rendere la diagnosi ancora più difficile.
Il metodo più efficace è partire dal comportamento osservabile, seguire la richiesta e identificare il punto esatto in cui il tempo aumenta o il flusso si interrompe.
Solo allora ha senso intervenire.
È lo stesso principio che utilizziamo in WPClinic Lab:
prima misurare, poi diagnosticare, infine correggere.

