{"id":17058,"date":"2026-01-27T08:37:12","date_gmt":"2026-01-27T07:37:12","guid":{"rendered":"https:\/\/webhosting.de\/wordpress-browser-caching-fehler-serverboost\/"},"modified":"2026-01-27T08:37:12","modified_gmt":"2026-01-27T07:37:12","slug":"errore-di-caching-del-browser-wordpress-serverboost","status":"publish","type":"post","link":"https:\/\/webhosting.de\/it\/wordpress-browser-caching-fehler-serverboost\/","title":{"rendered":"WordPress e la cache del browser - spesso configurati in modo errato"},"content":{"rendered":"<p>Il caching del browser di WordPress spesso causa risposte lente, perch\u00e9 gli operatori devono <strong>Intestazione della cache<\/strong> impostati in modo errato o non controllati affatto. Vi mostrer\u00f2 come le tipiche configurazioni errate restituiscano 200 invece di 304, perch\u00e9 i TTL sono mancanti e come sia possibile impostare correttamente il caching in WordPress. <strong>Prestazioni<\/strong> assetto.<\/p>\n\n<h2>Punti centrali<\/h2>\n\n<ul>\n  <li><strong>TTL lungo<\/strong> per le risorse statiche evita richieste inutili.<\/li>\n  <li><strong>Separazione netta<\/strong> di percorsi statici e dinamici protegge l'amministrazione e il login.<\/li>\n  <li><strong>Un sistema<\/strong> non mescolare plug-in di caching concorrenti.<\/li>\n  <li><strong>Controllare le intestazioni<\/strong> con DevTools e lo stato 304.<\/li>\n  <li><strong>Caching del server<\/strong> e la cache del browser.<\/li>\n<\/ul>\n\n<h2>Come funziona davvero la cache del browser in WordPress<\/h2>\n\n<p>Il browser memorizza localmente i file statici, evitando cos\u00ec di ricaricarli. <strong>Richieste HTTP<\/strong>. Alla seconda visita, legge immagini, CSS e JS dalla memoria locale e chiede al server solo le modifiche. In questo modo si riduce la quantit\u00e0 di dati, i tempi di risposta si riducono e lo scorrimento risulta immediatamente pi\u00f9 reattivo. <strong>liquido<\/strong> on. Se non ci sono istruzioni chiare, il browser viene ricaricato completamente ogni volta e il tempo di interattivit\u00e0 ne risente. Le intestazioni di controllo della cache impostate correttamente consentono di attivare le convalide 304, di ridurre la larghezza di banda e di ridurre il carico su PHP e sul database. Lo uso costantemente perch\u00e9 gli utenti ricorrenti, in particolare, traggono i maggiori vantaggi dalla cache persistente.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-caching-problem-8392.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Perch\u00e9 la configurazione spesso fallisce<\/h2>\n\n<p>Molti siti consegnano file statici con una lunghezza ridicola. <strong>et\u00e0 massima<\/strong>-valori. Alcuni plugin sovrascrivono gli .htaccess degli altri e impostano direttive contraddittorie. Spesso il sito contrassegna i percorsi di amministrazione in modo errato, facendo s\u00ec che il contenuto di \/wp-admin o \/wp-login.php finisca involontariamente nella cache e che le sessioni si scontrino. Verifico anche la differenza tra la prima chiamata e quella ricorrente, perch\u00e9 questo spiega chiaramente le esperienze reali degli utenti; il confronto si inserisce in questo schema <a href=\"https:\/\/webhosting.de\/it\/wordpress-caching-confronto-prima-chiamata-velocita-lenta\/\">Prima chiamata vs. chiamante di ritorno<\/a>. Se si utilizzano ancora le stringhe di query senza il versioning, si creeranno vecchi file in memoria e ci si chieder\u00e0 se <strong>obsoleto<\/strong> Stili.<\/p>\n\n<h2>Impostare correttamente le intestazioni della cache di WP<\/h2>\n\n<p>Controllo la durata con <strong>Controllo della cache<\/strong> e Expires, ed evito ETag ambigui in ambienti multi-server. Per Apache, imposto Expires a valori significativi e definisco \u201epublic, max-age\u201c per le risorse. Per Nginx, aggiungo le direttive add_header e mi assicuro che l'HTML abbia tempi brevi o \u201eno-store\u201c se il contenuto \u00e8 personalizzato. Disattivo anche le intestazioni ETag se i bilanciatori di carico o i proxy non generano questi valori in modo coerente. In questo modo, impongo un comportamento chiaro nel browser ed evito di <strong>Riconvalide<\/strong> ad ogni clic.<\/p>\n\n<pre><code>ScadenzaAttiva On\n  ExpiresByType image\/jpeg \"accesso pi\u00f9 1 anno\".\n  ExpiresByType image\/png \"accesso pi\u00f9 1 anno\".\n  ExpiresByType text\/css \"accesso pi\u00f9 1 mese\n  ExpiresByType application\/javascript \"accesso pi\u00f9 1 mese\".\n\n\n\n  Header set Cache-Control \"public, max-age=31536000\" \"expr=%{CONTENT_TYPE} =~ m#^(immagine\/|font\/|applicazione\/javascript)#\"\n  Header set Cache-Control \"no-cache, no-store, must-revalidate\" \"expr=%{REQUEST_URI} =~ m#(wp-admin|wp-login.php)#\"\n  Intestazione non impostata ETag<\/code><\/pre>\n\n<pre><code># Nginx\nposizione ~* .(jpg|jpeg|png|gif|ico|webp|avif|css|js|woff2?)$ {\n    add_header Cache-Control \"public, max-age=31536000\";\n}\nlocation ~* \/(wp-admin|wp-login.php)$ {\n    add_header Cache-Control \"no-store\";\n}<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress_caching_meeting_5823.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Le direttive di controllo della cache estese nella vita quotidiana<\/h2>\n\n<p>Oltre a \u201emax-age\u201c e \u201eno-store\u201c, le direttive moderne garantiscono una notevole stabilit\u00e0. \u201eimmutable\u201c segnala al browser che un file non cambier\u00e0 finch\u00e9 il nome del file rimarr\u00e0 lo stesso, ideale per le risorse con versioni. \u201estale-while-revalidate\u201c permette di consegnare una copia scaduta mentre viene aggiornata in background. \u201estale-if-error\u201c mantiene una copia pronta se l'origine restituisce brevemente degli errori. \u201es-maxage\u201c \u00e8 rivolto ai proxy\/CDN e pu\u00f2 avere valori diversi da \u201emax-age\u201c. Inoltre, \u00e8 importante: \u201epublic\u201c consente la cache nei proxy condivisi; \u201eprivate\u201c \u00e8 limitato al browser. \u201eno-cache\u201c non significa \u201enon memorizzare nella cache\u201c, ma \u201ela memorizzazione nella cache \u00e8 consentita, ma va riconvalidata prima dell'uso\u201c - una differenza fondamentale rispetto a \u201eno-store\u201c.<\/p>\n\n<pre><code># Esempio di Apache 2.4 (cache delle risorse ancora pi\u00f9 robusta)\n\n  Header set Cache-Control \"public, max-age=31536000, immutable, stale-while-revalidate=86400, stale-if-error=259200\" \"expr=%{REQUEST_URI} =~ m#.(css|js|woff2?|png|jpe?g|webp|avif)$#\"\n  Header set Cache-Control \"no-cache, must-revalidate\" \"expr=%{CONTENT_TYPE} =~ m#^text\/html#\"<\/code><\/pre>\n\n<pre><code># Esempio Nginx (reindirizzamento 304\/Include)\nlocation ~* .(css|js|woff2?|png|jpe?g|webp|avif)$ {\n    add_header Cache-Control \"public, max-age=31536000, immutable, stale-while-revalidate=86400, stale-if-error=259200\" sempre;\n}\nposizione ~* .html$ {\n    add_header Cache-Control \"no-cache, must-revalidate\" sempre;\n}<\/code><\/pre>\n\n<h2>Durata della cache consigliata per tipo di file<\/h2>\n\n<p>Scelgo gli orari in base alla frequenza dei cambiamenti, non all'abitudine, perch\u00e9 <strong>Attivit\u00e0<\/strong> invecchiano in modo molto diverso. Le immagini, i loghi e le icone di solito rimangono aggiornati per molto tempo, mentre CSS\/JS ricevono iterazioni pi\u00f9 frequenti. I font web cambiano raramente, ma richiedono intestazioni CORS coerenti. L'HTML spesso funge da contenitore per contenuti dinamici e pu\u00f2 quindi essere breve o solo riconvalidato. Le API devono essere dotate di regole chiaramente definite, in modo che i clienti possano lavorare correttamente con <strong>JSON<\/strong> evitare.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Tipo di file<\/th>\n      <th>Raccomandazione cache-control<\/th>\n      <th>Suggerimento<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Immagini (jpg\/png\/webp\/avif\/svg)<\/td>\n      <td>pubblico, et\u00e0 massima=31536000<\/td>\n      <td>Utilizzare la cache annuale con il versioning dei file<\/td>\n    <\/tr>\n    <tr>\n      <td>CSS\/JS<\/td>\n      <td>pubblico, max-age=2592000<\/td>\n      <td>Aggiungere la versione al nome del file per gli aggiornamenti<\/td>\n    <\/tr>\n    <tr>\n      <td>Caratteri (woff\/woff2)<\/td>\n      <td>pubblico, et\u00e0 massima=31536000<\/td>\n      <td>Impostare correttamente Access-Control-Allow-Origin<\/td>\n    <\/tr>\n    <tr>\n      <td>HTML (pagine)<\/td>\n      <td>no-cache, must-revalidate o breve max-age<\/td>\n      <td>Attenzione ai contenuti dinamici<\/td>\n    <\/tr>\n    <tr>\n      <td>API REST (json)<\/td>\n      <td>private, max-age=0, must-revalidate<\/td>\n      <td>Differenziare in base all'endpoint<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Evitare conflitti con i plugin<\/h2>\n\n<p>Utilizzo al massimo <strong>Plugin di caching<\/strong> e verificare se l'hosting specifica gi\u00e0 delle regole a livello di server. Combinazioni come W3 Total Cache e WP Super Cache spesso creano direttive duplicate che si annullano a vicenda. WP Rocket offre una configurazione rapida, ma necessita di chiare esclusioni per i percorsi dinamici e l'e-commerce. In ogni caso, controllo l'.htaccess generato dopo il salvataggio per riconoscere le intestazioni illogiche. Poi verifico che le pagine critiche, come quelle di checkout, login e dashboard personalizzate siano corrette. <strong>Bypassare<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-browser-caching-fehler-9274.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Caching e cookie: utenti connessi, WooCommerce, sessioni<\/h2>\n\n<p>Il codice HTML degli utenti connessi non deve essere memorizzato nella cache pubblica. WordPress imposta cookie come <code>wordpress_logged_in<\/code>, WooCommerce integrato <code>woocommerce_items_in_cart<\/code>, <code>wp_woocommerce_session_<\/code> e altri. Invece dell'eccesso di <em>Variabile: Cookie<\/em> Per tali richieste escludo completamente le cache. In questo modo i processi di pagamento sono stabili e le aree personalizzate sono corrette. Utilizzo anche regole lato server che impostano intestazioni pi\u00f9 restrittive quando vengono riconosciuti i cookie.<\/p>\n\n<pre><code># Apache: Riconoscimento dei cookie e impostazione delle intestazioni di bypass\n\n  SetEnvIfNoCase Cookie \"wordpress_logged_in_|woocommerce_items_in_cart|wp_woocommerce_session\" has_session\n  Header set Cache-Control \"private, no-store\" env=has_session<\/code><\/pre>\n\n<pre><code># Nginx: bypass basato sui cookie\nse ($http_cookie ~* \"(wordpress_logged_in|woocommerce_items_in_cart|wp_woocommerce_session)\") {\n    add_header Cache-Control \"private, no-store\" sempre;\n}<\/code><\/pre>\n\n<p>Molti plugin di caching offrono caselle di controllo per questo (WooCommerce\/Cart\/Exclude checkout). Importante: Nonces (<code>_wpnonce<\/code>) nei moduli e l'API Heartbeat generano modifiche frequenti. Mi assicuro che l'HTML del frontend con i nonces non sia permanentemente memorizzato nella cache o funzioni tramite \u201eno-cache, must-revalidate\u201c.<\/p>\n\n<h2>Trattamento mirato dell'HTML: personalizzato vs. generale<\/h2>\n\n<p>Non tutte le pagine sono uguali. Gli articoli, le landing page e le pagine legali possono spesso essere memorizzate nella cache con un breve TTL o una riconvalida. Archivi, pagine di ricerca, dashboard, aree account e checkout rimangono dinamici. Se si tratta di cache di pagine, mi attengo alla seguente prassi: solo cache di HTML pubblico senza cookie, altrimenti \u201eprivate\u201c o \u201eno-store\u201c. Se si sta testando il micro-caching (ad esempio 30-60 secondi per pagine molto frequentate e non personalizzate), \u00e8 necessario definire esclusioni rigorose per i parametri di query e le sessioni. WordPress ha con <code>DONOTCACHEPAGE<\/code> una costante che i modelli possono impostare su pagine complesse; io la uso costantemente per evitare errori.<\/p>\n\n<h2>Combinare la cache lato server in modo sensato<\/h2>\n\n<p>La cache del browser termina nel client, ma alleggerisco anche il server con la cache delle pagine, degli oggetti e degli opcode per il vero e proprio <strong>Picchi di carico<\/strong>. La cache della pagina fornisce HTML statico prima ancora che PHP inizi. Redis o Memcached riducono le interrogazioni al database per le richieste ripetute e riducono sensibilmente il TTFB. OPcache fornisce frammenti di bytecode PHP precompilati, riducendo cos\u00ec il tempo di esecuzione. Alla fine, ci\u00f2 che conta \u00e8 una connessione pulita tra la cache del server e quella del browser, in modo che la seconda visita sia pi\u00f9 o meno un successo. <strong>istantaneo<\/strong> funziona.<\/p>\n\n<h2>Integrazione CDN senza sorprese<\/h2>\n\n<p>I CDN utilizzano la propria logica TTL e rispondono a \u201es-maxage\u201c. Pertanto, faccio una chiara distinzione: \u201emax-age\u201c per i browser, \u201es-maxage\u201c per Edge. Se le distribuzioni sono in sospeso, attivo una pulizia mirata invece di distruggere globalmente \u201eCache Everything\u201c. Importante: su Edge si memorizza nella cache solo l'HTML se non sono coinvolti i cookie. In caso contrario, si creano stati errati perch\u00e9 la cache di Edge condivide risposte personalizzate. Per gli asset, imposto TTL lunghi e mi affido al versioning dei nomi dei file. Le CDN possono ignorare le stringhe di query: un altro motivo per mantenere le versioni nel nome del file. La normalizzazione delle intestazioni (nessun valore \u201eVary\u201c superfluo, \u201eContent-Type\u201c coerente) evita di gonfiare le chiavi della cache.<\/p>\n\n<h2>Passo dopo passo: installazione pulita<\/h2>\n\n<p>Comincio con un plugin e attivo la cache del browser per CSS, JS, immagini e font prima di attivare il programma di gestione dei file. <strong>.htaccess<\/strong> finalizzare. Imposto poi un'et\u00e0 massima elevata per le risorse statiche e fornisco HTML con tempi brevi o regole no-cache. Disattivo ETags se sono coinvolti pi\u00f9 server e mi affido a Last-Modified pi\u00f9 304. Attivo quindi un preload in modo che le pagine importanti siano immediatamente disponibili come copie statiche. Infine, verifico i percorsi del negozio, del login e dell'amministrazione, in modo che nessun contenuto privato sia memorizzato nel file <strong>memoria temporanea<\/strong> terra.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-caching-office-2974.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Diagnostica pratica con CLI e controlli di intestazione<\/h2>\n\n<p>I DevTools sono obbligatori, ma io approfondisco i test con la CLI. A <code>curl -I<\/code> mostra l'intestazione senza download; con <code>-H<\/code> Simulo le condizioni. Ad esempio, verifico se le riconvalide restituiscono davvero 304, se \u201eAge\u201c aumenta da un proxy\/CDN e se i cookie disattivano la cache.<\/p>\n\n<pre><code># Mostra intestazione\ncurl -I https:\/\/example.com\/style.css\n\nSimulare la riconvalida dell\"# (If-Modified-Since)\ncurl -I -H \"If-Modified-Since: Tue, 10 Jan 2023 10:00:00 GMT\" https:\/\/example.com\/style.css\n\nTest # con cookie (dovrebbe forzare il bypass)\ncurl -I -H \"Cookie: wordpress_logged_in_=1\" https:\/\/example.com\/<\/code><\/pre>\n\n<p>Mi assicuro che le risorse abbiano un lungo valore di \u201econtrollo della cache\u201c, idealmente \u201eimmutabile\u201c. L'HTML dovrebbe avere \u201eno-cache\u201c o un TTL breve. Se ottengo ancora 200 invece di 304, spesso ci sono dei reindirizzamenti che invalidano ETags\/Last-Modified. Inoltre, \u201eadd_header\u201c in Nginx si applica solo alle risposte 200 per impostazione predefinita - con \u201ealways\u201c imposto anche le intestazioni per 304 e 301\/302.<\/p>\n\n<h2>Test e validazione delle intestazioni<\/h2>\n\n<p>Apro DevTools, ricarico la pagina una volta, cancello la cache e ricarico per ottenere 304 contro 304. <strong>200<\/strong> per osservare. Nel pannello di rete, controllo il controllo della cache, l'et\u00e0, ETag\/load-modified e le dimensioni delle risposte. Se ci sono ancora visite dirette invece di riconvalide, controllo se ci sono conflitti con i reindirizzamenti, i cookie o le stringhe di query. Per i casi pi\u00f9 complicati, mi aiuta questo articolo sulle insidie delle intestazioni: <a href=\"https:\/\/webhosting.de\/it\/http-cache-headers-sabotare-caching-cachefix\/\">Sabotare l'intestazione della cache<\/a>. Ripeto il controllo dopo ogni aggiornamento del plugin, perch\u00e9 le modifiche alle regole vengono spesso apportate in modo silenzioso. <strong>passaggio<\/strong>.<\/p>\n\n<h2>Versioning, CDN e cache busting<\/h2>\n\n<p>Appendo il <strong>Versione<\/strong> ai nomi dei file (style.23.css invece di style.css?ver=23) in modo che i browser conservino lunghe cache e carichino comunque immediatamente i nuovi contenuti. Una CDN distribuisce i file statici a livello globale, imposta i propri TTL nei PoP periferici e riduce drasticamente gli RTT. Importante: memorizzare l'HTML nella cache della CDN solo se non \u00e8 richiesta la personalizzazione, altrimenti si creeranno stati errati. Durante la distribuzione, modifico automaticamente il numero di versione, in modo che gli utenti non rimangano mai bloccati con script vecchi. Questo \u00e8 il modo in cui combino il TTL del browser con la sicurezza <strong>Sfruttamento della cache<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-browsercache-setup2093.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pulizia delle versioni nelle build di WordPress<\/h2>\n\n<p>Il pi\u00f9 affidabile \u00e8 una pipeline di compilazione che scrive gli hash nei nomi dei file (ad es. <code>app.9f3c.css<\/code>). WordPress carica quindi esattamente questo file - i browser possono conservarlo per un anno grazie a \u201eimmutable\u201c. Come ripiego, se i nomi dei file non possono essere modificati, imposto il numero di versione dinamicamente dalla data del file. In questo modo le stringhe di query rimangono corrette e affidabili.<\/p>\n\n<pre><code>\/\/ functions.php (fallback versioning via filemtime)\nadd_action('wp_enqueue_scripts', function () {\n    $css = get_stylesheet_directory() . '\/dist\/style.css';\n    $ver = file_exists($css) ? filemtime($css) : null;\n    wp_enqueue_style('theme', get_stylesheet_directory_uri() . '\/dist\/style.css', [], $ver);\n});<\/code><\/pre>\n\n<p>Importante: se il nome del file contiene versioni, pu\u00f2 essere impostato \u201eimmutabile\u201c. Se si usano solo stringhe di query, i browser dovrebbero essere in grado di riconvalidare, in modo che gli aggiornamenti arrivino in modo affidabile. Mi assicuro anche che gli strumenti di compilazione puliscano i vecchi file, in modo che le CDN non memorizzino un numero inutilmente elevato di varianti.<\/p>\n\n<h2>Cache e caricamento corretto dei font web<\/h2>\n\n<p>I font web hanno bisogno di TTL lunghi, di intestazioni CORS corrette e di un precaricamento opzionale, in modo tale che <strong>Salti di layout<\/strong> non appaiono. Posiziono i file woff2 sullo stesso dominio o imposto Access-Control-Allow-Origin in modo pulito. Inoltre, definite font-display: swap in modo che il testo rimanga visibile immediatamente durante il caricamento del font. Se volete ottimizzare il tempo di caricamento dei vostri font, troverete consigli utili qui: <a href=\"https:\/\/webhosting.de\/it\/wordpress-webfonts-ottimizzazione-del-tempo-di-caricamento-serverperf\/\">Caricare i font web pi\u00f9 velocemente<\/a>. Con intestazioni di cache pulite e una preconnessione alle CDN, accorcio sensibilmente FOUT\/FOIT e assicuro una coerenza <strong>Rendering<\/strong>-Risultati.<\/p>\n\n<h2>Sintonizzare correttamente i font, CORS e Vary<\/h2>\n\n<p>I caratteri provenienti da un'altra origine richiedono CORS. Ho impostato <code>Controllo dell'accesso - Consenti origine<\/code> (ad esempio, al proprio dominio o \u201e*\u201c per il pubblico) ed evitare un'inutile <code>Variare: Origine<\/code>, che gonfia le chiavi della cache. Consigliato per i font: <code>pubblico, max-age=31536000, immutabile<\/code>. Il precarico migliora il First Paint, ma non cambia il TTL - il precarico e l'hard caching si completano a vicenda. Non dimentico inoltre che la consegna compressa (<code>br<\/code>\/<code>gzip<\/code>) a <code>Vary: Accept-Encoding<\/code> \u00e8 necessario per separare correttamente i proxy.<\/p>\n\n<h2>Modelli di errore tipici e soluzioni rapide<\/h2>\n\n<p>Se dopo un aggiornamento compare del codice vecchio, il <strong>Versione<\/strong> sul nome del file. Se il browser si ricarica completamente ogni volta, le intestazioni contengono istruzioni contraddittorie o i proxy le rimuovono durante il percorso. Se un checkout viene annullato, probabilmente il sito sta mettendo in cache le pagine lato sessione o le risposte API. Se i percorsi dell'amministrazione finiscono nella cache, mancano le esclusioni per wp-admin e login o un plugin sta facendo la cache a livello globale. Risolvo il problema disattivando passo dopo passo, consolidando le intestazioni, escludendo i percorsi critici e, infine, l'effetto con lo stato 304. <strong>confermare<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-caching-fehler-9834.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dettagli spesso trascurati che fanno una grande differenza<\/h2>\n\n<ul>\n  <li><strong>Nginx add_header<\/strong> non si applica ai 304\/reindirizzamenti senza \u201esempre\u201c: le intestazioni della cache mancano per le convalide. Ho sempre impostato \u201esempre\u201c.<\/li>\n  <li><strong>Scadenza e controllo della cache:<\/strong> \u201eCache-Control\u201c ha la priorit\u00e0, \u201eExpires\u201c serve come ripiego per i vecchi client. Evitare informazioni duplicate e contraddittorie.<\/li>\n  <li><strong>ETag in configurazioni multi-server:<\/strong> ETag incoerenti distruggono 304. Disabilito ETag o uso validatori deboli e mi affido a \u201eLast-Modified\u201c.<\/li>\n  <li><strong>Variare al minimo:<\/strong> \u201eVary: Accept-Encoding\u201c \u00e8 obbligatorio per la compressione, \u201eVary: Cookie\u201c gonfia le cache dei bordi: meglio bypassare i cookie.<\/li>\n  <li><strong>SVG e tipo MIME:<\/strong> Corretto <code>immagine\/svg+xml<\/code> impostare, dare un TTL lungo e considerare SVG inline per le icone critiche.<\/li>\n  <li><strong>Evitare le catene di reindirizzamento:<\/strong> Ogni 301\/302 pu\u00f2 perdere i validatori e forzare 200 - URL puliti senza cascate.<\/li>\n  <li><strong>Utilizzare priorit\u00e0\/precarico in modo mirato:<\/strong> <code>fetchpriority=\"high\"<\/code> o il precaricamento delle risorse critiche accelera la prima chiamata; il caching \u00e8 efficace per gli utenti che ritornano.<\/li>\n  <li><strong>Differenziare REST-API:<\/strong> I JSON pubblici, che cambiano raramente, possono essere memorizzati nella cache per breve tempo; gli endpoint con token\/cookie sono strettamente \u201eprivati\u201c.<\/li>\n<\/ul>\n\n<h2>Riassumendo brevemente<\/h2>\n\n<p>Mi affido a una chiara <strong>Regole<\/strong>TTL lunghi per le risorse, risposte HTML brevi o riconvalidate, versioning e un unico plugin per la cache. Poi combino la cache del browser con quella delle pagine, degli oggetti e degli opcode per ridurre il carico del server. Controllo DevTools, cerco 304, controllo le intestazioni ed elimino i conflitti con i reindirizzamenti o i cookie. Per il test pratico, confronto le misurazioni sulla prima chiamata e su quelle ripetute e mi concentro sui miglioramenti evidenti. Se seguite questi passaggi, potete portare WordPress a un livello affidabile di cache del browser. <strong>Velocit\u00e0<\/strong> e fa felici gli utenti e i motori di ricerca.<\/p>","protected":false},"excerpt":{"rendered":"<p>WordPress e la cache del browser sono spesso configurati in modo errato. Scoprite come impostare correttamente le intestazioni della cache di WordPress per ottenere prestazioni ottimali.<\/p>","protected":false},"author":1,"featured_media":17051,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[733],"tags":[],"class_list":["post-17058","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"979","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"WordPress Browser Caching","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"17051","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/posts\/17058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/comments?post=17058"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/posts\/17058\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/media\/17051"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/media?parent=17058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/categories?post=17058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/tags?post=17058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}