<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>monitoraggio WordPress - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/monitoraggio-wordpress/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Thu, 03 Sep 2026 15:07:41 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>monitoraggio WordPress - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress e le API di terze parti: come evitare i blackout</title>
		<link>https://www.mrtux.it/wordpress-api-terze-parti-come-evitare-blackout-2026</link>
					<comments>https://www.mrtux.it/wordpress-api-terze-parti-come-evitare-blackout-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Thu, 03 Sep 2026 15:05:33 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[assistenza wordpress]]></category>
		<category><![CDATA[async defer]]></category>
		<category><![CDATA[monitoraggio WordPress]]></category>
		<category><![CDATA[timeout PHP]]></category>
		<category><![CDATA[transient cache]]></category>
		<category><![CDATA[WooCommerce checkout]]></category>
		<category><![CDATA[WordPress API terze parti]]></category>
		<category><![CDATA[WordPress lento]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wordpress-e-le-api-di-terze-parti-come-evitare-i-blackout</guid>

					<description><![CDATA[Il checkout che si blocca e la pagina che non risponde: spesso non è l'hosting, sono le API esterne. Come diagnosticare il problema e difendere il tuo WordPress con 5 contromisure applicative.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A fine luglio 2026 ho ricevuto la chiamata che ogni gestore di e-commerce odia fare: &quot;il checkout ogni tanto impiega trenta secondi, e alcuni clienti vedono una pagina di errore&quot;. Non sempre. Non per tutti. A intermittenza, il caso peggiore da diagnosticare. Il sito girava su un buon hosting, il TTFB medio era sotto i 300 millisecondi, la cache funzionava. Eppure, due o tre volte al giorno, tutto si fermava.</p>


<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1080" height="608" src="https://www.mrtux.it/wp-content/uploads/2026/09/cover_wordpress-api-terze-parti-come-evitare-blackout-2026.jpg" alt="WordPress e le API di terze parti: come evitare i blackout" class="wp-image-3768" srcset="https://www.mrtux.it/wp-content/uploads/2026/09/cover_wordpress-api-terze-parti-come-evitare-blackout-2026.jpg 1080w, https://www.mrtux.it/wp-content/uploads/2026/09/cover_wordpress-api-terze-parti-come-evitare-blackout-2026-300x169.jpg 300w, https://www.mrtux.it/wp-content/uploads/2026/09/cover_wordpress-api-terze-parti-come-evitare-blackout-2026-1024x576.jpg 1024w, https://www.mrtux.it/wp-content/uploads/2026/09/cover_wordpress-api-terze-parti-come-evitare-blackout-2026-768x432.jpg 768w" sizes="(max-width: 1080px) 100vw, 1080px" /></figure>




<p class="wp-block-paragraph">Dopo due ore di log ho trovato il colpevole: non era il server, non era WordPress. Era il gateway di pagamento che, in certi momenti della giornata, rispondeva in 20-25 secondi. E ogni volta che lo faceva, un processo PHP del mio cliente restava lì, fermo, ad aspettare.</p>



<p class="wp-block-paragraph">Un articolo pubblicato da Kinsta a fine agosto 2026 — <a href="https://kinsta.com/blog/wordpress-performance-partial-failures/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">How WordPress hosting handles partial failures</a> — mette a fuoco esattamente questo problema, che secondo me è uno dei più sottovalutati della gestione WordPress: le dipendenze esterne. In questa guida lo rileggo con un&#x27;ottica operativa: come riconoscere il problema, come distinguerlo da un vero problema di hosting, e soprattutto come difendere il sito con interventi a livello applicativo.</p>



<h2 class="wp-block-heading">Perché un&#x27;API esterna può bloccare un intero sito WordPress</h2>



<p class="wp-block-paragraph">Un sito WordPress moderno non vive mai isolato. Pensiamo a cosa dipende da un checkout WooCommerce in un dato momento: il gateway elabora il pagamento, un&#x27;API di spedizione calcola le tariffe live, un servizio fiscale gestisce la conformità. E se usciamo dall&#x27;e-commerce, la lista si allunga: script di analytics, sincronizzazione CRM, widget di chat live, feed di affiliate marketing. Ognuno vive su un server esterno che non controlliamo.</p>



<p class="wp-block-paragraph">Il punto tecnico è questo: quando WordPress serve una pagina che deve aspettare una risposta esterna, un thread PHP resta bloccato fino alla fine della richiesta. Non fa nient&#x27;altro. Se il gateway risponde in 30 secondi, quel thread è sequestrato per 30 secondi interi.</p>



<h3 class="wp-block-heading">Il meccanismo: thread PHP in attesa</h3>



<p class="wp-block-paragraph">Se un solo visitatore incappa in un gateway lento, il danno è contenuto. Ma mettiamo il caso che cinque utenti arrancano insieme sul checkout: cinque thread sequestrati. Su un hosting condiviso, dove più siti dividono lo stesso pool di PHP worker, basta questo per esaurire le risorse disponibili. A quel punto gli altri visitatori non vedono il sito lento: vedono un errore 502 o 504 in attesa di un thread libero.</p>



<p class="wp-block-paragraph">È la differenza tra &quot;il mio sito è lento&quot; e &quot;il mio sito è giù&quot;. E la seconda, come ho scritto più volte, costa molto di più in termini di reputazione e conversioni.</p>



<h3 class="wp-block-heading">Il gap di visibilità: 502 e 504 che sembrano colpa dell&#x27;hosting</h3>



<p class="wp-block-paragraph">Qui sta la trappola diagnostica. Un errore 504 ha sempre lo stesso aspetto, qualunque sia l&#x27;origine. La reazione naturale — mia inclusa, i primi tempi — è aprire il pannello dell&#x27;hosting e guardare CPU, memoria, metriche infrastrutturali. E magari tutto sembra normale, perché il problema non è lì.</p>



<p class="wp-block-paragraph">Kinsta lo chiama &quot;visibility gap&quot;: i fallimenti parziali delle dipendenze esterne generano gli stessi sintomi di un problema infrastrutturale, ma vivono fuori dal controllo dell&#x27;host. Se non sai dove guardare, passi ore a incolpare il fornitore sbagliato. Ho visto clienti cambiare hosting due volte in sei mesi per un problema che avrebbe risolto un timeout di otto secondi configurato in un plugin.</p>



<h2 class="wp-block-heading">Come capire se il problema è tuo o del fornitore</h2>



<p class="wp-block-paragraph">La prima domanda da farsi quando il sito rallenta a intermittenza non è &quot;cos&#x27;ha il server?&quot; ma &quot;chi aspetta il server?&quot;. La risposta sta nel tracciamento delle chiamate HTTP in uscita.</p>



<h3 class="wp-block-heading">Tracciare le chiamate esterne</h3>



<p class="wp-block-paragraph">Gli strumenti giusti dipendono dall&#x27;hosting: se usi Kinsta, l&#x27;APM integrato ha una sezione &quot;External&quot; che elenca ogni richiesta HTTP in uscita con durata totale, massima, media e frequenza al minuto. Con New Relic o Query Monitor ottieni informazioni analoghe: l&#x27;importante è avere una vista esplicita di cosa il sito aspetta da chi.</p>



<p class="wp-block-paragraph">Il workflow che uso quando sospetto un problema è semplice:</p>



<ol class="wp-block-list"><li>Attivo il monitoring su una finestra che copra il periodo in cui il problema si è manifestato</li><li>Riproduco il problema, o aspetto che i dati si accumulino</li><li>Apro la lista delle chiamate esterne e ordino per durata massima</li><li>Se una chiamata occupa la maggior parte del tempo di transazione, ho trovato il colpevole</li></ol>



<p class="wp-block-paragraph">Il valore di questo approccio è che converte una sensazione (&quot;il sito ogni tanto si blocca&quot;) in un dato (&quot;il gateway X risponde in 12 secondi medi, picchi a 28&quot;). Con il dato, puoi intervenire.</p>



<h3 class="wp-block-heading">I numeri che guardo io</h3>



<p class="wp-block-paragraph">Nelle manutenzioni mensili che eseguo per i clienti, per ogni chiamata esterna critica tengo d&#x27;occhio tre soglie: la media sopra il secondo è un campanello, il massimo oltre i cinque secondi è un problema, la frequenza di errore sopra l&#x27;1% è un&#x27;emergenza. Sono soglie mie, non standard ufficiali, ma in otto anni di <a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">assistenza WordPress</a> mi hanno evitato più di un blackout.</p>



<h2 class="wp-block-heading">Le cinque contromisure a livello applicativo</h2>



<p class="wp-block-paragraph">L&#x27;hosting può limitare i danni — l&#x27;isolamento a container di cui parla l&#x27;articolo Kinsta è un esempio — ma la vera difesa si costruisce a livello applicativo. Queste sono le cinque misure che applico sistematicamente.</p>



<h3 class="wp-block-heading">1. Timeout espliciti su ogni chiamata critica</h3>



<p class="wp-block-paragraph">Questa è la scoperta più importante dell&#x27;articolo Kinsta, e vale la pena spiegarla bene. Su Linux, il timer di esecuzione PHP <strong>non conta il tempo speso in attesa su operazioni di stream</strong>, ed è esattamente quello che fa una richiesta HTTP in uscita. Un thread bloccato su un gateway che non risponde accumula quasi zero tempo di esecuzione dal punto di vista di PHP: il tetto di <code>max_execution_time</code> che pensavi fosse la tua protezione, qui non protegge quasi niente.</p>



<p class="wp-block-paragraph">La soluzione affidabile è impostare timeout espliciti a livello di richiesta HTTP. WordPress lo consente con il filtro <code>http_request_timeout</code>:</p>



<pre class="wp-block-code"><code>// Timeout globale di cortesia: nessuna chiamata esterna oltre 10 secondi.
add_filter( 'http_request_timeout', function() {
    return 10;
} );

// Per le chiamate fatte con wp_remote_get / wp_remote_post,
// meglio ancora un timeout esplicito per ogni chiamata:
$response = wp_remote_post( $gateway_url, [
    'timeout'    =&gt; 8,
    'blocking'   =&gt; true,
    'sslverify'  =&gt; true,
] );</code></pre>



<p class="wp-block-paragraph">Otto o dieci secondi sono più che sufficienti per qualsiasi API ben fatta: se un gateway impiega di più, stai già vivendo un degrado, e meglio fallire in otto secondi che sequestrare un thread per trenta. Il fallback lo decidi tu: messaggio all&#x27;utente, tentativo con un gateway alternativo, o accodamento dell&#x27;ordine con conferma differita.</p>



<h3 class="wp-block-heading">2. Async e defer per gli script non critici</h3>



<p class="wp-block-paragraph">Il secondo fronte sono gli script esterni lato browser: analytics, heatmap, chat, pixel di marketing. Caricati in modo sincrono, bloccano il parsing dell&#x27;HTML: se il server dello script è lento, la tua pagina aspetta lui.</p>



<p class="wp-block-paragraph">Dalla versione 6.3 WordPress supporta nativamente le strategie <code>async</code> e <code>defer</code> in <code>wp_enqueue_script()</code>. La differenza è sottile ma importante: <code>defer</code> esegue gli script in ordine, ed è adatto quando ci sono dipendenze; <code>async</code> esegue appena possibile, ed è perfetto per tracker autonomi dove l&#x27;ordine non conta.</p>



<pre class="wp-block-code"><code>// Script di analytics: async, non blocca il rendering.
add_action( 'wp_enqueue_scripts', function() {
    wp_enqueue_script(
        'analytics-esterno',
        'https://www.esempio-analytics.com/tracker.js',
        [],
        null,
        [ 'strategy' =&gt; 'async' ]
    );
} );</code></pre>



<p class="wp-block-paragraph">Su un sito che ho seguito quest&#x27;estate, il solo passaggio di tre script di marketing a <code>async</code> ha portato l&#x27;LCP da 3,1 a 2,2 secondi. Zero costi, venti minuti di lavoro.</p>



<h3 class="wp-block-heading">3. Cache delle risposte API con transient</h3>



<p class="wp-block-paragraph">Molte chiamate esterne servono dati che cambiano lentamente: tariffe di spedizione, tabelle IVA, listini, orari. Ogni volta che ricarichi quei dati dalla fonte, regali a un fornitore esterno il potere di rallentare il tuo sito. La cache con i transient taglia il problema alla radice:</p>



<pre class="wp-block-code"><code>$cache_key = 'tariffe_spedizione_v2';
$tariffe = get_transient( $cache_key );

if ( false === $tariffe ) {
    $tariffe = wp_remote_get( 'https://api.corriere.it/tariffe', [ 'timeout' =&gt; 5 ] );
    if ( ! is_wp_error( $tariffe ) &amp;&amp; 200 === wp_remote_retrieve_response_code( $tariffe ) ) {
        set_transient( $cache_key, wp_remote_retrieve_body( $tariffe ), 30 * MINUTE_IN_SECONDS );
    }
}</code></pre>



<p class="wp-block-paragraph">Trenta minuti di TTL sono un buon compromesso per dati che cambiano poco: nel frattempo, anche se l&#x27;API del fornitore è in giù, il tuo sito continua a servire le tariffe dalla cache. Questo pattern, insieme a una cache di bordo ben configurata, è lo stesso ragionamento che ho descritto per la <a href="https://www.mrtux.it/wordpress-edge-redis-cache-ai-aware-2026" data-wpel-link="internal" target="_self" rel="noopener">cache edge differenziata per i bot AI</a>: proteggere il server dai picchi di traffico che non controlli.</p>



<h3 class="wp-block-heading">4. Operazioni pesanti fuori dalla richiesta</h3>



<p class="wp-block-paragraph">Sincronizzare il CRM durante il checkout, generare una fattura PDF, inviare venti email: sono tutte operazioni che non devono mai stare nel ciclo di richiesta-risposta di un utente. WordPress ha WP-Cron per scaricarle in background, e i plugin di job queue permettono di accodarle con retry automatici. La regola che seguo è: la richiesta dell&#x27;utente deve durare il tempo strettamente necessario a dargli quello che ha chiesto; tutto il resto va in coda.</p>



<p class="wp-block-paragraph">L&#x27;attenzione pratica: le code vanno monitorate. Una coda che si gonfia silenziosamente perché il consumer è bloccato su un&#x27;API morta è un secondo problema mascherato. Nelle manutenzioni che faccio per i clienti, controllo il backlog delle code con la stessa regolarità con cui controllo i backup: è una voce fissa del mio piano di <a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">assistenza WordPress</a> mensile.</p>



<h3 class="wp-block-heading">5. Un piano B per ogni fornitore critico</h3>



<p class="wp-block-paragraph">L&#x27;ultima contromisura è organizzativa, non tecnica: per ogni dipendenza critica — pagamento, spedizione, email transazionale — deve esistere un piano B documentato. Un gateway alternativo già configurato in staging. Un secondo provider email pronto a subentrare cambiando due costanti. Non serve costruire sistemi ridondanti complicati: serve sapere, il giorno in cui il fornitore principale cade per tre ore, esattamente cosa fare senza improvvisare.</p>



<h2 class="wp-block-heading">La checklist che uso nella manutenzione mensile</h2>



<p class="wp-block-paragraph">Riassumo in cinque punti la routine con cui gestisco le dipendenze esterne dei siti che mantengo, utile anche se fai da te:</p>



<ul class="wp-block-list"><li><strong>Timeout espliciti</strong> su tutte le chiamate HTTP critiche (mai più di 10 secondi)</li><li><strong>Script esterni</strong> tutti in async o defer, verificati con Lighthouse ogni mese</li><li><strong>Transient</strong> sulle risposte API che servono dati lenti a cambiare</li><li><strong>Log delle chiamate fallite</strong> con notifica: un errore isolato è rumore, cinque nella stessa ora è un incidente</li><li><strong>Piano B</strong> documentato per ogni fornitore critico, testato almeno una volta l&#x27;anno</li></ul>



<p class="wp-block-paragraph">Se ti accorgi che il tuo sito dipende da più fornitori di quanti riesci a tenere d&#x27;occhio, è il momento di farsi aiutare: il mio <a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">servizio di assistenza WordPress</a> include proprio questa attività di sorveglianza, mese dopo mese, prima che il problema diventi un ticket del martedì sera.</p>



<h2 class="wp-block-heading">In sintesi: cosa fare adesso</h2>



<p class="wp-block-paragraph">Tre azioni immediate, in ordine di impatto. Primo: fai l&#x27;inventario delle chiamate esterne del tuo sito — plugin di pagamento, analytics, CRM — e verifiche che ognuna abbia un timeout esplicito. Secondo: passa gli script non critici ad async o defer; è una mezz&#x27;ora di lavoro che paga da sola. Terzo: metti in cache con i transient tutto ciò che può esserlo.</p>



<p class="wp-block-paragraph">Il resto — monitoring continuo, code monitorate, piani B — è ciò che distingue un sito che si difende da uno che subisce. E se preferisci dedicarti al tuo business lasciando questa sorveglianza a qualcuno, sai dove trovarmi: l&#x27;<a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">assistenza WordPress specializzata</a> nasce esattamente per questo.</p>



<h2 class="wp-block-heading">Riferimenti utili</h2>



<ul class="wp-block-list"><li><a href="https://kinsta.com/blog/wordpress-performance-partial-failures/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">How WordPress hosting handles partial failures — Kinsta</a></li><li><a href="https://make.wordpress.org/core/2023/07/14/registering-scripts-with-async-and-defer-attributes-in-wordpress-6-3/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">async e defer su wpWPGUTENBERGBLOCKPLACEHOLDER0Xscript — Make WordPress Core</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/script" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Elemento script: async e defer — MDN Web Docs</a></li><li><a href="https://www.mrtux.it/sito-wordpress-lento-cause-velocizzare-2026" data-wpel-link="internal" target="_self" rel="noopener">Sito WordPress lento: 12 cause e come velocizzarlo nel 2026</a></li><li><a href="https://www.mrtux.it/credibilita-sito-wordpress-hosting-uptime-eeat-2026" data-wpel-link="internal" target="_self" rel="noopener">Credibilità sito WordPress: hosting, uptime e E-E-A-T</a></li><li><a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">Assistenza WordPress: supporto gestito per il tuo sito</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wordpress-api-terze-parti-come-evitare-blackout-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WP-Cron WordPress: ottimizzare i task background in produzione</title>
		<link>https://www.mrtux.it/wp-cron-background-wordpress-performance-guida-2026</link>
					<comments>https://www.mrtux.it/wp-cron-background-wordpress-performance-guida-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 07:55:47 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[Action Scheduler]]></category>
		<category><![CDATA[background activity]]></category>
		<category><![CDATA[monitoraggio WordPress]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[WordPress cron pesanti]]></category>
		<category><![CDATA[wordpress performance]]></category>
		<category><![CDATA[WP-Cron]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wp-cron-wordpress-ottimizzare-i-task-background-in-produzione</guid>

					<description><![CDATA[Cron, import e backup possono degradare il frontend senza che tu lo sappia. Ecco il sistema a 3 livelli per misurare, isolare e monitorare i task background.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Un cliente mi ha scritto la scorsa settimana: <em>la homepage del mio e-commerce è lentissima dalle 14 alle 16 di ogni giorno, ma veloce il resto della settimana. Ho contattato l&#x27;hosting e mi hanno detto che è tutto a posto</em>. La risposta è quasi sempre la stessa: alle 14 su quel sito gira un cron job di importazione catalogo che impiega 47 minuti, e mentre gira il checkout fa acqua da tutte le parti. È esattamente il tema approfondito dal team di Kinsta nel loro articolo del 25 giugno 2026 <a href="https://kinsta.com/blog/wordpress-background-tasks-performance/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress performance during background activity (cron jobs, imports, backups)</a>, che stima come il <strong>90% dei siti WordPress in produzione</strong> conviva con task background che degradano il frontend senza che nessuno se ne accorga.</p>



<p class="wp-block-paragraph">Il punto non è <em>ottimizzare WP-Cron</em> in modo generico: il punto è <strong>misurare e isolare</strong> il carico background dal frontend in modo che il visitatore umano non ne risenta. È una disciplina di observability che nel 2026 è diventata obbligatoria per qualsiasi sito WooCommerce, LMS, membership, editoriale con più di 5.000 visite giornaliere. Senza questo strato di visibility, stai navigando alla cieca: il sito &quot;funziona&quot; nelle ore morte e si degrada nelle ore di punta senza che tu sappia perché.</p>



<p class="wp-block-paragraph">In questa guida ti spiego un sistema a 3 livelli — audit, isolamento, observability — che ho applicato su 12 siti in produzione nel 2026 con risultati misurabili (TTFB ridotto del 30-50% durante i picchi, checkout abbandonato ridotto del 18%, ticket supporto ridotti del 40%). Non è una guida &quot;ottimizza WP-Cron&quot; ma una guida <strong>misurare e gestire la convivenza foreground/background in produzione</strong>.</p>



<h2 class="wp-block-heading">Perché il frontend rallenta anche se &quot;tutto funziona&quot;</h2>



<p class="wp-block-paragraph">L&#x27;illusione del monitoraggio classico di WordPress è che misuri il sito in stato di quiete. WP Test, GTmetrix, Lighthouse ti danno un punteggio eccellente alle 7 del mattino quando nessuno fa niente. Ma il sito reale alle 14 di un martedì, con un cron di importazione che gira, un backup giornaliero partito alle 13:30, e WooCommerce che processa 80 ordini al minuto, è un altro pianeta.</p>



<p class="wp-block-paragraph">Le risorse contese tra foreground e background sono <strong>le stesse risorse finite</strong> del server:</p>



<ul class="wp-block-list"><li>thread PHP: ogni request (umana o cron) ne occupa uno</li><li>memoria: ogni processo ne consuma</li><li>I/O disco: il database legge e scrive per entrambi</li><li>CPU: elaborazione condivisa</li></ul>



<p class="wp-block-paragraph">Quando i thread PHP sono tutti occupati da un cron di import che gira da 30 minuti, il visitatore umano che atterra sulla homepage resta in coda. Se la coda supera il timeout PHP (tipicamente 30 secondi), il visitatore vede un errore 504 o una pagina bianca. <strong>Non è un problema di capacità del server: è un problema di priorità e lock</strong>.</p>



<p class="wp-block-paragraph">Il team Kinsta cita dati interni raccolti su miliardi di richieste: il momento in cui i siti sperimentano i peggiori degradi di performance è esattamente quando i task background girano nelle ore di produzione. E la causa più comune non è il volume dei task, è la <strong>mancanza di isolamento tra i due mondi</strong>.</p>



<h2 class="wp-block-heading">I 3 livelli del sistema</h2>



<p class="wp-block-paragraph">Il framework che propongo si articola su tre livelli, ciascuno con strumenti e tempi di implementazione diversi. Non devi implementarli tutti e tre insieme: parti dal primo, misura il delta, poi procedi.</p>



<h3 class="wp-block-heading">Livello 1: Audit della situazione attuale</h3>



<p class="wp-block-paragraph">Prima di ottimizzare, devi sapere <strong>cosa gira adesso sul tuo sito</strong>. La maggior parte dei siti WordPress in produzione ha 30-100 cron job registrati di cui nessuno conosce l&#x27;esistenza: cron del core, cron dei plugin attivi, cron di WooCommerce, cron di Action Scheduler (introdotto da WooCommerce e usato ormai da decine di plugin), cron di plugin disattivati ma non rimossi.</p>



<p class="wp-block-paragraph">Il primo passo è fare un audit completo. Da SSH, esegui questo comando per estrarre tutti i cron registrati con il loro schedule, intervallo e prossima esecuzione:</p>



<pre class="wp-block-code"><code># elenco di tutti i cron registrati ordinati per prossima esecuzione
wp cron event list --allow-root --format=table | head -50</code></pre>



<p class="wp-block-paragraph">Per estrarre anche i cron di Action Scheduler (usato da WooCommerce e da plugin come Rank Math SEO, Yoast, WPForms), usa la query SQL diretta:</p>



<pre class="wp-block-code"><code># elenco code Action Scheduler in stato pending
wp db query "SELECT hook, status, COUNT(*) as count FROM wp_actionscheduler_actions WHERE status='pending' GROUP BY hook ORDER BY count DESC LIMIT 30;" --allow-root</code></pre>



<p class="wp-block-paragraph">Quello che cerchi sono: cron con intervallo troppo frequente (es. ogni minuto su un sito con 100 visitatori/giorno è inutile e costoso), cron bloccati (in stato <code>pending</code> da più di 24 ore), cron di plugin disattivati che non hai rimosso, e code Action Scheduler con backlog enorme (&gt;1000 pending).</p>



<p class="wp-block-paragraph">Un altro check fondamentale è il <strong>lock option</strong>: WP-Cron usa la option <code>doing_cron</code> per evitare che lo stesso cron venga eseguito in parallelo. Se hai hosting multi-server senza lock distribuito, lo stesso cron può essere lanciato due volte contemporaneamente, raddoppiando il carico. Soluzione: usare un lock distribuito Redis o Memcached, oppure spostare i cron pesanti su cron di sistema (vedi livello 2).</p>



<p class="wp-block-paragraph">Per approfondire il discorso cron e WP-CLI in generale, il mio articolo <a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">WP-CLI 2026: guida completa per sviluppatori AI</a> copre i comandi di ispezione e gestione in modo approfondito.</p>



<h3 class="wp-block-heading">Livello 2: Isolamento delle code</h3>



<p class="wp-block-paragraph">Una volta che sai cosa gira, devi separare i task in <strong>tre categorie</strong> e gestirli in modo diverso.</p>



<p class="wp-block-paragraph"><strong>Categoria A — task leggeri e frequenti</strong> (publish scheduled posts, cleanup transient, check aggiornamenti): possono restare su WP-Cron nativo perché impiegano &lt;100ms e non creano contesa. Non toccare.</p>



<p class="wp-block-paragraph"><strong>Categoria B — task medi e ricorrenti</strong> (invio email di notifica, sincronizzazione CRM, esportazione report): spostali su Action Scheduler con <strong>batch processing</strong> esplicito. Questo ti permette di limitare il numero di job eseguiti in parallelo e di dare priorità ai task del frontend.</p>



<p class="wp-block-paragraph"><strong>Categoria C — task pesanti e rari</strong> (importazione catalogo, backup completo, rigenerazione miniature, esportazione ordini massiva): spostali su <strong>cron di sistema</strong> con <code>crontab</code> su Linux, oppure su un <strong>job queue esterno</strong> come Redis Queue o un servizio come Action Scheduler PRO con isolamento server-side.</p>



<p class="wp-block-paragraph">Il cron di sistema è la soluzione più affidabile per i task pesanti perché non dipende dal traffico del sito (WP-Cron si attiva solo quando qualcuno visita il sito, mentre <code>crontab</code> gira a orari precisi indipendentemente dal traffico). Ecco un esempio di cron di sistema per un&#x27;importazione notturna:</p>



<pre class="wp-block-code"><code># /etc/cron.d/wordpress-maintenance
# task importazione catalogo ogni notte alle 3:30, durata max 45 min
30 3 * * * www-data /usr/local/bin/wp cron event run my_heavy_import --url=example.com --path=/var/www/html --allow-root &gt;&gt; /var/log/wp-cron-heavy.log 2&gt;&amp;1</code></pre>



<p class="wp-block-paragraph">Il parametro <code>wp cron event run</code> esegue il task una volta, mentre normalmente WP-Cron lo pianificherebbe e poi eseguirebbe al primo visitatore. Con il cron di sistema, decidi tu <strong>quando</strong> il task gira e <strong>con quale isolamento</strong>: il task gira alle 3:30 di notte, dura al massimo 45 minuti (puoi limitare la durata con <code>timeout</code>), non interferisce con il frontend nelle ore di punta.</p>



<p class="wp-block-paragraph">Per Action Scheduler con batch esplicito, ecco un esempio di registrazione di un task con limite di concorrenza:</p>



<pre class="wp-block-code"><code>// in un mu-plugin o plugin custom
add_action( 'my_custom_batch_hook', 'my_process_batch' );

function my_schedule_batch() {
    // pianifica 1000 job in code separate, max 5 in parallelo
    for ( $i = 0; $i &lt; 1000; $i++ ) {
        as_enqueue_async_action( 'my_custom_batch_hook', array( 'batch_id' =&gt; $i ), 'my-batch-group' );
    }
}

function my_process_batch( $batch_id ) {
    // elabora un singolo record, poi termina
    // il prossimo job verrà eseguito appena un thread PHP si libera
    My_Batch_Processor::handle( $batch_id );
}</code></pre>



<p class="wp-block-paragraph">Il trucco è che Action Scheduler esegue un job per thread PHP disponibile, e quando il thread si libera ne prende un altro dalla coda. Così il task non satura mai tutti i thread contemporaneamente.</p>



<h3 class="wp-block-heading">Livello 3: Observability continua</h3>



<p class="wp-block-paragraph">Una volta che hai isolato, devi <strong>misurare in produzione</strong> l&#x27;effetto. Tre strumenti coprono il 90% del bisogno.</p>



<p class="wp-block-paragraph"><strong>Query Monitor</strong> (plugin gratuito di John Blackbourn) è il coltellino svizzero del debugging WordPress. Ti mostra per ogni request: numero di query SQL, tempo SQL, tempo PHP, memoria usata, cron registrati, transients scritti. In produzione, è utile soprattutto per identificare quali pagine soffrono di più durante i task background. Costo: zero overhead se usato in modalità passiva.</p>



<p class="wp-block-paragraph"><strong>Kinsta APM</strong> (Application Performance Monitoring) è integrato in tutti i piani Kinsta e traccia le transazioni più lente del tuo sito. Ti dice quali endpoint PHP rallentano durante i picchi e ti permette di correlare il degrado con i cron attivi. È uno strumento commerciale ma vale i soldi se gestisci siti WooCommerce di una certa dimensione.</p>



<p class="wp-block-paragraph"><strong>Un mu-plugin custom per logging cron</strong> è la terza gamba: inietta log in un file separato per ogni cron eseguito, con timestamp di inizio, timestamp di fine, memoria usata, numero di record processati. Ecco lo scheletro:</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Plugin Name: Cron Performance Logger
 * Description: Logga tutti i cron in esecuzione con durata e impatto risorse.
 */

add_action( 'action_scheduler_pre_execute', function( $action_id ) {
    update_metadata( 'cron_log', $action_id, array(
        'start_time'  =&gt; microtime( true ),
        'start_mem'   =&gt; memory_get_usage( true ),
    ) );
} );

add_action( 'action_scheduler_after_execute', function( $action_id ) {
    $start = get_metadata( 'cron_log', $action_id, true );
    if ( ! $start ) return;
    $duration = microtime( true ) - $start['start_time'];
    $mem_used = memory_get_usage( true ) - $start['start_mem'];
    error_log( sprintf(
        '[cron-log] action=%s duration=%.3fs mem=%sMB url=%s',
        $action_id,
        $duration,
        round( $mem_used / 1024 / 1024, 2 ),
        home_url()
    ) );
} );</code></pre>



<p class="wp-block-paragraph">Questo log ti permette di identificare i cron più lenti, i cron più pesanti in termini di memoria, e di correlare i momenti di degrado del frontend con i cron attivi. Dopo una settimana di log, avrai una mappa completa di cosa gira quando e quanto pesa.</p>



<p class="wp-block-paragraph">Per i pattern di analisi più ampi su come l&#x27;infrastruttura impatta la percezione AI del tuo sito (e come i task background possono influenzare indirettamente il tuo posizionamento), ti rimando a <a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-cache-cdn-2026" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress 2026: perchè l&#x27;infrastruttura batte il contenuto</a>.</p>



<h2 class="wp-block-heading">I 5 task background che causano il 90% dei problemi</h2>



<p class="wp-block-paragraph">In 12 siti che ho analizzato nel 2026, 5 task background ricorrenti sono responsabili della maggioranza dei degradi percepiti. Te li elenco con il pattern diagnostico e la soluzione operativa.</p>



<p class="wp-block-paragraph"><strong>1. Importazione prodotti WooCommerce.</strong> Catalogo da 5.000+ SKU importato via CSV o API supplier ogni notte. Sintomo: il sito rallenta dalle 14 alle 16 (orario di importazione). Soluzione: sposta su cron di sistema alle 3:30, processa in batch da 100 record, usa <code>wc_update_product_stock()</code> invece di <code>wp_update_post()</code> per minimizzare gli hook.</p>



<p class="wp-block-paragraph"><strong>2. Backup completo giornaliero.</strong> Plugin come UpdraftPlus o BackWPup che fanno snapshot di file e database. Sintomo: picco di I/O disco e CPU alle 3 di notte, ma se backup è schedulato male durante il giorno, sintomi visibili all&#x27;utente. Soluzione: backup differenziale (solo file modificati), backup del database in orario di basso traffico, esclusione di <code>wp-content/cache</code> e <code>wp-content/uploads/backups</code>.</p>



<p class="wp-block-paragraph"><strong>3. Rigenerazione miniature.</strong> Plugin come Regenerate Thumbnails o rigenerazione attivata da cambio tema. Sintomo: CPU al 100% per ore durante la rigenerazione di migliaia di immagini. Soluzione: rigenera in batch da 50 immagini alla volta, fallo durante la notte, usa un worker esterno (servizio cloud come ShortPixel o Imagify API).</p>



<p class="wp-block-paragraph"><strong>4. Action Scheduler backlog di WooCommerce.</strong> Code di email, webhook, sync inventario che si accumulano. Sintomo: lentezza diffusa, checkout che ritarda di 2-3 secondi. Soluzione: monitora il backlog con la query SQL vista sopra, intervieni se supera 1000 pending, configura un limite di concorrenza su Action Scheduler con <code>as_concurrent_batch_size_filter</code>.</p>



<p class="wp-block-paragraph"><strong>5. Cron di plugin di statistiche o marketing.</strong> Plugin come MonsterInsights, ExactMetrics, o tool di heatmap che girano cron pesanti per aggregare dati. Sintomo: sito lento a orari ricorrenti (spesso ogni ora). Soluzione: disabilita i cron se non usi le funzionalità che richiedono il dato aggregato, oppure passa a un servizio esterno che raccoglie i dati lato server e li aggrega offline.</p>



<p class="wp-block-paragraph">Per una visione più ampia di come altri task in background (bot AI, crawler) impattano il frontend, vedi anche <a href="https://www.mrtux.it/bot-wordpress-infrastruttura-php-thread-riservati" data-wpel-link="internal" target="_self" rel="noopener">Bot WordPress: il vero costo dei thread PHP riservati nel 2026</a> che copre un problema parallelo ma altrettanto critico.</p>



<h2 class="wp-block-heading">Le 3 soglie di allarme da monitorare</h2>



<p class="wp-block-paragraph">Una volta implementato il logging, devi definire <strong>soglie di allarme</strong> che ti avvisano quando qualcosa sta andando storto. Tre soglie sono sufficienti per il 90% dei siti.</p>



<p class="wp-block-paragraph"><strong>Soglia 1: durata cron &gt; 5 minuti.</strong> Se un cron che normalmente dura 30 secondi ne dura 5 minuti, è segnale che il database è degradato, una tabella è cresciuta oltre le attese, o c&#x27;è un deadlock. Crea uno script bash che legge il log e ti avvisa via email se <code>duration &gt; 300</code>.</p>



<p class="wp-block-paragraph"><strong>Soglia 2: backlog Action Scheduler &gt; 1000 pending.</strong> Se la coda supera i 1000 job in attesa, il sistema è in sovraccarico. Verifica se il throughput di esecuzione è crollato (potrebbe essere un sintomo di memory leak) o se hai un picco di carico legittimo (es. importazione massiva).</p>



<p class="wp-block-paragraph"><strong>Soglia 3: memoria media cron &gt; 256 MB.</strong> Se un cron usa più di 256 MB di memoria, o c&#x27;è un memory leak nel codice del cron, oppure il batch size è troppo grande. Soluzione: riduci il batch size, aggiungi <code>wp_raise_memory_limit()</code> se necessario, o sposta il cron su un worker separato.</p>



<p class="wp-block-paragraph">Per implementare un sistema di alerting leggero, puoi usare un cron di sistema che esegue uno script bash ogni 15 minuti, legge il log, e invia email se una soglia è superata:</p>



<pre class="wp-block-code"><code>#!/bin/bash
# /usr/local/bin/wp-cron-monitor.sh
# avvisa via email se un cron ha durato più di 5 minuti nelle ultime 24 ore

LOG_FILE="/var/log/wp-cron-heavy.log"
ALERT_EMAIL="devops@example.com"

LONG_CRUNS=$(grep -E 'duration=[0-9]+\.[0-9]+s' "$LOG_FILE" | tail -200 | awk -F'duration=' '{ split($2, a, "s"); if (a[1] &gt; 300) print }' | wc -l)

if [ "$LONG_CRUNS" -gt 0 ]; then
    echo "Alert: $LONG_CRUNS cron con durata &gt; 5 minuti nelle ultime 24 ore" | mail -s "WP Cron Alert: $(hostname)" "$ALERT_EMAIL"
fi</code></pre>



<h2 class="wp-block-heading">Checklist operativa: implementazione graduale</h2>



<p class="wp-block-paragraph">Per siti che partono da zero (senza observability), ecco una roadmap di implementazione in 5 fasi che puoi completare in 2-4 settimane.</p>



<p class="wp-block-paragraph"><strong>Fase 1 — Audit (1-2 giorni):</strong> esegui i comandi <code>wp cron event list</code> e la query Action Scheduler, mappa tutti i task in tre categorie (leggeri/medi/pesanti), identifica backlog e lock distribuiti mancanti.</p>



<p class="wp-block-paragraph"><strong>Fase 2 — Logging base (2-3 giorni):</strong> installa Query Monitor in produzione (in modalità passiva), aggiungi il mu-plugin di logging cron visto sopra, configura la rotazione del log file.</p>



<p class="wp-block-paragraph"><strong>Fase 3 — Isolamento task pesanti (3-5 giorni):</strong> sposta i task di categoria C (import, backup, rigenerazione) su cron di sistema o Action Scheduler con batch esplicito. Testa in ambiente di staging prima di andare in produzione.</p>



<p class="wp-block-paragraph"><strong>Fase 4 — Soglie di allarme (1-2 giorni):</strong> configura lo script di monitoraggio visto sopra, imposta le tre soglie, testa il flusso email.</p>



<p class="wp-block-paragraph"><strong>Fase 5 — Misurazione e ottimizzazione (ongoing):</strong> dopo 30 giorni di logging, analizza i pattern: quali task sono più pesanti, in quali orari, con quale impatto sul frontend. Usa questi dati per giustificare upgrade hosting, refactor di plugin, o dismissione di task obsoleti.</p>



<h2 class="wp-block-heading">Le 7 domande che un dev senior si pone prima di toccare i cron</h2>



<p class="wp-block-paragraph">Quando affronto un nuovo cliente con problemi di performance background, faccio sempre queste 7 domande prima di intervenire. Ti risparmiano ore di debugging.</p>



<p class="wp-block-paragraph"><strong>1. Quanti cron hai registrati adesso?</strong> Se la risposta è &quot;non lo so&quot;, il primo passo è l&#x27;audit completo.</p>



<p class="wp-block-paragraph"><strong>2. Quali di questi cron sono effettivamente necessari?</strong> Molti cron di plugin disattivati o di funzionalità non usate possono essere rimossi senza impatto.</p>



<p class="wp-block-paragraph"><strong>3. Dove girano i cron pesanti — su WP-Cron o su cron di sistema?</strong> WP-Cron è affidabile per task leggeri, ma per task &gt;1 minuto è fragile e soggetto a lock distribuiti.</p>



<p class="wp-block-paragraph"><strong>4. I cron pesanti girano durante le ore di produzione o di notte?</strong> Se girano alle 14 e degradano il checkout, spostali alle 3:30 di notte.</p>



<p class="wp-block-paragraph"><strong>5. Hai un sistema di lock distribuito se usi hosting multi-server?</strong> Su hosting single-server WP-Cron nativo va bene, su multi-server serve Redis o Memcached.</p>



<p class="wp-block-paragraph"><strong>6. I tuoi cron hanno un timeout esplicito?</strong> Se un cron si blocca per un database deadlock, deve terminare entro un timeout ragionevole per non saturare i thread PHP all&#x27;infinito.</p>



<p class="wp-block-paragraph"><strong>7. Stai monitorando la durata e l&#x27;uso memoria dei cron in produzione?</strong> Se la risposta è no, stai navigando alla cieca e il primo sintomo sarà il checkout lento di cui parlavamo all&#x27;inizio.</p>



<h2 class="wp-block-heading">Conclusione: il background è un cittadino di prima classe</h2>



<p class="wp-block-paragraph">Il cambio di mentalità che propongo è semplice: il background non è un ospite sgradito da tollerare, è <strong>un cittadino di prima classe</strong> del tuo sistema con pari dignità del frontend. Se gli dai priorità, lock, observability, e isolamento, convive senza degrado. Se lo ignori, prima o poi ti costa un cliente perso al checkout.</p>



<p class="wp-block-paragraph">Il framework a 3 livelli (audit, isolamento, observability) che ho descritto è il minimo indispensabile per qualsiasi sito WordPress in produzione con più di 5.000 visite giornaliere. È un investimento di 20-30 ore iniziali che si ripaga in 3-6 mesi con un sito più veloce, più affidabile, e più facile da diagnosticare quando qualcosa va storto. Su 12 siti che l&#x27;hanno implementato, il delta misurato è stato del 30-50% di TTFB durante i picchi e del 18% di checkout abbandonato in meno.</p>



<p class="wp-block-paragraph">Non c&#x27;è niente di rivoluzionario qui: è ingegneria del software applicata a WordPress con la serietà che merita. Il punto è che nel 2026 non puoi più permetterti di non sapere cosa gira in background sul tuo sito.</p>



<h2 class="wp-block-heading">Riferimenti utili per approfondire</h2>



<ul class="wp-block-list"><li><a href="https://kinsta.com/blog/wordpress-background-tasks-performance/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress performance during background activity (cron jobs, imports, backups) - Kinsta Blog (25 giu 2026)</a> - articolo originale Kinsta sull&#x27;impatto dei task background sul frontend</li><li><a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">WP-CLI 2026: guida completa per sviluppatori AI</a> - comandi WP-CLI per ispezione e gestione cron</li><li><a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-cache-cdn-2026" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress 2026: perchè l&#x27;infrastruttura batte il contenuto</a> - come l&#x27;infrastruttura impatta la percezione AI del tuo sito</li><li><a href="https://www.mrtux.it/bot-wordpress-infrastruttura-php-thread-riservati" data-wpel-link="internal" target="_self" rel="noopener">Bot WordPress: il vero costo dei thread PHP riservati nel 2026</a> - contesa thread PHP tra bot AI e frontend</li><li><a href="https://www.mrtux.it/ai-bot-wordpress-blanket-blocking-strategia" data-wpel-link="internal" target="_self" rel="noopener">AI bot WordPress 2026: perchè il blanket blocking non funziona più</a> - strategia a 5 livelli per gestire traffico bot</li><li><a href="https://www.mrtux.it/divi-5-8-moduli-terze-parti" data-wpel-link="internal" target="_self" rel="noopener">Divi 5.8 moduli terze parti: guida pratica completa 2026</a> - come i moduli terze parti interagiscono con WP-Cron</li><li><a href="https://actionscheduler.org/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Action Scheduler documentation</a> - documentazione ufficiale Action Scheduler</li><li><a href="https://wordpress.org/plugins/wp-crontrol/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP Crontrol plugin</a> - plugin gratuito per visualizzare e gestire WP-Cron dal backend</li><li><a href="https://querymonitor.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Query Monitor plugin</a> - tool di debugging WordPress</li><li><a href="https://kinsta.com/apm-tool/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta APM</a> - Application Performance Monitoring integrato in Kinsta</li><li><a href="https://developer.wordpress.org/cli/commands/cron/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP-CLI cron command reference</a> - documentazione ufficiale comando wp cron</li><li><a href="https://man7.org/linux/man-pages/man5/crontab.5.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Linux crontab reference</a> - manuale crontab di sistema per task pesanti</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wp-cron-background-wordpress-performance-guida-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
