Un TTFB sopra 600ms su WordPress è quasi sempre un problema di stack server, non di codice. Plugin di cache, CDN e ottimizzazioni frontend non servono a nulla se il server impiega un secondo solo per rispondere. Questo articolo spiega come portare il TTFB sotto i 100ms partendo dalla configurazione server.
Perché il TTFB è la metrica che conta davvero
Il TTFB — Time To First Byte — misura il tempo tra la richiesta HTTP e il primo byte di risposta dal server. È la base su cui si costruisce tutto il resto: FCP, LCP, Speed Index dipendono tutti da quando il server inizia a rispondere.
Google considera buono un TTFB sotto 800ms, ottimo sotto 200ms. Sui siti che gestisco direttamente su VPS Hetzner con Nginx ottengo TTFB tra 20ms e 62ms. La differenza rispetto a un hosting condiviso medio è 10-50x.
Il problema dell'hosting condiviso
La maggior parte dei siti WordPress italiani gira su hosting condiviso: Aruba, SiteGround, Hostinger. Il TTFB tipico su questi servizi è tra 400ms e 2s, dipende dal carico del server condiviso in quel momento. Non è un problema risolvibile con plugin — è strutturale.
La soluzione è un VPS dedicato con stack configurato correttamente. Il costo di un VPS Hetzner da 4 vCPU e 8GB RAM è circa 15-20€/mese — meno di molti piani hosting condivisi "premium".
Stack consigliato: Nginx + PHP-FPM + OPcache
La combinazione che uso su tutti i siti che gestisco è Nginx come web server, PHP-FPM per eseguire PHP e OPcache per tenere il bytecode PHP compilato in memoria. Ecco le configurazioni chiave.
OPcache — la differenza più grande
OPcache è spesso disabilitato o configurato con valori di default troppo conservativi. Con questi valori in php.ini il guadagno è immediato:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.enable_cli=0
Con OPcache configurato correttamente il TTFB su una pagina WordPress non in cache scende da 800-1200ms a 150-300ms. È il singolo intervento con il miglior rapporto effort/risultato.
Nginx FastCGI cache — TTFB sotto 20ms
Per le pagine statiche (homepage, archivi, post) la FastCGI cache di Nginx serve HTML precompilato senza passare da PHP. Il TTFB scende a 10-50ms. La configurazione base:
fastcgi_cache_path /tmp/nginx-cache levels=1:2
keys_zone=WORDPRESS:100m
inactive=60m
max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating
http_500 http_503;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
La cache va bypassata per utenti loggati, carrello WooCommerce e pagine di checkout. Un map Nginx gestisce questi casi:
map $http_cookie $skip_cache {
default 0;
"~*wordpress_logged_in" 1;
"~*woocommerce_items_in_cart" 1;
}
PHP-FPM pool ottimizzato
Il pool PHP-FPM di default usa dynamic con valori bassi. Per un sito con traffico medio:
pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 10s
pm.max_requests = 500
ondemand invece di dynamic riduce il consumo di RAM quando il sito è a riposo, mantenendo la capacità di scalare sotto carico.
Redis object cache
Per siti con query MySQL complesse o WooCommerce con molti prodotti, Redis come object cache riduce le query al database. Con il plugin Redis Object Cache e Redis installato sul server, le query ripetute vengono servite dalla RAM invece che dal disco:
# wp-config.php
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_CACHE', true);
Risultati misurabili
Su emporiomotori.it — marketplace auto usate con Laravel + WooCommerce e migliaia di prodotti — il TTFB misurato da server a server è 20ms. Su vaschelavaggio.com — WooCommerce con feed Google Merchant — 62ms. Su edstudio.dev — sito HTML statico — 36ms.
Questi numeri non sono ottenibili su hosting condiviso indipendentemente da quanti plugin di cache installi.
Da dove partire
Se il tuo WordPress ha TTFB sopra 500ms, il primo passo è misurarlo correttamente con curl -s -o /dev/null -w "%{time_starttransfer}" https://tuosito.it/ da un server esterno. Se il risultato è costantemente sopra 500ms, il problema è il server — non i plugin.
Il secondo passo è verificare se OPcache è attivo e configurato. Nella maggior parte dei casi questo da solo dimezza il TTFB senza toccare nient'altro.
Il tuo WordPress è lento sul server?
Mandami l'URL: misuro il TTFB reale, identifico il collo di bottiglia e ti dico cosa si può fare. Analisi gratuita, risposta entro 24 ore.
Analisi gratuita →