Un WooCommerce lento ti costa vendite e posizioni su Google. In questa guida vediamo come velocizzare WooCommerce in modo sicuro, senza rompere checkout e carrello, migliorando LCP, INP e la stabilità della pagina. Segui i passaggi nell’ordine e usa la checklist finale per non introdurre regressioni.
Il riassunto, prima di scendere nel dettaglio:
- Misura prima e dopo con PageSpeed Insights e WebPageTest.
- Non mettere mai in cache carrello, checkout, area utente e le chiamate AJAX sensibili.
- Attiva page cache + object cache (Redis) e il preload.
- Ottimizza le immagini in WebP ed escludi l’immagine LCP dal lazy-load.
- Riduci CSS e JS (critical CSS, defer/delay) e togli i plugin pesanti.
- Usa una CDN per gli statici e attiva HTTP/2 o HTTP/3.
La regola che tengo sempre a mente: la velocità non deve mai andare a scapito del checkout. Un sito che carica in mezzo secondo ma sbaglia i totali del carrello non ti serve a niente.
Prerequisiti e backup
Lavora possibilmente su staging, aggiorna PHP (8.3), attiva OPcache e fai un backup completo di file e database. Prendi un baseline di performance su tre misurazioni e fanne la media: un singolo test dice poco.
1) Misurare: LCP, INP, CLS prima di toccare il sito
Senza una metrica di partenza non puoi sapere se stai davvero migliorando o se ti stai raccontando una storia. Concentrati su:
- LCP (Largest Contentful Paint): di solito l’immagine hero o il titolo del prodotto.
- INP (Interaction to Next Paint): quanto il sito risponde ai click.
- CLS (Cumulative Layout Shift): quanto il layout resta stabile mentre carica.
Annota i valori su Home, una categoria con i filtri, una scheda prodotto e soprattutto il checkout.
2) Page cache: regole sicure per l’e-commerce
La cache di pagina è la leva più potente per velocizzare WordPress e WooCommerce, ma va configurata con esclusioni rigorose, altrimenti rompe il checkout.
Esclusioni essenziali
- Pagine:
/carrello/,/checkout/,/mio-account/(e le loro varianti lingua). - Query ed endpoint AJAX sensibili:
wc-ajax=*. - Cookie:
woocommerce_items_in_cart,woocommerce_cart_hash,wp_woocommerce_session_*.
Attiva il preload della cache per le pagine pubbliche (home, categorie, prodotti) e imposta regole di purge alla pubblicazione o modifica dei prodotti.
3) Object cache con Redis: database più veloce
Redis abbassa i tempi di risposta del database tenendo query e oggetti in RAM. Il risultato tipico: TTFB più basso, categorie e schede prodotto che si aprono prima, INP migliore nelle pagine dinamiche. Attiva l’object cache persistente e verifica dal backend che lo store risulti connesso (una cosa che spesso si dà per scontata e invece non è agganciata).
4) Immagini: LCP al centro, WebP per tutto il resto
- Converti le immagini in WebP (o AVIF dove supportato) e definisci le dimensioni responsive (srcset).
- Escludi dal lazy-load l’elemento LCP (di solito l’immagine hero della pagina o del prodotto).
- Applica il preload all’immagine LCP (
<link rel="preload" as="image">) quando ha senso. - Usa il lazy-load per le immagini sotto la piega.
5) CSS e JS: meno blocchi, più velocità
- Critical CSS inline per l’above-the-fold, il resto differito.
- Defer/Delay per il JS non essenziale, caricato nel footer dove possibile.
- Rimuovi CSS e JS non usati da temi e plugin che non servono nelle pagine pubbliche.
- Evita caroselli, popup e tracker inutili nelle pagine prodotto e checkout: pesano tantissimo sull’INP.
6) Plugin e tema: audit del bloat
Ogni plugin aggiunge codice. Tieni solo quello che serve davvero. Disattiva le funzioni del tema che caricano script globali quando li usi solo in una sezione. Preferisci plugin leggeri e modulari ed evita i page builder invasivi sulle pagine di checkout. Non installare roba a caso solo perché “magari serve”.
7) CDN e ottimizzazione di rete
Distribuisci gli asset statici (immagini, CSS, JS, font) tramite CDN con HTTP/2 o HTTP/3. Imposta un cache-control adeguato e attiva la minificazione a livello edge se disponibile. Dove puoi, self-hosta i font invece di servirli da terze parti: un giro di richieste in meno.
8) Database, cron e ricerca
- Pulisci i transient scaduti, le revisioni e le tabelle orfane.
- Sposta il WP-Cron sul cron reale del server e limitalo sui siti molto trafficati.
- Sugli store con tanti prodotti, valuta una ricerca indicizzata e filtri lato server, per non far annaspare la pagina categoria.
9) Test del checkout: come evitare rogne
Dopo ogni modifica importante, fai un test end-to-end vero e proprio:
- Aggiungi prodotti al carrello, cambia le quantità, rimuovi.
- Compila il checkout con spedizione e pagamento reali o in sandbox.
- Verifica l’email d’ordine e l’aggiornamento dello stock.
- Controlla i log degli errori PHP e la console del browser.
10) Monitoraggio continuo
Imposta un monitor di uptime, avvisi sugli errori 500/503, un report settimanale dei Core Web Vitals e una procedura di rollback chiara. La performance è un processo, non un intervento che fai una volta e te ne dimentichi.
Checklist rapida
- Cache di pagina attiva, con le esclusioni giuste per carrello, checkout e area utente.
- Object cache Redis attiva e connessa.
- Immagine LCP ottimizzata, preloadata e non in lazy.
- Critical CSS + defer/delay del JS.
- CDN per gli statici, font self-hosted.
- Audit dei plugin e rimozione del bloat.
- Checkout testato dopo ogni modifica.
FAQ
Perché non devo mettere in cache il checkout?
Perché contiene dati sensibili e dinamici. La cache può mostrare le informazioni di un altro utente o impedire l’aggiornamento corretto dei totali. È esattamente il tipo di bug che non vuoi su uno shop.
Redis è sempre utile?
Su store medi e grandi quasi sempre sì: abbassa i tempi delle query e alleggerisce il database. Su micro-siti a basso traffico il beneficio si sente meno.
WebP basta per migliorare l’LCP?
Aiuta, ma l’LCP dipende anche da dimensione e posizione dell’elemento, dal critical CSS, dal TTFB e dalla priorità di caricamento. Non è una bacchetta magica.
Posso usare più plugin di cache insieme?
No. Rischi conflitti e doppie ottimizzazioni che si pestano i piedi. Usa un solo sistema di cache, configurato bene.
Quanto posso migliorare?
Dipende da hosting, tema, numero di plugin e media. I miglioramenti tipici vanno da qualche secondo a centinaia di millisecondi su LCP e INP.
Come mostrare in WooCommerce l’importo mancante per avere la spedizione gratuita
Rimozione malware WordPress: protocollo di emergenza (checklist operativa)
Domande frequenti
Perché non devo mettere in cache il checkout?
Perché contiene dati sensibili e dinamici. La cache può mostrare le informazioni di un altro utente o impedire l'aggiornamento corretto dei totali. È esattamente il tipo di bug che non vuoi su uno shop.
Redis è sempre utile?
Su store medi e grandi quasi sempre sì: abbassa i tempi delle query e alleggerisce il database. Su micro-siti a basso traffico il beneficio si sente meno.
WebP basta per migliorare l'LCP?
Aiuta, ma l'LCP dipende anche da dimensione e posizione dell'elemento, dal critical CSS, dal TTFB e dalla priorità di caricamento. Non è una bacchetta magica.
Posso usare più plugin di cache insieme?
No. Rischi conflitti e doppie ottimizzazioni che si pestano i piedi. Usa un solo sistema di cache, configurato bene.
Quanto posso migliorare?
Dipende da hosting, tema, numero di plugin e media. I miglioramenti tipici vanno da qualche secondo a centinaia di millisecondi su LCP e INP.rnrnCome mostrare in WooCommerce l'importo mancante per avere la spedizione gratuitarnrnRimozione malware WordPress: protocollo di emergenza (checklist operativa)