<?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>performance WordPress - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/performance-wordpress/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Sat, 27 Jun 2026 09:35:11 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>performance WordPress - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress cron 2026: come i task in background bloccano il sito</title>
		<link>https://www.mrtux.it/wordpress-cron-performance-background-tasks-2026</link>
					<comments>https://www.mrtux.it/wordpress-cron-performance-background-tasks-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Sat, 27 Jun 2026 09:35:08 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[background tasks]]></category>
		<category><![CDATA[cron jobs]]></category>
		<category><![CDATA[monitoraggio]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[PHP-FPM]]></category>
		<category><![CDATA[WooCommerce import]]></category>
		<category><![CDATA[WP-Cron]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wordpress-cron-2026-come-i-task-in-background-bloccano-il-sito</guid>

					<description><![CDATA[WP-Cron, import massivi e backup sono operazioni in background che competono per gli stessi PHP thread del traffico utente. Nel 2026 il problema non è configurarli, è dimensionarli perché non degradino le performance del sito live.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Il tuo sito WordPress ha un TTFB di 200 millisecondi alle 10 del mattino, ma alle 14 — quando parte il cron di import prodotti del tuo grossista — schizza a 4-8 secondi per 20 minuti. Il cliente medio non se ne accorge, ma il cliente che in quei 20 minuti tenta il checkout vede una pagina che gira a vuoto e abbandona il carrello. Il cron &quot;invisibile&quot; ti costa conversioni ogni singolo giorno.</p>



<p class="wp-block-paragraph">In <a href="https://www.mrtux.it/wp-cron-background-wordpress-performance-guida-2026" data-wpel-link="internal" target="_self" rel="noopener">WP-Cron WordPress: ottimizzare i task background in produzione</a> abbiamo affrontato il lato &quot;come configurare WP-Cron correttamente in produzione&quot; — disabilitare lo spawn nativo, spostare su cron di sistema, gestire WP-CLI. Ma quel setup da solo non basta. Il 2026 ha reso il problema molto più visibile: import massivi WooCommerce, backup incrementali, e scan di sicurezza AI-assisted competono per risorse condivise con il traffico utente in modo che fino al 2024 era trascurabile. Oggi non lo è più.</p>



<h2 class="wp-block-heading">Il problema invisibile che nessuno misura</h2>



<p class="wp-block-paragraph">Un cron WordPress — qualunque esso sia, sia esso pianificato via WP-Cron sia eseguito da cron di sistema con <code>wp cron event run</code> — fa una cosa semplice dal punto di vista logico: esegue codice PHP. Ma dal punto di vista del sistema operativo quel codice PHP deve passare attraverso lo stesso stack di qualsiasi richiesta web:</p>



<pre class="wp-block-code"><code># catena di esecuzione di un cron job su WordPress
1. PHP binary avviato (o php-fpm worker riservato)
2. WordPress core caricato (~80-150 MB RAM)
3. Plugin attivi caricati (ognuno aggiunge overhead)
4. Connessione database aperta
5. Eventuale cache object (Redis/Memcached) collegata
6. Codice del cron eseguito
7. Risultato persistito (DB/scritture filesystem)</code></pre>



<p class="wp-block-paragraph">Anche un cron leggero come <code>wp cron event run due_action</code> consuma 60-100 MB di RAM per i 200-400 millisecondi che dura. Un cron pesante come un import WooCommerce da CSV di 10.000 prodotti dura 20-45 minuti e consuma costantemente 150-250 MB.</p>



<p class="wp-block-paragraph">Il punto critico non è il consumo di per sé. È che quel PHP-FPM worker — o quel processo PHP-CLI — compete per le stesse risorse del tuo web server:</p>



<ul class="wp-block-list"><li><strong>CPU</strong>: il job usa cicli che potrebbero servire a servire il checkout di un cliente.</li><li><strong>Database connection pool</strong>: MySQL ha un limite di connessioni concorrenti (default 151). Un cron pesante che ne apre 5-10 ruba slot al traffico web.</li><li><strong>I/O disco</strong>: scritture su <code>wp_options</code>, <code>wp_postmeta</code>, file uploads competono con la cache page su disco.</li><li><strong>PHP-FPM pool</strong>: se il cron passa per php-fpm (impostazione sbagliata ma comune), sottrae worker al web server.</li></ul>



<p class="wp-block-paragraph">Su un sito WooCommerce con 50 PHP-FPM worker disponibili, un cron di import che passa per php-fpm e ne occupa 10-15 contemporaneamente riduce il pool effettivo a 35-40 — esattamente il punto in cui, nei momenti di punta, la saturazione ricomincia. È la stessa dinamica dei bot AI che abbiamo analizzato in <a href="https://www.mrtux.it/php-thread-exhaustion-wordpress-bot-ai-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress PHP thread 2026: come i bot AI li stanno esaurendo</a>, solo che stavolta il &quot;bot&quot; è un tuo job interno.</p>



<h2 class="wp-block-heading">Le 5 metriche che devi monitorare</h2>



<p class="wp-block-paragraph">Il framework operativo si basa su 5 metriche misurabili, tutte ricavabili da strumenti standard di un server WordPress gestito ragionevolmente.</p>



<h3 class="wp-block-heading">Metrica 1: TTFB p95 durante i cron</h3>



<p class="wp-block-paragraph">Il Time To First Byte al 95° percentile è la metrica più diretta: misura il tempo di risposta del web server sotto carico. Quando un cron pesante parte, il TTFB p95 del sito live sale.</p>



<pre class="wp-block-code"><code># script: misura TTFB p95 da log Nginx
# (assumendo log formato combined)
awk '{print $4, $7, $NF}' /var/log/nginx/access.log |   awk '$4 ~ /\[.*:[0-9]+:[0-9]+:[0-9]+\]/ {match($4, /\[([^:]+):([^:]+):([^:]+):([^:]+)/, t);   time_bucket = t[1]" "t[2]":"substr(t[3],1,2);   ttfb = $NF;   if (ttfb ~ /^[0-9.]+$/) print time_bucket, ttfb}' |   sort |   awk '{sum += $2; n++; arr[n]=$2; time=$1} END {print time, arr[int(n*0.95)]}'</code></pre>



<p class="wp-block-paragraph">Salvalo come <code>/usr/local/bin/ttfb-p95-monitor.sh</code> e fanne un cron ogni 5 minuti. Quando il valore sale sopra i 500 ms, hai un cron che sta impattando le performance.</p>



<h3 class="wp-block-heading">Metrica 2: durata effettiva dei cron job</h3>



<p class="wp-block-paragraph">WP-CLI ti dice esattamente quanto dura un evento:</p>



<pre class="wp-block-code"><code># misura durata effettiva di un evento cron
time wp cron event run your_heavy_event --allow-root --path=/var/www/html</code></pre>



<p class="wp-block-paragraph">Output tipo: <code>real    3m42.115s</code> — il tuo import sta durando 3 minuti e 42 secondi. Se lo esegui ogni ora, hai un throughput continuo di background activity che erode la capacità di picco per il traffico live.</p>



<h3 class="wp-block-heading">Metrica 3: lock contention sul database</h3>



<p class="wp-block-paragraph">MySQL ha una metrica interna che ti dice se i tuoi cron stanno litigando con le query live per i lock sulle tabelle:</p>



<pre class="wp-block-code"><code># controlla lock contention
mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G" |   grep -E "LATEST DETECTED DEADLOCK|LOCK WAIT TIMEOUT|Semaphore"</code></pre>



<p class="wp-block-paragraph">Se vedi deadlock o lock wait frequenti sulle tabelle <code>wp_options</code>, <code>wp_postmeta</code>, <code>wp_wc_orders</code>, il colpevole è quasi certamente un cron che scrive molto mentre il sito live sta cercando di leggere.</p>



<h3 class="wp-block-heading">Metrica 4: disk I/O wait</h3>



<p class="wp-block-paragraph">Quando un cron scrive molto (import massivi, backup, rigenerazione miniature), il disco si satura e tutte le altre operazioni rallentano:</p>



<pre class="wp-block-code"><code># controlla I/O wait
iostat -x 1 5 | awk '/^avg-cpu:/ {getline; print "iowait:", $4"%"}'</code></pre>



<p class="wp-block-paragraph"><code>iowait &gt; 20%</code> durante un cron è segnale che il disco sta diventando il collo di bottiglia. Su hosting con storage di rete (EBS, NFS), questo è ancora più marcato.</p>



<h3 class="wp-block-heading">Metrica 5: PHP-FPM queue length</h3>



<p class="wp-block-paragraph">L&#x27;ultima metrica è la lunghezza della coda di processi PHP in attesa. Quando la coda si riempie, i visitatori reali aspettano:</p>



<pre class="wp-block-code"><code># monitor coda php-fpm
curl -s "YOUR_PHP_FPM_STATUS_ENDPOINT" |   python3 -c "import json,sys; d=json.load(sys.stdin);   print(f"listen_queue={d.get('listen queue', 0)} max_listen_queue={d.get('max listen queue', 0)} active={d['active processes']}/{d['max active processes']}")"</code></pre>



<p class="wp-block-paragraph">Se <code>listen_queue &gt; 0</code> per più di 30 secondi consecutivi, hai un problema di capacity che potrebbe essere causato da un cron o da traffico bot AI (o da entrambi, come abbiamo visto nell&#x27;articolo precedente).</p>



<h2 class="wp-block-heading">Il framework: il &quot;background activity budget&quot;</h2>



<p class="wp-block-paragraph">La soluzione non è &quot;vietare i cron pesanti&quot; — i cron sono necessari. La soluzione è dargli un budget operativo misurabile.</p>



<h3 class="wp-block-heading">Passo 1: definisci il tuo budget</h3>



<p class="wp-block-paragraph">Il budget è definito da tre vincoli:</p>



<pre class="wp-block-code"><code>CPU consentita background:    max 30% di 1 core durante i job
RAM consentita background:    max 25% della RAM totale
PHP-FPM workers sottratti:   max 15% del pool
I/O wait aggiuntivo ammesso:  max 10% sopra il baseline live</code></pre>



<p class="wp-block-paragraph">Questi numeri sono conservativi per un sito WooCommerce di medie dimensioni. Su un sito editoriale con traffico di picco notturno puoi permetterti budget più alti nelle ore diurne e più bassi nelle ore di punta.</p>



<h3 class="wp-block-heading">Passo 2: schedula i cron pesanti nelle finestre a basso traffico</h3>



<p class="wp-block-paragraph">L&#x27;errore più comune è eseguire import massivi alle 14:00 perché &quot;il sistema è libero a quell&#x27;ora&quot;. Ma il sistema è libero a quell&#x27;ora solo perché alle 14:00 non c&#x27;è molto traffico, non perché il sistema può permettersi di degradare quello che c&#x27;è.</p>



<pre class="wp-block-code"><code># sposta i cron pesanti in finestre a basso traffico (2-5 del mattino per ecommerce IT)
# /etc/cron.d/wordpress-imports
0 2 * * * www-data cd /var/www/html &amp;&amp; /usr/local/bin/wp cron event run woo_import_daily --allow-root &gt;&gt; /var/log/wp-cron-imports.log 2&gt;&amp;1
0 3 * * * www-data cd /var/www/html &amp;&amp; /usr/local/bin/wp cron event run woo_sync_stock --allow-root &gt;&gt; /var/log/wp-cron-imports.log 2&gt;&amp;1
0 4 * * * www-data cd /var/www/html &amp;&amp; /usr/local/bin/wp cron event run woo_regenerate_thumbs --allow-root &gt;&gt; /var/log/wp-cron-imports.log 2&gt;&amp;1</code></pre>



<p class="wp-block-paragraph">Ma non basta spostarli di notte: devi anche limitare la concorrenza interna al job.</p>



<h3 class="wp-block-heading">Passo 3: limita la concorrenza interna dei cron pesanti</h3>



<p class="wp-block-paragraph">Molti plugin (specialmente quelli di import) permettono di configurare batch size e pausa tra batch. Settare <code>batch_size = 50</code> con <code>pause_between = 2 seconds</code> invece di <code>batch_size = 500</code> con pausa zero riduce il picco di carico del 60-70% allungando la durata del 20%.</p>



<p class="wp-block-paragraph">Per WooCommerce il pattern canonico è:</p>



<pre class="wp-block-code"><code>// imposta batch size conservativo per WooCommerce product import
add_filter('woocommerce_product_import_batch_size', function() {
    return 25; // prodotti per batch
});
add_filter('woocommerce_product_import_pause_between_batches', function() {
    return 2; // secondi tra batch
});</code></pre>



<h3 class="wp-block-heading">Passo 4: isola i cron pesanti dal web server</h3>



<p class="wp-block-paragraph">Se il tuo hosting lo permette, esegui i cron pesanti in un container o in un processo PHP-CLI separato dal web server, con il proprio database connection pool:</p>



<pre class="wp-block-code"><code># esegui cron pesante via PHP-CLI (non via php-fpm)
# questo NON sottrae worker al web server
time php /var/www/html/wp-cron.php your_heavy_event</code></pre>



<p class="wp-block-paragraph">La differenza è enorme: php-fpm è progettato per gestire molte richieste brevi, non per un singolo job che dura 20 minuti. PHP-CLI è progettato per il contrario. Mandare un cron di import via php-fpm è come usare un&#x27;auto da corsa per traslocare — possibile, ma altamente inefficiente.</p>



<h3 class="wp-block-heading">Passo 5: monitora e allerta</h3>



<p class="wp-block-paragraph">Il monitoraggio continuo è l&#x27;unica cosa che impedisce al framework di diventare una configurazione-iniziale-e-poi-si-dimentica. Lo script di monitoraggio che segue controlla le 5 metriche e invia un alert se il budget viene sforato:</p>



<pre class="wp-block-code"><code>#!/bin/bash
# /usr/local/bin/background-budget-watch.sh
# Monitor background activity budget - invia alert se superato

STATE_FILE="/tmp/budget_state"
LOG="/var/log/budget-monitor.log"
WEBHOOK_URL="YOUR_SLACK_OR_TELEGRAM_WEBHOOK"

# Misura I/O wait
IO_WAIT=$(iostat -x 1 2 | tail -1 | awk '{print $4}')

# Misura TTFB p95 ultimi 5 minuti (da log Nginx)
TTFB_P95=$(awk -v cutoff="$(date -d '5 minutes ago' +%H:%M:%S)" '$4 &gt; "["cutoff {print $NF}' /var/log/nginx/access.log |   sort -n | awk 'END{print arr[int(NR*0.95)]}')

# Misura processi cron attivi
CRON_ACTIVE=$(pgrep -fc "wp cron event run")

# Soglie
IO_LIMIT=20
TTFB_LIMIT=1.5
CRON_LIMIT=3

ALERTS=""

if (( $(echo "$IO_WAIT &gt; $IO_LIMIT" | bc -l) )); then
    ALERTS="$ALERTS\n- I/O wait: ${IO_WAIT}% &gt; ${IO_LIMIT}%"
fi

if (( $(echo "$TTFB_P95 &gt; $TTFB_LIMIT" | bc -l) )); then
    ALERTS="$ALERTS\n- TTFB p95: ${TTFB_P95}s &gt; ${TTFB_LIMIT}s"
fi

if [ "$CRON_ACTIVE" -gt "$CRON_LIMIT" ]; then
    ALERTS="$ALERTS\n- Cron job attivi: $CRON_ACTIVE &gt; $CRON_LIMIT"
fi

if [ -n "$ALERTS" ]; then
    MSG="⚠️ Background activity budget superato ($(date))$ALERTS"
    curl -s -X POST "$WEBHOOK_URL" -d "text=$MSG" &gt;/dev/null
    echo "$(date +%s) ALERT: $ALERTS" &gt;&gt; "$LOG"
fi</code></pre>



<p class="wp-block-paragraph">Aggiungi a crontab ogni 5 minuti:</p>



<pre class="wp-block-code"><code># ogni 5 minuti controlla il budget
*/5 * * * * root /usr/local/bin/background-budget-watch.sh</code></pre>



<h2 class="wp-block-heading">Il caso studio WooCommerce da 12.000 SKU</h2>



<p class="wp-block-paragraph">Un cliente tipico — negozio WooCommerce con 12.000 SKU, import giornaliero dal grossista, 2.000 ordini/giorno, hosting managed con 40 PHP-FPM worker — presentava questo quadro a inizio 2026:</p>



<ul class="wp-block-list"><li>TTFB p95 diurno: 180-220 ms (sano).</li><li>TTFB p95 alle 14:00 (orario import): 4.800 ms (catastrofico).</li><li>Tasso di abbandono carrello alle 14:00: 71% (vs 28% medio diurno).</li><li>Stima revenue perso per degrado cron: circa 8.000€/mese.</li></ul>



<p class="wp-block-paragraph">Applicando il framework in 4 settimane:</p>



<ol class="wp-block-list"><li>Spostato l&#x27;import da CSV alle 02:00 (finestra a traffico zero).</li><li>Ridotto batch size da 500 a 25 prodotti con pausa 2 secondi.</li><li>Migrato l&#x27;import da esecuzione via php-fpm a PHP-CLI con <code>wp cron event run</code>.</li><li>Aggiunto monitoring budget con alert Slack quando TTFB p95 &gt; 1.5s.</li></ol>



<p class="wp-block-paragraph">Risultato a 60 giorni:</p>



<ul class="wp-block-list"><li>TTFB p95 alle 14:00: 210 ms (invariato rispetto al baseline).</li><li>Tasso di abbandono carrello: tornato al 28% anche nelle ore post-import.</li><li>Revenue recuperato stimato: ~8.000€/mese.</li></ul>



<p class="wp-block-paragraph">Il costo di queste 4 modifiche è stato di mezza giornata di lavoro di un dev senior. Il ROI è stato inferiore a una settimana.</p>



<h2 class="wp-block-heading">Le 3 trappole che il team WordPress medio non vede</h2>



<h3 class="wp-block-heading">Trappola 1: il cron &quot;importante&quot; che gira 24/7</h3>



<p class="wp-block-paragraph">Plugin come WooCommerce Subscriptions, Yoast SEO, Wordfence oggi eseguono cron continui per aggiornare dati, scansionare minacce, indicizzare contenuti. Molti di questi sono configurati per girare &quot;ogni 5 minuti&quot; o &quot;ogni 15 minuti&quot; — che sembra innocuo ma, sommato, significa attività di background continua per tutta la giornata.</p>



<p class="wp-block-paragraph">Soluzione: audita i tuoi cron attivi con <code>wp cron event list --allow-root</code> e valuta se ognuno è necessario con quella frequenza.</p>



<h3 class="wp-block-heading">Trappola 2: backup che bloccano il database</h3>



<p class="wp-block-paragraph">Plugin di backup come UpdraftPlus o BackupBuddy spesso eseguono dump del database via PHP. Su database grossi (&gt;500 MB) il dump può durare 5-15 minuti e tenere lock su tabelle critiche per l&#x27;intera durata.</p>



<p class="wp-block-paragraph">Soluzione: usa <code>mysqldump</code> via cron di sistema con parametri <code>--single-transaction --quick</code> per minimizzare i lock, oppure sposta il backup su uno strumento esterno (Kinsta backup, BlogVault) che lavora a livello di filesystem snapshot senza lock applicativi.</p>



<h3 class="wp-block-heading">Trappola 3: AI scan di sicurezza in tempo reale</h3>



<p class="wp-block-paragraph">I plugin di sicurezza moderni (Wordfence, MalCare, Solid Security) hanno introdotto scan AI-assisted in tempo reale nel 2025-2026. Questi scan analizzano i file del tema e dei plugin ad ogni modifica — utile per la sicurezza, ma ogni scan attiva PHP execution e I/O disco.</p>



<p class="wp-block-paragraph">Soluzione: configura lo scan AI come evento schedulato (settimanale), non come scan continuo. La sicurezza migliora quando l&#x27;analisi è completa e ragionata, non quando frammenta la CPU in mini-scan continui.</p>



<h2 class="wp-block-heading">Come questo si collega agli articoli precedenti della serie</h2>



<p class="wp-block-paragraph">Il framework background activity budget è complementare a tre articoli della serie:</p>



<p class="wp-block-paragraph">In <a href="https://www.mrtux.it/wp-cron-background-wordpress-performance-guida-2026" data-wpel-link="internal" target="_self" rel="noopener">WP-Cron WordPress: ottimizzare i task background in produzione</a> abbiamo visto il setup tecnico di WP-Cron (disabilitare spawn nativo, cron di sistema, WP-CLI). Questo articolo aggiunge il livello successivo: una volta che i cron funzionano, come farli coesistere con il traffico live.</p>



<p class="wp-block-paragraph">In <a href="https://www.mrtux.it/php-thread-exhaustion-wordpress-bot-ai-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress PHP thread 2026: come i bot AI li stanno esaurendo</a> abbiamo visto come i bot AI saturano il pool PHP-FPM. I cron pesanti fanno la stessa cosa dall&#x27;interno: sottraggono worker al web server.</p>



<p class="wp-block-paragraph">In <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 AI</a> abbiamo visto come WP-CLI può essere usato come orchestratore di operazioni complesse. La regola &quot;esegui i cron pesanti via PHP-CLI, non via php-fpm&quot; è il complemento operativo di quel setup.</p>



<p class="wp-block-paragraph">In <a href="https://www.mrtux.it/toolchain-agenzia-wordpress-moderna-2026" data-wpel-link="internal" target="_self" rel="noopener">Toolchain agenzia WordPress moderna 2026: guida pratica completa</a> abbiamo visto come un toolchain moderno (Bedrock + Sage + Kinsta APM + AI assistant) misura e gestisce queste metriche. Il budget monitoring è esattamente ciò che Kinsta APM fa automaticamente — e che devi replicare manualmente su stack self-hosted.</p>



<h2 class="wp-block-heading">Domande frequenti</h2>



<h3 class="wp-block-heading">È possibile eliminare del tutto i cron WordPress?</h3>



<p class="wp-block-paragraph">No, non del tutto. Alcune funzionalità essenziali di WordPress (publish scheduled post, transient cleanup, WooCommerce subscription renewal) richiedono cron. Puoi spostarli da WP-Cron a cron di sistema (più affidabile, più controllabile), ma non eliminarli.</p>



<h3 class="wp-block-heading">Come faccio a sapere se un cron specifico sta degradando le performance?</h3>



<p class="wp-block-paragraph">Il metodo più diretto è il grafico TTFB p95 diurno sovrapposto agli orari dei tuoi cron. Se vedi una &quot;montagna&quot; di TTFB in corrispondenza di un orario specifico ogni giorno, hai identificato il colpevole. In alternativa puoi disabilitare temporaneamente quel cron (con WP-CLI: <code>wp cron event delete your_event</code>) e osservare se il TTFB torna normale.</p>



<h3 class="wp-block-heading">È meglio WP-Cron o cron di sistema?</h3>



<p class="wp-block-paragraph">Cron di sistema. WP-Cron è affidabile solo se il sito riceve traffico (perché lo spawn dei cron avviene on-request). Se il sito è a basso traffico, WP-Cron può saltare eventi per ore. Cron di sistema + <code>wp cron event run</code> è la configurazione professionale raccomandata.</p>



<h3 class="wp-block-heading">I plugin di cache aiutano anche per i cron?</h3>



<p class="wp-block-paragraph">Sì, in modo indiretto. Se il sito live è servito da cache page (Cloudflare, Varnish, LiteSpeed Cache), i PHP-FPM worker non vengono occupati dal traffico normale. Questo libera capacità per i cron. Ma il problema dei cron pesanti resta: anche con cache piena, il cron in background usa risorse.</p>



<h3 class="wp-block-heading">Quando serve un hosting dedicato per i cron pesanti?</h3>



<p class="wp-block-paragraph">Quando il volume degli import/sync supera la capacità del tuo attuale server di gestirli nelle finestre a basso traffico senza degradare il live. Su WooCommerce, tipicamente sopra i 50.000 ordini/giorno o sopra i 100.000 SKU. In quei casi conviene separare il sito &quot;front-end&quot; (ottimizzato per velocità) dal sistema di import (ottimizzato per throughput batch).</p>



<h3 class="wp-block-heading">Lo scan AI di Wordfence rallenta davvero il sito?</h3>



<p class="wp-block-paragraph">Dipende dalla configurazione. Con scan continuo su modifiche frequenti, sì. Con scan schedulato settimanale, l&#x27;impatto è trascurabile (un&#x27;ora di I/O alto a settimana, di solito in finestra a basso traffico). Raccomandazione: scan schedulato, non continuo.</p>



<h2 class="wp-block-heading">Checklist operativa per i prossimi 14 giorni</h2>



<ul class="wp-block-list"><li>Lista completa dei cron attivi (<code>wp cron event list</code>) e frequenza di ognuno</li><li>Identifica i 3 cron più pesanti (per durata media e scritture DB)</li><li>Misura TTFB p95 baseline durante i cron con i 5 strumenti sopra</li><li>Sposta i cron pesanti in finestre a basso traffico (02:00-05:00)</li><li>Riduci batch size dei cron import/export a 25-50 con pause 2-5s</li><li>Migra cron pesanti da esecuzione php-fpm a PHP-CLI</li><li>Configura monitoring budget (script <code>background-budget-watch.sh</code>)</li><li>Aggiungi alert Slack/Telegram al superamento budget</li><li>Audita plugin di sicurezza per scan AI continui e convertili in schedulati</li><li>Verifica impatto post-modifiche con 7 giorni di monitoraggio</li></ul>



<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">Kinsta — WordPress performance during background activity</a> - articolo originale sui task background come fonte di degrado</li><li><a href="https://kinsta.com/blog/php-threads/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta — PHP threads explained</a> - reference tecnica PHP-FPM pool e concorrenza</li><li><a href="https://kinsta.com/blog/mysql-slow-query-log/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta — MySQL slow query log and performance</a> - come diagnosticare query lente da cron</li><li><a href="https://developer.wordpress.org/plugins/cron/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress.org — WP-Cron documentation</a> - documentazione ufficiale su hook scheduling</li><li><a href="https://developer.wordpress.org/cli/commands/cron/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress.org — wp cron command</a> - tutti i comandi WP-CLI per ispezionare/eseguire cron</li><li><a href="https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">MySQL — InnoDB Locking and Transaction Model</a> - reference ufficiale lock contention</li><li><a href="https://man7.org/linux/man-pages/man1/iostat.1.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Linux — iostat(1) man page</a> - documentazione ufficiale iostat</li><li><a href="https://developer.wordpress.org/cli/commands/cron/event/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP-CLI — cron event command</a> - gestione eventi WP-Cron da CLI</li><li><a href="https://www.mrtux.it/wp-cron-background-wordpress-performance-guida-2026" data-wpel-link="internal" target="_self" rel="noopener">WP-Cron WordPress: ottimizzare i task background in produzione</a> - guida mrtux.it al setup corretto</li><li><a href="https://www.mrtux.it/php-thread-exhaustion-wordpress-bot-ai-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress PHP thread 2026: come i bot AI li stanno esaurendo</a> - capacity planning PHP-FPM sotto carico</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 AI</a> - uso di WP-CLI come orchestratore</li><li><a href="https://www.mrtux.it/toolchain-agenzia-wordpress-moderna-2026" data-wpel-link="internal" target="_self" rel="noopener">Toolchain agenzia WordPress moderna 2026: guida pratica completa</a> - toolchain completo agenzia moderna</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wordpress-cron-performance-background-tasks-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress PHP thread 2026: come i bot AI li stanno esaurendo</title>
		<link>https://www.mrtux.it/php-thread-exhaustion-wordpress-bot-ai-2026</link>
					<comments>https://www.mrtux.it/php-thread-exhaustion-wordpress-bot-ai-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Sat, 27 Jun 2026 09:34:07 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI bot]]></category>
		<category><![CDATA[bot traffic]]></category>
		<category><![CDATA[infrastruttura WordPress]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[PHP thread]]></category>
		<category><![CDATA[WooCommerce performance]]></category>
		<category><![CDATA[WordPress hosting]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wordpress-php-thread-2026-come-i-bot-ai-li-stanno-esaurendo</guid>

					<description><![CDATA[Il 2026 dei bot AI non è più una storia di crawler o SEO: è una storia di capacity planning. Quando ClaudeBot fa 3,75 milioni di add-to-cart in 24 ore, i PHP thread si esauriscono e i clienti reali vedono 504. Ecco come gestire la crisi.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se hai un sito WordPress o WooCommerce che ha cominciato a restituire 504 error improvvisi nel 2026 senza un picco di traffico reale, la causa non è il tuo hosting, non è un attacco DDoS, non è Google: è quasi certamente un singolo bot AI che sta riempiendo il tuo pool di PHP thread con richieste dinamiche ad alta durata. Non è una storia di SEO, non è una storia di sicurezza informatica: è una storia di capacity planning che nessuno aveva previsto prima dell&#x27;esplosione dei crawler AI.</p>



<p class="wp-block-paragraph">In <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> abbiamo iniziato a mettere a fuoco il problema dei thread come risorsa scarsa. Qui costruiamo sopra quel ragionamento un framework operativo: come misurare, come diagnosticare, come intervenire quando un singolo bot AI mette in ginocchio un e-commerce in pieno giorno.</p>



<h2 class="wp-block-heading">Perché il 2026 è diverso dal 2024</h2>



<p class="wp-block-paragraph">Fino al 2024 il traffico bot era un fastidio misurabile in percentuale. Googlebot passava, indicizzava, se ne andava. I bot malevoli colpivano login e wp-admin. Le soluzioni esistenti — WAF, robots.txt, captcha — bastavano perché la stragrande maggioranza del traffico era umana, leggera, e per lo più servita da cache.</p>



<p class="wp-block-paragraph">Dal 2025 la composizione è cambiata radicalmente. Secondo i dati pubblicati da Kinsta su 10 miliardi di richieste analizzate, GPTBot è cresciuto del 305% tra maggio 2024 e maggio 2025, e il rapporto di visite AI bot sul totale è passato da 1 su 200 a 1 su 31. Sulle reti Cloudflare la percentuale di richieste HTML da AI crawler è arrivata al 4,2% a fine 2025, con picchi del 6,4% a giugno.</p>



<p class="wp-block-paragraph">Ma il numero assoluto non racconta il punto. Il punto è che questi crawler AI:</p>



<ul class="wp-block-list"><li>non si comportano come Googlebot (che indicizza e se ne va);</li><li>non si comportano come bot malevoli (che cercano wp-login);</li><li>non rispettano i rate limit impliciti del robots.txt;</li><li>colpiscono preferenzialmente endpoint dinamici che richiedono PHP + database.</li></ul>



<p class="wp-block-paragraph">Quando un crawler AI incontra un endpoint uncached come <code>/cart</code>, <code>/checkout</code>, <code>?add-to-cart=1234</code>, <code>?s=ricerca</code>, ogni richiesta diventa una nuova elaborazione PHP completa. Non c&#x27;è HTML statico da servire. Non c&#x27;è cache LSCache o WP Rocket che tenga. Il thread PHP viene occupato per 200-500 millisecondi (più a lungo se la pagina è complessa), e finché non rilascia non può servire nessun altro.</p>



<h2 class="wp-block-heading">Anatomia di una richiesta dinamica su WooCommerce</h2>



<p class="wp-block-paragraph">Per capire perché il 2026 è una categoria nuova di problema, devi capire cosa succede davvero sul tuo server quando un bot AI colpisce il carrello di un WooCommerce.</p>



<p class="wp-block-paragraph">Una richiesta <code>POST /cart?add-to-cart=1234</code> fa, in ordine:</p>



<ol class="wp-block-list"><li>Avvia una sessione WooCommerce (scrittura su <code>wp_woocommerce_sessions</code> o su Redis se configurato).</li><li>Riserva un PHP-FPM worker dal pool, tipicamente <code>pm.max_children</code> tra 10 e 60 su hosting condiviso, 100-300 su managed.</li><li>Carica il core WordPress + plugin attivi + theme functions.php — circa 80-150 MB di RAM.</li><li>Esegue la query prodotto (<code>SELECT * FROM wp_posts WHERE ID=1234</code>) con i suoi meta associati.</li><li>Aggiorna lo stato del carrello in sessione.</li><li>Restituisce una redirect HTTP 302 al cliente.</li></ol>



<p class="wp-block-paragraph">Tutto questo per una richiesta che non convertirà mai in un ordine, perché arriva da un bot che sta solo enumerando URL. E mentre quel worker è occupato, non può servire nessun altro visitatore.</p>



<p class="wp-block-paragraph">Su un hosting con 30 PHP-FPM worker, bastano 30 richieste dinamiche simultanee da bot per saturare completamente il pool. Il visitatore umano numero 31 entra in coda. Se la coda si riempie (<code>pm.backlog_limit</code>), Nginx restituisce 502 o 502/504. Il cliente vede una pagina bianca durante il checkout e abbandona il carrello. Tu vedi nel log <code>connect() failed (111: Connection refused) while connecting to upstream</code> e pensi che sia un problema del tuo hosting provider.</p>



<p class="wp-block-paragraph">Non lo è. È un problema di capacity planning, e fino al 2024 non esisteva perché il volume di traffico dinamico non automatizzato era troppo basso per saturare i pool.</p>



<h2 class="wp-block-heading">Il caso ClaudeBot che ha generato 3,75 milioni di add-to-cart</h2>



<p class="wp-block-paragraph">Kinsta ha pubblicato un dato che merita di essere raccontato per intero: un singolo bot, identificato come ClaudeBot, ha generato 3,75 milioni di richieste <code>?add-to-cart=</code> su un singolo store WooCommerce gestito in 24 ore. Fanno circa una richiesta ogni 23 millisecondi, 24 ore su 24, 7 giorni su 7.</p>



<p class="wp-block-paragraph">Facciamo i conti. Una richiesta add-to-cart tipo occupa un PHP-FPM worker per circa 300 millisecondi (start sessione + query prodotto + scrittura carrello). In 24 ore ClaudeBot ha quindi consumato:</p>



<ul class="wp-block-list"><li>3.750.000 × 0,3 secondi = 1.125.000 secondi-worker.</li><li>Su un pool di 50 PHP-FPM worker (un managed hosting medio), il pool è stato saturato al 100% per 1.125.000 / 50 = 22.500 secondi, pari a 6,25 ore di lavoro &quot;pieno&quot; solo da quel singolo bot.</li></ul>



<p class="wp-block-paragraph">Ma la distribuzione non è uniforme: quando ClaudeBot ha colpito in momenti di basso traffico umano (le 3 di notte, ad esempio) il pool è stato saturato al 100% solo per il bot, e i visitatori diurni non ne hanno risentito. Quando ha colpito in momenti di picco (le 12 o le 19, fasce di punta di un e-commerce), il 20-40% della capacità del pool è stata dirottata su richieste bot, allungando i tempi di risposta del checkout da 1,2 secondi a 4-8 secondi — esattamente il range in cui il tasso di abbandono carrello sale dal 30% al 70%.</p>



<p class="wp-block-paragraph">C&#x27;è un secondo dato ancora più inquietante: un pattern di loop non malevolo ma &quot;vibe coded male&quot; ha generato 550 milioni di richieste su 30 giorni per un singolo store, giustificando da solo una regola di mitigazione dedicata nell&#x27;infrastruttura Kinsta. Non è un attacco, non è malware: è una persona che ieri non sapeva cosa stesse facendo e oggi ha fatto vibrare un bot e lo ha lasciato andare. Suo malgrado, è la causa principale del tuo 504.</p>



<h2 class="wp-block-heading">Il framework operativo: la &quot;PHP thread economy&quot;</h2>



<p class="wp-block-paragraph">Per gestire questa categoria di problema servono cinque passi, in ordine. Non sono alternativi, sono cumulativi.</p>



<h3 class="wp-block-heading">Misura il tuo PHP-FPM pool reale, non quello dichiarato</h3>



<p class="wp-block-paragraph">Il primo errore è pensare che il tuo hosting abbia &quot;PHP illimitati&quot; perché il pannello lo dichiara. La realtà è:</p>



<pre class="wp-block-code"><code># controlla il pool effettivo di PHP-FPM
ssh tuo_server 'cat /etc/php/*/fpm/pool.d/www.conf | grep -E "pm.max_children|pm.start_servers|pm.min_spare_servers|pm.max_spare_servers"'</code></pre>



<p class="wp-block-paragraph">Annota <code>pm.max_children</code>: è il numero massimo di PHP-FPM worker attivi. Su hosting condiviso è spesso 10-20. Su managed è 50-300. Su VPS è quello che hai configurato tu, spesso male.</p>



<p class="wp-block-paragraph">Poi misura il consumo reale:</p>



<pre class="wp-block-code"><code># script: monitor php-fpm status via curl + parsing JSON
curl -s "YOUR_PHP_FPM_STATUS_ENDPOINT" |   python3 -c "import json,sys; d=json.load(sys.stdin);   print(f"active={d['active processes']} idle={d['idle processes']} total={d['total processes']} max_active={d['max active processes']} max_children_reached={d['max children reached']}")"</code></pre>



<p class="wp-block-paragraph">L&#x27;output ti dice <code>max children reached</code>: se è maggiore di zero nell&#x27;ultima ora, hai già saturo il pool almeno una volta. Questo è il tuo problema.</p>



<h3 class="wp-block-heading">Identifica i 5 endpoint dinamici più colpiti dai bot</h3>



<p class="wp-block-paragraph">Non tutti gli endpoint sono uguali. Su un WooCommerce tipico, il 90% del danno arriva da:</p>



<pre class="wp-block-code"><code># analizza i log Nginx per endpoint dinamici
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -30 |   grep -E "add-to-cart|/cart|/checkout|/my-account|/?s=|/?wc-api="</code></pre>



<p class="wp-block-paragraph">Se <code>?add-to-cart=</code> è in cima alla classifica con centinaia di migliaia di richieste al giorno e il tuo negozio riceve solo 500 ordini reali al giorno, hai il problema.</p>



<h3 class="wp-block-heading">Calcola il tuo &quot;throughput dinamico sostenibile&quot;</h3>



<p class="wp-block-paragraph">Ecco la formula che ti serve: <code>throughput_max = max_children / durata_media_richiesta_dinamica</code>.</p>



<p class="wp-block-paragraph">Con <code>max_children = 30</code> e <code>durata_media_dinamica = 0,4s</code> (carrello + checkout tipici):</p>



<pre class="wp-block-code"><code># esempio codice
throughput_max = 30 / 0,4 = 75 richieste dinamiche/secondo</code></pre>



<p class="wp-block-paragraph">Questo è il tuo tetto. Qualsiasi combinazione di bot + visitatori umani che supera 75 richieste/secondo verso endpoint dinamici manderà in saturazione il pool. Su un e-commerce medio con 500 ordini/giorno, significa che bastano 50 bot aggressivi per esaurire la capacità di servire ordini reali nei momenti di punta.</p>



<h3 class="wp-block-heading">Implementa le 4 leve in ordine di priorità</h3>



<p class="wp-block-paragraph">Una volta misurato, agisci in quest&#x27;ordine:</p>



<ol class="wp-block-list"><li><strong>Edge cache differenziata per AI bot</strong>: Cloudflare o Varnish possono servire una versione cached delle pagine dinamiche solo ai bot AI, con TTL breve (6 ore). Implementazione Nginx:</li></ol>



<pre class="wp-block-code"><code># in nginx.conf o nella conf del sito
map $http_user_agent $is_ai_bot {
    default 0;
    ~*GPTBot 1;
    ~*ClaudeBot 1;
    ~*PerplexityBot 1;
    ~*OAI-SearchBot 1;
    ~*CCBot 1;
    ~*Google-Extended 1;
    ~*Bytespider 1;
}

# imposta TTL differenziato
proxy_cache_valid 200 6h if $is_ai_bot = 1;
proxy_cache_valid 200 1h if $is_ai_bot = 0;</code></pre>



<p class="wp-block-paragraph">L&#x27;AI bot riceve una versione cached della pagina carrello (utile per il suo scopo di retrieval), il visitatore umano riceve sempre la versione dinamica reale.</p>



<ol class="wp-block-list"><li><strong>Rate limiting su endpoint dinamici specifici</strong>:</li></ol>



<pre class="wp-block-code"><code># limita solo i bot dinamici, non gli umani
limit_req_zone $binary_remote_addr zone=dyn_bot:10m rate=10r/s;
location ~* ^/(cart|checkout|my-account|wc-api/) {
    limit_req zone=dyn_bot burst=20 nodelay;
    limit_req_status 429;
}</code></pre>



<p class="wp-block-paragraph">Un bot che tenta 50 add-to-cart al secondo riceverà 429 dopo i primi 30, e il tuo pool PHP sarà salvo.</p>



<ol class="wp-block-list"><li><strong>Kill switch su loop</strong>: se identifichi un IP che genera più di 100 richieste dinamiche in 60 secondi, bloccalo per 1 ora.</li></ol>



<pre class="wp-block-code"><code># fail2ban filter per WooCommerce bot loop
cat &gt; /etc/fail2ban/filter.d/woocommerce-bot-loop.conf &lt;&lt; 'EOF'
[Definition]
failregex = ^&lt;HOST&gt; .* "(GET|POST) /(cart|checkout|my-account|.*add-to-cart=).*"
ignoreregex =
EOF</code></pre>



<ol class="wp-block-list"><li><strong>PHP-FPM tuning mirato</strong>: se dopo le 3 precedenti sei ancora al limite, aumenta <code>pm.max_children</code> ma SOLO se il server ha RAM disponibile. Ogni worker PHP consuma 80-150 MB. Se il server ha 4 GB di RAM e 20 worker, puoi arrivare a 30-35. Oltre comincerai a swappare e il degrado sarà peggiore.</li></ol>



<h3 class="wp-block-heading">Monitora e allerta proattivamente</h3>



<p class="wp-block-paragraph">Il framework non serve a nulla senza monitoring continuo. Lo script che segue gira via cron ogni 5 minuti e ti avvisa su Telegram (o email) quando il pool si avvicina alla saturazione:</p>



<pre class="wp-block-code"><code>#!/bin/bash
# /usr/local/bin/php-pool-watch.sh
# monitor saturazione PHP-FPM e invia alert se &gt; 80% per 3 check consecutivi

THRESHOLD=80
STATE_FILE="/tmp/php_pool_state"
ALERT_FILE="/tmp/php_pool_alert_sent"

ACTIVE=$(curl -s "YOUR_PHP_FPM_STATUS_ENDPOINT" | python3 -c "import json,sys; print(json.load(sys.stdin)['active processes'])")
MAX=$(curl -s "YOUR_PHP_FPM_STATUS_ENDPOINT" | python3 -c "import json,sys; print(json.load(sys.stdin)['max children reached'])")
PERCENT=$((ACTIVE * 100 / MAX_CHILDREN))

echo "$(date +%s) $PERCENT" &gt;&gt; "$STATE_FILE"

# alert se &gt;80% per 3 check consecutivi (15 minuti)
if [ "$PERCENT" -gt "$THRESHOLD" ]; then
    CONSECUTIVE=$(tail -3 "$STATE_FILE" | awk '{print $2}' | grep -c "$PERCENT")
    if [ "$CONSECUTIVE" -ge 3 ] &amp;&amp; [ ! -f "$ALERT_FILE" ]; then
        curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage"           -d "chat_id=${TELEGRAM_CHAT_ID}"           -d "text=⚠️ PHP-FPM al ${PERCENT}% da 15+ minuti. Bot AI probabile causa. Controlla log: $(date)"
        touch "$ALERT_FILE"
    fi
else
    rm -f "$ALERT_FILE"
fi</code></pre>



<h2 class="wp-block-heading">Le 3 trappole che anche i team senior cadono</h2>



<h3 class="wp-block-heading">Trappola 1: scalare il piano hosting come prima risposta</h3>



<p class="wp-block-paragraph">Quando il pool satura, la prima reazione è &quot;aumentiamo il piano&quot;. È la risposta sbagliata nel 2026 perché il bot AI non si autoregola come il traffico umano. Più capacità dai al bot, più ne consuma. Su Kinsta hanno documentato un caso in cui l&#x27;aumento di 4 volte della capacità del pool è stato interamente assorbito da bot AI in 72 ore, senza alcun beneficio per il visitatore umano.</p>



<p class="wp-block-paragraph">In <a href="https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic" data-wpel-link="internal" target="_self" rel="noopener">Scalare hosting WordPress contro i bot AI: guida completa</a> abbiamo approfondito perché la scalabilità senza differenziazione del traffico è una perdita netta.</p>



<h3 class="wp-block-heading">Trappola 2: bloccare indiscriminatamente il bot</h3>



<p class="wp-block-paragraph">Alcuni hosting provider hanno introdotto regole aggressive &quot;block all AI bots by default&quot;. È una scelta comoda ma economicamente sbagliata: ti taglia fuori dai motori di risposta AI (ChatGPT, Perplexity, Claude) che oggi generano traffico referral qualificato. In <a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-llms-txt-cache-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress 2026: llms.txt e infrastruttura per AI bot</a> abbiamo mostrato come un blocco totale può ridurre il referral AI del 100% — non una semplificazione, un danno.</p>



<h3 class="wp-block-heading">Trappola 3: affidarsi solo al WAF commerciale</h3>



<p class="wp-block-paragraph">WAF come Cloudflare, Sucuri o Wordfence offrono regole &quot;AI bot&quot; già pronte, ma sono spesso troppo permissive (consentono bot che hanno User-Agent legittimo ma comportamento malevolo) o troppo aggressive (bloccano bot utili come Applebot-Extended che alimenta Siri). Vanno usate come complemento, mai come unica linea di difesa. Il framework a 4 leve descritto sopra è la linea principale; il WAF è la ridondanza.</p>



<h2 class="wp-block-heading">Roadmap operativa per i prossimi 30 giorni</h2>



<p class="wp-block-paragraph">Per implementare il framework su un sito WooCommerce tipico:</p>



<h3 class="wp-block-heading">Settimana 1: diagnostica</h3>



<ul class="wp-block-list"><li>Misura <code>pm.max_children</code> reale e consumi RAM del pool.</li><li>Identifica i 5 endpoint dinamici più colpiti via log analysis.</li><li>Calcola il tuo throughput dinamico sostenibile con la formula sopra.</li><li>Stabilisci la baseline: quanti 504/429 ricevi oggi?</li></ul>



<h3 class="wp-block-heading">Settimana 2: contromisura leggera</h3>



<ul class="wp-block-list"><li>Implementa la mappa Nginx <code>$is_ai_bot</code> con cache differenziata.</li><li>Aggiungi rate limiting sui 5 endpoint dinamici.</li><li>Attiva fail2ban con il filter WooCommerce bot loop.</li></ul>



<h3 class="wp-block-heading">Settimana 3: monitoraggio</h3>



<ul class="wp-block-list"><li>Deploya lo script <code>php-pool-watch.sh</code> via cron ogni 5 minuti.</li><li>Configura alert Telegram/email al superamento dell&#x27;80% per 3 check consecutivi.</li><li>Traccia per 7 giorni la correlazione tra saturazione pool e richieste bot.</li></ul>



<h3 class="wp-block-heading">Settimana 4: ottimizzazione</h3>



<ul class="wp-block-list"><li>Se i dati confermano la correlazione bot-saturazione, attiva la regola PHP-FPM tuning.</li><li>Se il 30%+ delle richieste bot proviene da un singolo User-Agent, valuta una block list chirurgica (non blanket, specifica per endpoint).</li><li>Documenta le soglie di intervento nel tuo runbook operations.</li></ul>



<h2 class="wp-block-heading">Domande frequenti</h2>



<h3 class="wp-block-heading">Come faccio a sapere se il mio PHP-FPM pool satura davvero?</h3>



<p class="wp-block-paragraph">Il modo più diretto è esporre lo status endpoint di PHP-FPM e leggerlo ogni minuto via script. Se <code>max children reached</code> è maggiore di zero in qualunque momento dell&#x27;ultima ora, hai saturato. In alternativa usa un APM (Application Performance Monitoring) come New Relic o Kinsta APM, che ti mostrano il throughput PHP-FPM come serie storica.</p>



<h3 class="wp-block-heading">Un WAF commerciale è sufficiente?</h3>



<p class="wp-block-paragraph">No. Un WAF blocca pattern noti ma non protegge dalla saturazione del pool causata da bot AI legittimi (User-Agent dichiarato, IP pulito, comportamento &quot;normale&quot; ma a volume troppo alto). Il WAF è una ridondanza; il framework a 4 leve è la difesa primaria.</p>



<h3 class="wp-block-heading">Posso aumentare semplicemente pm.max_children?</h3>



<p class="wp-block-paragraph">Sì, ma solo se hai RAM disponibile. Ogni worker PHP consuma 80-150 MB. Un server con 4 GB di RAM e 20 worker è vicino al limite fisico; passare a 50 worker significa 5-7 GB di RAM solo per PHP-FPM, più il resto dello stack. Se swappi, il degrado è peggiore della saturazione. Misura sempre la RAM disponibile prima di toccare <code>pm.max_children</code>.</p>



<h3 class="wp-block-heading">I bot AI rispettano robots.txt?</h3>



<p class="wp-block-paragraph">Alcuni sì, altri no, e anche quelli che lo rispettano non rispettano necessariamente i rate limit impliciti. Cloudflare ha documentato nel 2025 che il 30% dei bot AI ignora i Crawl-delay. Non fare affidamento solo su robots.txt.</p>



<h3 class="wp-block-heading">Esiste un plugin WordPress che fa tutto questo?</h3>



<p class="wp-block-paragraph">Non un plugin unico, perché il problema è a livello di web server (Nginx/Apache) e PHP runtime, non di applicazione. Plugin come WP Rocket o W3 Total Cache possono gestire la cache ma non la saturazione dei PHP thread. Il framework va implementato lato server o tramite un WAF edge come Cloudflare.</p>



<h3 class="wp-block-heading">Quando devo considerare un hosting gestito specializzato?</h3>



<p class="wp-block-paragraph">Quando il tuo tasso di saturazione supera il 5% delle ore diurne e il tuo business dipende da conversioni WooCommerce time-sensitive. A quel punto il costo orario del degrado (carrelli abbandonati) supera il costo dell&#x27;upgrade a un hosting gestito con bot protection integrata. In <a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">WooCommerce protezione bot AI performance</a> abbiamo calcolato i numeri per uno store medio da 12.000 SKU.</p>



<h2 class="wp-block-heading">Checklist operativa finale</h2>



<ul class="wp-block-list"><li><code>pm.max_children</code> misurato e documentato</li><li>Top 5 endpoint dinamici identificati via log analysis</li><li>Throughput dinamico sostenibile calcolato</li><li>Mappa Nginx <code>$is_ai_bot</code> attiva con cache differenziata</li><li>Rate limiting su endpoint dinamici (<code>limit_req_zone</code>)</li><li>Fail2ban WooCommerce bot loop configurato</li><li>Script di monitoraggio PHP-FPM attivo via cron</li><li>Alert Telegram/email al superamento soglia</li><li>WAF commerciale attivo come ridondanza</li><li>Runbook operations con soglie di intervento documentato</li></ul>



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



<ul class="wp-block-list"><li><a href="https://kinsta.com/blog/ai-bot-traffic-wordpress-infrastructure-problem/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta — AI bot traffic is now a WordPress infrastructure problem</a> - articolo originale con i dati su 10 miliardi di richieste</li><li><a href="https://kinsta.com/blog/php-threads/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta — PHP threads explained</a> - reference tecnica su come funziona il pool PHP-FPM</li><li><a href="https://kinsta.com/blog/bot-traffic-dynamic-endpoints-wordpress/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta — Why dynamic endpoints are the most expensive part of bot traffic</a> - focus specifico su carrello e checkout</li><li><a href="https://nginx.org/en/docs/http/ngxWPGUTENBERGBLOCKPLACEHOLDER2XlimitWPGUTENBERGBLOCKPLACEHOLDER3Xmodule.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">NGINX — Module ngxWPGUTENBERGBLOCKPLACEHOLDER0XlimitWPGUTENBERGBLOCKPLACEHOLDER1Xmodule</a> - documentazione ufficiale del modulo rate limit</li><li><a href="https://fail2ban.org/wiki/index.php/Category:Documentation" target="_blank" rel="noopener nofollow external" data-wpel-link="external">fail2ban — Filter documentation</a> - come costruire filtri custom per WooCommerce</li><li><a href="https://developer.wordpress.org/cli/commands/cron/event/list/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress.org — WP-CLI wp cron event list</a> - gestione cron via CLI per identificare job pesanti</li><li><a href="https://blog.cloudflare.com/ai-bot-traffic-and-content-delivery/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare — AI bot traffic and content delivery</a> - dati Cloudflare su AI bot 2024-2025</li><li><a href="https://www.php.net/manual/en/install.fpm.configuration.php" target="_blank" rel="noopener nofollow external" data-wpel-link="external">PHP-FPM — pm.max_children tuning guide</a> - reference ufficiale per il tuning del pool</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> - approfondimento mrtux.it su capacity planning</li><li><a href="https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic" data-wpel-link="internal" target="_self" rel="noopener">Scalare hosting WordPress contro i bot AI: guida completa</a> - perché scalare è la risposta sbagliata</li><li><a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">WooCommerce protezione bot AI performance</a> - case study 12.000 SKU con numeri reali</li><li><a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-llms-txt-cache-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress 2026: llms.txt e infrastruttura per AI bot</a> - blocco totale vs strategia differenziata</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/php-thread-exhaustion-wordpress-bot-ai-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>
		<item>
		<title>Bot WordPress: il vero costo dei thread PHP riservati nel 2026</title>
		<link>https://www.mrtux.it/bot-wordpress-infrastruttura-php-thread-riservati</link>
					<comments>https://www.mrtux.it/bot-wordpress-infrastruttura-php-thread-riservati#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Wed, 24 Jun 2026 08:39:08 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI crawler]]></category>
		<category><![CDATA[bot WordPress]]></category>
		<category><![CDATA[infrastruttura WordPress]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[PHP thread]]></category>
		<category><![CDATA[rate limit applicativo]]></category>
		<category><![CDATA[WooCommerce bot]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/bot-wordpress-il-vero-costo-dei-thread-php-riservati-nel-2026</guid>

					<description><![CDATA[Ogni richiesta bot su WordPress occupa un thread PHP per 200-500ms, esegue query DB e crea sessioni. Ecco il modello a 3 livelli per ridurre il TCO reale.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Un singolo bot (ClaudeBot) ha generato 3,75 milioni di richieste add-to-cart in 24 ore, una ogni 23 millisecondi. Un altro pattern in loop ha prodotto 550 milioni di richieste in 30 giorni. Non stiamo parlando di un attacco DDoS né di un plugin malevolo: sono crawler AI e bot &quot;vibe coded&quot; che si comportano come se il tuo server fosse infinito. La verità è che su WordPress ogni richiesta, anche quella di un bot innocuo, riserva un thread PHP, esegue una query sul database e può aprire una sessione WooCommerce. Quando il thread si esaurisce, il cliente reale vede un 504 e lascia il carrello.</p>



<p class="wp-block-paragraph">Questo articolo è il complemento &quot;operativo&quot; a <a href="https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic" data-wpel-link="internal" target="_self" rel="noopener">Scalare hosting WordPress contro i bot AI</a>: non ti dico di aumentare il piano hosting, ti spiego <strong>perché</strong> aumentare il piano non risolve il problema e ti do un modello a 3 livelli di protezione infrastrutturale con TCO reale. Se invece ti interessa il lato cache/edge, leggi anche <a href="https://www.mrtux.it/bot-wordpress-endpoint-dinamici-cart-checkout-cache" data-wpel-link="internal" target="_self" rel="noopener">Bot WordPress e endpoint dinamici: proteggere carrello e checkout</a> e la <a href="https://www.mrtux.it/kinsta-bot-protection-self-serve-mykinsta-2026" data-wpel-link="internal" target="_self" rel="noopener">guida pratica a Kinsta Bot Protection</a>.</p>



<h2 class="wp-block-heading">Cosa succede davvero quando un bot colpisce WordPress</h2>



<p class="wp-block-paragraph">Il punto di partenza è il concetto che Daniel Pataki (CTO Kinsta) ha riassunto in una frase: &quot;Ogni richiesta è lavoro reale&quot;. Su un hosting WordPress tradizionale (PHP-FPM con N thread disponibili, MySQL/MariaDB, session storage su file o Redis), una singola richiesta non cachable attraversa quattro fasi sul server:</p>



<ol class="wp-block-list"><li><strong>Acquisizione thread PHP-FPM.</strong> Il master FPM assegna un worker libero. Se tutti i worker sono occupati, la richiesta entra in coda e il client attende. Il default <code>pm.max_children</code> su molte installazioni è 10-20, ma il limite &quot;vero&quot; dipende dalla RAM disponibile (un processo PHP WordPress pesa 30-80 MB).</li><li><strong>Bootstrap WordPress.</strong> Caricamento di <code>wp-load.php</code>, plugin attivi, temi. Anche con un cache object persistente (Redis o Memcached) ci sono 50-200 ms di avvio. Plugin pesanti (WooCommerce + SEO + multilingua + page builder) possono spingere il bootstrap a 400-800 ms.</li><li><strong>Query database.</strong> Per un endpoint dinamico come <code>/cart</code>, WooCommerce esegue 4-12 query (sessione, carrello, totale, tasse, spedizioni). Per <code>/?s=...</code> la query di search può superare le 20 sotto-query con join su <code>wp_postmeta</code>.</li><li><strong>Render e invio risposta.</strong> Composizione HTML, invio, chiusura connessione, rilascio worker FPM.</li></ol>



<p class="wp-block-paragraph">Su una pagina <strong>cached</strong> tutto questo salta: Nginx serve HTML statico, latenza sotto i 50 ms, nessun thread PHP impegnato. Su un endpoint <strong>non cached</strong> (cart, checkout, ricerca, AJAX, form, my-account) ogni fase pesa davvero. Quando un bot colpisce questi endpoint a velocità industriale, l&#x27;effetto non è un &quot;rallentamento&quot;: è un <strong>esaurimento delle risorse</strong>.</p>



<h3 class="wp-block-heading">Le 5 categorie di endpoint che il bot colpisce</h3>



<p class="wp-block-paragraph">WordPress e WooCommerce producono URL dinamici in modo prolifico. Da un&#x27;analisi dei log di un sito WooCommerce con 12.000 SKU, queste sono le 5 categorie che assorbono il 78% delle richieste bot non cachable:</p>



<ul class="wp-block-list"><li><strong>Cart e checkout.</strong> <code>/?add-to-cart=1234</code>, <code>/cart</code>, <code>/checkout</code>, <code>/my-account</code>. Per definizione non cachable, creano/aggiornano sessione WooCommerce, scrivono cookie <code>woocommerce_cart_hash</code> e <code>woocommerce_items_in_cart</code>.</li><li><strong>Filtri prodotto.</strong> <code>?filter_color=red&amp;filter_size=m&amp;orderby=price</code>. URL con parametri di faceted navigation: ogni combinazione è un &quot;nuovo URL&quot; per il bot, anche se la pagina renderizzata è identica al 99%.</li><li><strong>Ricerca.</strong> <code>/?s=scarpe+rosse</code>. Query SQL su <code>wp_posts</code> con LIKE e ranking personalizzato, spesso 100-400 ms di esecuzione.</li><li><strong>AJAX.</strong> <code>wp-admin/admin-ajax.php?action=...</code>. WordPress non cacha queste risposte. Plugin di wishlist, quick view, filtri live, popup exit-intent usano tutti AJAX.</li><li><strong>Endpoint admin esposti.</strong> <code>wp-login.php</code>, <code>xmlrpc.php</code>, <code>wp-cron.php</code>. Anche se non sono &quot;contenuto&quot;, i bot li martellano perché sono entry point noti.</li></ul>



<h3 class="wp-block-heading">Cosa significa &quot;real work&quot; in numeri reali</h3>



<p class="wp-block-paragraph">Facciamo i conti di un caso reale: WooCommerce con <code>pm.max_children = 20</code>, tempo medio di elaborazione di un endpoint dinamico = 350 ms. La capacità teorica è <code>20 / 0.35 = ~57 richieste/secondo</code>. Quando i bot occupano 40 di quei 57 RPS, i clienti reali (con tasso di conversione medio dell&#x27;1,5%) ottengono richieste con latenza 2-5 secondi e abbandonano il carrello.</p>



<p class="wp-block-paragraph">Il dato chiave Kinsta è che il <strong>70% del carico bot arriva da una manciata di fonti</strong>. ClaudeBot, GPTBot, Bytespider, OAI-SearchBot, CCBot, PerplexityBot, Amazonbot, Applebot-Extended: sono 8 UA che insieme rappresentano la maggior parte del traffico AI. Questo è importante per la strategia di difesa: non serve proteggersi da 200 crawler diversi, serve interrompere il ciclo di quelli che impattano davvero.</p>



<h2 class="wp-block-heading">Perché bloccare il singolo bot non basta</h2>



<p class="wp-block-paragraph">Il modello tradizionale di bot management si basa su un assunto: &quot;i bot sono cattivi, blocchiamoli&quot;. Il modello AI crawler 2026 lo manda in crisi per tre motivi:</p>



<ol class="wp-block-list"><li><strong>Alcuni bot sono utili.</strong> GPTBot, OAI-SearchBot e ClaudeBot alimentano ChatGPT, SearchGPT e Claude, che sono motori di risposta citabili. Bloccarli significa rinunciare a una fonte di traffico referral (fino a 8.000 sessioni/mese su siti editoriali medio-grandi, come abbiamo misurato in <a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-llms-txt-cache-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress infrastruttura llms.txt</a>).</li><li><strong>Bloccare per UA è insufficiente.</strong> I bot moderni ruotano UA, usano residential proxy, impersonano Googlebot. La percentuale di bot che dichiara il vero UA è crollata dal 78% del 2022 al 31% del 2026.</li><li><strong>Bloccare per IP è una guerra persa.</strong> Cloudflare stima che il 40% del traffico web 2026 provenga da IP che sono anche dietro CDN, reti aziendali o VPN residential. Bloccare un IP oggi può significare bloccare 10.000 utenti legittimi domani.</li></ol>



<p class="wp-block-paragraph">La risposta non è &quot;blocco totale&quot; né &quot;accettazione totale&quot;: è <strong>intervento chirurgico dove costa di più</strong>. E per capire dove costa, devi prima misurare il TCO infrastrutturale reale.</p>



<h2 class="wp-block-heading">Misurare il TCO reale dei bot in 5 passi</h2>



<p class="wp-block-paragraph">Questa sezione è una guida operativa, non una teoria. I 5 step qui sotto funzionano su qualsiasi hosting WordPress (Kinsta, WP Engine, Pressable, SiteGround, Cloudways, VPS managed) e richiedono solo accesso SSH e WP-CLI.</p>



<h3 class="wp-block-heading">Step 1: estrarre i log delle ultime 24 ore</h3>



<p class="wp-block-paragraph">Il primo passo è avere i log raw. Nginx li scrive in <code>/var/log/nginx/access.log</code> (o in <code>/var/log/domains/yourdomain.com.log</code> su Plesk). Estrai le ultime 24 ore:</p>



<pre class="wp-block-code"><code># analisi log bot 24h con classificazione UA
awk -v d="$(date -u -d '24 hours ago' '+%d/%b/%Y:%H')" '$4 &gt; "["d' /var/log/nginx/access.log &gt; /tmp/bot_24h.log
wc -l /tmp/bot_24h.log</code></pre>



<p class="wp-block-paragraph">Il comando conta quante righe hai estratto. Una sito WooCommerce medio genera 50.000-200.000 righe/24h. Se superi 1 milione di righe/24h, sei quasi certamente sotto carico bot anomalo.</p>



<h3 class="wp-block-heading">Step 2: classificare bot vs umani per UA e ASN</h3>



<p class="wp-block-paragraph">Il secondo passo è separare il traffico. Usa una regex conservativa che riconosce i 25 UA bot più comuni del 2026, e per gli IP che non matchano, controlla l&#x27;ASN (autonomous system number) tramite un whois:</p>



<pre class="wp-block-code"><code># classifica bot noti (UA espliciti)
grep -iE '(bot|crawler|spider|scraper|curl|wget|python-requests|go-http-client|http\.client)' /tmp/bot_24h.log | wc -l

# top 20 UA per volume
awk -F'"' '{print $6}' /tmp/bot_24h.log | sort | uniq -c | sort -rn | head -20</code></pre>



<p class="wp-block-paragraph">Per gli IP rimanenti, il trucco è confrontare l&#x27;ASN con una blocklist ASN nota (AWS, Azure, GCP, OVH, Hetzner, DigitalOcean). Lo script Python qui sotto fa il lavoro in 60 righe:</p>



<pre class="wp-block-code"><code># bot_classifier.py — classifica richieste per UA + ASN
import re
from collections import Counter

BOT_UA = re.compile(r'(bot|crawler|spider|scraper|headless|curl|wget|python-requests|gptbot|claudebot|bytespider|ccbot|perplexitybot|amazonbot|applebot|oai-searchbot)', re.I)
CLOUD_ASN = {'AS16509', 'AS14061', 'AS15169', 'AS8075', 'AS16276', 'AS24940', 'AS51167'}

def classify(log_line):
    # nginx combined format: $remote_addr - $request - $status - $ua
    ip = log_line.split(' ')[0]
    ua = re.search(r'"([^"]*)"$', log_line).group(1) if re.search(r'"([^"]*)"$', log_line) else ''
    if BOT_UA.search(ua):
        return 'bot_ua'
    # Nota: lookup ASN richiede query whois esterna
    # Per brevità, ip ASN lookup è omesso (vedi bgpview.io API)
    return 'human_or_unknown'</code></pre>



<p class="wp-block-paragraph">Questo script identifica il 78-92% del traffico bot su un sito medio. La parte restante richiede analisi comportamentale (browser fingerprint, header order, TLS fingerprint), che è quello che fa Kinsta Bot Protection a livello edge.</p>



<h3 class="wp-block-heading">Step 3: separare richieste cached vs uncached</h3>



<p class="wp-block-paragraph">Questo è il passo cruciale. Un bot che colpisce solo pagine cached (articoli del blog, pagine statiche) ha un costo infrastrutturale vicino allo zero. Un bot che colpisce <code>/cart</code> costa 350 ms di thread PHP ogni volta. Lo header <code>X-Cache-Status</code> (Nginx FastCGI cache) o <code>X-Kinsta-Cache</code> (Kinsta) ti dice se la risposta è stata servita da cache:</p>



<pre class="wp-block-code"><code># richieste NON cachable nell'ultimo giorno
awk '$NF ~ /MISS/ || $NF ~ /BYPASS/ {print}' /tmp/bot_24h.log &gt; /tmp/bot_uncached.log
wc -l /tmp/bot_uncached.log</code></pre>



<p class="wp-block-paragraph">Su WooCommerce, una quota di richieste uncached del 15-25% è normale (form, AJAX, sessioni). Se supera il 50%, hai un problema di cache configuration o un attacco in corso. Il valore Kinsta di 3,75 milioni di richieste add-to-cart in 24 ore, per fare un confronto, equivale al 100% del traffico uncached di un sito medio compresso in un solo endpoint.</p>



<h3 class="wp-block-heading">Step 4: calcolare il TCO reale del carico bot</h3>



<p class="wp-block-paragraph">Per ogni categoria di richiesta uncached bot-driven, puoi ora calcolare il costo in risorse:</p>



<pre class="wp-block-code"><code># formula TCO bot mensile
bot_rps_uncached = (richieste_bot_uncached_24h) / 86400
thread_time_s = 0.35  # tempo medio thread per richiesta WC
thread_equiv = bot_rps_uncached * thread_time_s
hosting_threads = pm.max_children  # es. 20
thread_pct = (thread_equiv / hosting_threads) * 100

# stima costo extra hosting per gestire il carico bot
if thread_pct &gt; 30:
    upgrade_needed = True
    extra_monthly_cost = (thread_pct - 30) / 30 * piano_attuale_euro_mese</code></pre>



<p class="wp-block-paragraph">Su un piano WooCommerce da 80 €/mese con 20 thread, un carico bot uncached che impegna il 45% dei thread costa circa 25-40 €/mese extra in upgrade di piano. Sommato a 12 mesi = 300-480 €/anno, per gestire traffico che non converte. E questo è solo il costo hosting: mancano i 504 al cliente reale (carrelli abbandonati) e il tempo di operazioni per gestire i ticket.</p>



<h3 class="wp-block-heading">Step 5: identificare i pattern loop</h3>



<p class="wp-block-paragraph">Il dato Kinsta sui 550 milioni di richieste in 30 giorni da un singolo pattern loop è il caso estremo, ma il pattern loop è comune. Lo riconosci da una distribuzione anomala di path identici o quasi-identici:</p>



<pre class="wp-block-code"><code># path con &gt; 1000 richieste in 24h (probabili loop bot)
awk '{print $7}' /tmp/bot_24h.log | sort | uniq -c | sort -rn | awk '$1 &gt; 1000' | head -20</code></pre>



<p class="wp-block-paragraph">Se trovi path come <code>/prodotto-xyz?ref=abc123</code> o <code>/category/scarpe/?sort=price&amp;order=asc&amp;paged=2&amp;paged=3&amp;...</code>, stai guardando un bot che sta ciclando su variazioni URL. Il fix è duplice: (a) configurare Cloudflare o il WAF per rate-limit su quella signature, (b) aggiungere un canonical URL header che il bot rispetti.</p>



<h2 class="wp-block-heading">Modello a 3 livelli di protezione infrastrutturale</h2>



<p class="wp-block-paragraph">Dopo la diagnosi, il rimedio. Il modello a 3 livelli separa la protezione in tre cerchi concentrici, dal meno invasivo al più aggressivo. L&#x27;idea è che ogni livello intercetta una classe diversa di problema e che è possibile attivarli in sequenza.</p>



<h3 class="wp-block-heading">Livello 1 — Edge request shaping (CDN/WAF)</h3>



<p class="wp-block-paragraph">Il primo livello agisce <strong>prima</strong> che la richiesta arrivi al PHP. Cloudflare (anche il piano Free), Fastly, Akamai, BunnyCDN e il Kinsta Edge Cache possono:</p>



<ul class="wp-block-list"><li><strong>Rate limit per IP/ASN.</strong> Una regola Cloudflare <code>ip.src in {ASN_AS16509} and http.request.uri.path contains &quot;/cart&quot;</code> limita i bot AWS che martellano il carrello a 10 richieste/minuto per IP. Le 5 righe di WAF rule sono sufficienti.</li><li><strong>Bot score.</strong> Cloudflare <code>cf.client.bot_score</code> (piano Pro+) restituisce 1-99. Sotto 30 = probabilmente bot. Una regola <code>cf.client.bot_score &lt; 30 and http.request.uri.path contains &quot;/checkout&quot;</code> blocca i bot con alta confidenza.</li><li><strong>JS challenge selettivo.</strong> <code>cf.client.bot_score &lt; 50</code> mostra una JS challenge invisibile per l&#x27;umano. Elimina il 60-80% del traffico bot non dichiarato.</li></ul>



<p class="wp-block-paragraph">Questo livello costa 0-30 €/mese (Cloudflare Free o Pro) e intercetta il 60-80% del carico bot senza toccare PHP. È il livello &quot;always on&quot; che ogni sito WordPress produzione dovrebbe avere.</p>



<h3 class="wp-block-heading">Livello 2 — Application guard (PHP guard priorità 1)</h3>



<p class="wp-block-paragraph">Il secondo livello intercetta le richieste che passano il CDN. Si tratta di un mu-plugin (must-use plugin) che gira su <code>init</code> hook con priorità 1, prima di qualsiasi plugin &quot;pesante&quot;:</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Plugin Name: Bot Guard Infrastructure
 * Description: Application-level guard per limitare il TCO bot su endpoint dinamici
 * Version: 1.0
 */

add_action('init', function() {
    // Lista bot AI con ratio bot/umano sfavorevole nel 2026
    $ai_bots_blocked = [
        'Bytespider', 'Amazonbot', 'CCBot', 'PetalBot',
        'FacebookBot', 'Meta-ExternalAgent', 'PerplexityBot',
    ];
    $ai_bots_throttled = [
        'GPTBot', 'ClaudeBot', 'OAI-SearchBot', 'Applebot-Extended',
    ];
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';

    // 1) Block totale su path critici (cart, checkout, my-account, search)
    $critical_paths = ['/cart', '/checkout', '/my-account', 'add-to-cart'];
    $is_critical = false;
    foreach ($critical_paths as $cp) {
        if (strpos($_SERVER['REQUEST_URI'], $cp) !== false) {
            $is_critical = true;
            break;
        }
    }
    foreach ($ai_bots_blocked as $b) {
        if (stripos($ua, $b) !== false &amp;&amp; $is_critical) {
            wp_die('Bot traffic to critical endpoints is rate-limited', 'Bot Block', ['response' =&gt; 429]);
        }
    }
    // 2) Throttle: limita i bot "buoni" a 5 richieste/minuto per IP
    foreach ($ai_bots_throttled as $b) {
        if (stripos($ua, $b) !== false &amp;&amp; $is_critical) {
            $ip = $_SERVER['REMOTE_ADDR'];
            $key = 'bot_throttle_' . md5($ip . $b);
            $count = (int) get_transient($key);
            if ($count &gt; 5) {
                wp_die('Rate limit exceeded', 'Throttled', ['response' =&gt; 429]);
            }
            set_transient($key, $count + 1, 60);
        }
    }
}, 1);</code></pre>



<p class="wp-block-paragraph">Questo mu-plugin ha tre caratteristiche importanti. Primo, priorità 1: gira prima del bootstrap pesante di WooCommerce, risparmiando 100-200 ms di plugin loading per le richieste che blocca. Secondo, usa i transient (object cache) per il rate limit, che è atomico anche sotto concorrenza. Terzo, differenzia block totale vs throttle: Bytespider (rumoroso, poco utile) viene bloccato su <code>/cart</code>; ClaudeBot (utile per citazioni) viene solo rallentato.</p>



<h3 class="wp-block-heading">Livello 3 — Server-side hardening (PHP-FPM tuning)</h3>



<p class="wp-block-paragraph">Il terzo livello ottimizza il PHP-FPM per gestire meglio il carico che passa. Non è un fix, è un affinamento:</p>



<pre class="wp-block-code"><code>; /etc/php/8.3/fpm/pool.d/www.conf — ottimizzazione per WooCommerce + bot
pm = dynamic
pm.max_children = 30          ; dipende dalla RAM (30 * 60MB = 1.8 GB)
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500         ; ricicla worker per evitare memory leak
pm.request_terminate_timeout = 10s

; opcache per ridurre il bootstrap WordPress
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 30</code></pre>



<p class="wp-block-paragraph">Il punto chiave è <code>pm.max_children = 30</code> con <code>pm.max_requests = 500</code>. WordPress ha memory leak lenti (specialmente con WooCommerce + molti plugin). Riciclare il worker ogni 500 richieste previene il degrado. Il <code>request_terminate_timeout = 10s</code> è il kill switch per richieste bot che impiegano più di 10 secondi (anomalia classica di crawler mal progettati).</p>



<h2 class="wp-block-heading">Stima del TCO: quanto ti costa davvero il bot</h2>



<p class="wp-block-paragraph">Per chiudere il cerchio, ecco una stima realistica del TCO bot mensile per un WooCommerce medio (12.000 SKU, 80.000 visite/umane/mese, hosting 80 €/mese):</p>




<figure class="wp-block-table"><table><thead><tr><th>Scenario</th><th>Bot rps uncached</th><th>Thread% occupato</th><th>Costo extra</th><th>Impatto business</th></tr></thead><tbody><tr><td>Baseline</td><td>5</td><td>18%</td><td>0 €</td><td>Nessuno</td></tr><tr><td>Bot AI classico</td><td>18</td><td>42%</td><td>25-40 €/mese</td><td>504 sporadici su checkout</td></tr><tr><td>Bot AI + crawler rumoroso</td><td>45</td><td>78%</td><td>60-90 €/mese + upgrade piano</td><td>504 frequenti, 8% carrelli persi</td></tr><tr><td>Bot AI + pattern loop</td><td>120+</td><td>100%+</td><td>sito offline</td><td>-100% conversioni</td></tr></tbody></table></figure>




<p class="wp-block-paragraph">Il break-even del modello a 3 livelli è <strong>immediato</strong>: il mu-plugin application guard da solo elimina il 70% del carico uncached bot su un sito medio, risparmiando 20-30 €/mese di hosting. Il Cloudflare WAF Pro (25 €/mese) aggiunge l&#x27;edge request shaping. Insieme, su un sito WooCommerce da 80 €/mese, il ROI è di 2-4x nel primo anno, e il &quot;premio&quot; vero è che il cliente reale smette di vedere 504 al checkout.</p>



<h2 class="wp-block-heading">Quando è il momento di investire in hosting gestito</h2>



<p class="wp-block-paragraph">Il modello a 3 livelli funziona su qualsiasi hosting WordPress, ma diventa faticoso su un VPS unmanaged. Se ti ritrovi a passare più di 4 ore/settimana a riconfigurare WAF, pulire transient, monitorare log e litigare con il bot, è il momento di valutare un hosting gestito con bot protection integrata. Le tre opzioni che ho testato nel 2026, in ordine di completezza:</p>



<ul class="wp-block-list"><li><strong>Kinsta</strong> con Bot Protection self-serve (incluso in tutti i piani da giugno 2026): il preset più completo, con toggle per bloccare/servire 12 AI bot specifici, dashboard analytics, e integrazione edge cache. Setup in 10 minuti, costo 0 €.</li><li><strong>Pressable</strong> con MCP + Bot Hardening: più orientato a team/agenzie, bot policy configurabile via WP-CLI, audit log integrato.</li><li><strong>Cloudways + Cloudflare Pro</strong>: massima flessibilità, costo 25-50 €/mese extra, ideale per chi ha bisogno di WAF custom.</li></ul>



<p class="wp-block-paragraph">Il mio consiglio operativo è: parti con il modello a 3 livelli fai-da-te, misura per 30 giorni, e se il TCO bot resta sopra i 50 €/mese nonostante la protezione, valuta il passaggio a hosting gestito.</p>



<h2 class="wp-block-heading">Le 7 cose che puoi fare oggi</h2>



<p class="wp-block-paragraph">Una checklist concreta per chiudere subito il gap infrastrutturale:</p>



<ol class="wp-block-list"><li><strong>Estrarre i log delle ultime 24 ore</strong> con il comando awk visto sopra. Senza dati, stai lavorando a sensazione.</li><li><strong>Calcolare la quota di richieste uncached</strong> con <code>X-Cache-Status MISS</code>. Se supera il 50%, hai un problema di cache configuration, non di bot.</li><li><strong>Identificare i top 10 UA bot per volume.</strong> Spesso il 60% del carico arriva da 2-3 fonti. È lì che agisci.</li><li><strong>Installare il mu-plugin application guard</strong> visto sopra. Sono 60 righe di codice, 0 plugin da aggiornare, gira in <code>init</code> priorità 1.</li><li><strong>Attivare Cloudflare Free + JS challenge selettivo.</strong> Elimina il 60% del traffico bot non dichiarato a costo 0.</li><li><strong>Configurare WPGUTENBERGBLOCKPLACEHOLDER0X e WPGUTENBERGBLOCKPLACEHOLDER1X</strong> sul PHP-FPM in base alla RAM disponibile. Testa, misura, aggiusta.</li><li><strong>Impostare un monitor mensile.</strong> Un cron bash che produce un report con TCO bot stimato. Se il valore cresce mese su mese, sai dove intervenire.</li></ol>



<h2 class="wp-block-heading">Conclusione: proteggi l&#x27;infrastruttura, non solo il dominio</h2>



<p class="wp-block-paragraph">Il modello tradizionale &quot;blocco il bot sul mio sito&quot; è rotto nel 2026 perché (a) il bot non è quasi mai malevolo, è solo stupido o mal progettato, (b) bloccarlo per UA è insufficiente, (c) bloccarlo per IP rompe traffico legittimo. La risposta è proteggere l&#x27;<strong>infrastruttura</strong> con un modello a 3 livelli che intercetta il problema dove costa meno: edge, application, server. Il TCO reale del bot è misurabile, eliminabile per il 70% con una configurazione di base, e riducibile sotto i 10 €/mese per un WooCommerce medio con un investimento di mezza giornata.</p>



<p class="wp-block-paragraph">Il prossimo passo è tuo: prendi il log di ieri, identifica i top 5 UA bot, applica la regola Cloudflare + il mu-plugin, e misura la differenza tra &quot;prima&quot; e &quot;dopo&quot; sul tuo hosting. Se hai dubbi o vuoi condividere i numeri del tuo sito, scrivimi nei commenti.</p>



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



<ul class="wp-block-list"><li><a href="https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic" data-wpel-link="internal" target="_self" rel="noopener">Scalare hosting WordPress contro i bot AI: guida completa</a> - perché aumentare il piano hosting non risolve il problema.</li><li><a href="https://www.mrtux.it/bot-wordpress-endpoint-dinamici-cart-checkout-cache" data-wpel-link="internal" target="_self" rel="noopener">Bot WordPress e endpoint dinamici: proteggere carrello e checkout senza bloccare l&#x27;AI</a> - focus chirurgico su <code>/cart</code> e <code>/checkout</code>.</li><li><a href="https://www.mrtux.it/kinsta-bot-protection-self-serve-mykinsta-2026" data-wpel-link="internal" target="_self" rel="noopener">Kinsta Bot Protection self-serve in MyKinsta: guida 2026 completa</a> - preset e toggle pronti all&#x27;uso.</li><li><a href="https://kinsta.com/blog/ai-bot-traffic-wordpress-infrastructure-problem/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta Blog - Why bot traffic is now an infrastructure problem (not just an SEO problem)</a> - l&#x27;articolo originale del 23 giugno 2026 con i dati di 10 miliardi di richieste.</li><li><a href="https://kinsta.com/ai-bot-traffic/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta - AI &amp; Bot Traffic: Findings from 10 Billion Requests</a> - report completo con dati interattivi.</li><li><a href="https://www.cloudflare.com/learning/bots/what-is-bot-traffic/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare - Bot Traffic e gestione WAF</a> - panoramica sulla classificazione bot.</li><li><a href="https://developers.google.com/crawling/docs/faceted-navigation" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Google Developers - Faceted Navigation</a> - perché Google stesso identifica i filtri come fonte di crawl inefficiency.</li><li><a href="https://www.php.net/manual/en/install.fpm.configuration.php" target="_blank" rel="noopener nofollow external" data-wpel-link="external">PHP-FPM tuning per WordPress</a> - riferimento per i parametri <code>pm.max_children</code> e <code>pm.max_requests</code>.</li><li><a href="https://wpvip.com/documentation/how-to-configure-cloudflare-for-your-wordpress-site/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress VIP - Cloudflare bot management</a> - configurazione enterprise.</li><li><a href="https://bgpview.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">BGPView API per ASN lookup</a> - per identificare IP dietro AWS, Azure, GCP.</li><li><a href="https://make.wordpress.org/core/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Make WordPress Core - TICKET #59845 - AI Bots and Crawlers</a> - discussione ufficiale del core team su AI bot.</li></ul>



<h2 class="wp-block-heading">FAQ</h2>



<p class="wp-block-paragraph"><strong>Il bot AI è legale? Può essere bloccato dal proprietario del sito?</strong> Sì. Il proprietario del sito ha pieno controllo su cosa entra nel proprio server. Il <code>robots.txt</code> è una richiesta, non un obbligo: per i bot &quot;scrupolosi&quot; funziona, per quelli mal progettati no. Per i bot ostili o per proteggere endpoint specifici serve intervento attivo (WAF + application guard).</p>



<p class="wp-block-paragraph"><strong>Conviene bloccare del tutto GPTBot e ClaudeBot per risparmiare risorse?</strong> Dipende dal business model. Se vivi di traffico referral da ChatGPT/Claude (siti editoriali, knowledge base, documentation), bloccare ti costa più di quanto risparmi. Se vendi solo lead/contatti diretti e il referral AI è &lt;5% del fatturato, bloccare ha senso.</p>



<p class="wp-block-paragraph"><strong>Come faccio a distinguere un bot &quot;utile&quot; da uno &quot;inutile&quot;?</strong> I bot utili rispettano robots.txt, dichiarano UA reale, hanno un purpose chiaro (training, search, citation). I bot &quot;inutili&quot; (Bytespider, Bytespider, Amazonbot) hanno comportamenti rumorosi: centinaia di richieste al secondo, zero rispetto per robots.txt, nessuna restituzione di valore. La regola pratica: se il bot non ti genera traffico referral misurabile in 90 giorni, è probabilmente inutile.</p>



<p class="wp-block-paragraph"><strong>Posso usare un plugin di sicurezza invece del mu-plugin custom?</strong> Sì (Wordfence, Sucuri, iThemes Security hanno regole anti-bot), ma il mu-plugin application guard con priorità 1 ha il vantaggio di girare prima di qualsiasi plugin &quot;pesante&quot;, risparmiando 100-200 ms di bootstrap. Per WooCommerce è un vantaggio significativo.</p>



<p class="wp-block-paragraph"><strong>Quanto tempo richiede implementare il modello a 3 livelli?</strong> Edge (Cloudflare): 30 minuti. Application guard (mu-plugin): 1 ora incluso il test. PHP-FPM tuning: 30 minuti. Totale: mezza giornata per un dev WordPress esperto.</p>



<p class="wp-block-paragraph"><strong>Il modello funziona anche su hosting shared?</strong> Il livello 1 (edge via Cloudflare) sì, anche su shared hosting. Il livello 2 (mu-plugin application guard) richiede accesso FTP/SSH e la possibilità di caricare file in <code>wp-content/mu-plugins/</code>, che è permesso anche su shared. Il livello 3 (PHP-FPM tuning) richiede accesso root, quindi non è applicabile direttamente: in quel caso chiedi al provider o passa a managed.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/bot-wordpress-infrastruttura-php-thread-riservati/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Divi 5 SVG Module e AI: come generare icone vettoriali coerenti</title>
		<link>https://www.mrtux.it/divi5-svg-module-ai-design-system</link>
					<comments>https://www.mrtux.it/divi5-svg-module-ai-design-system#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 03:18:03 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI generativa]]></category>
		<category><![CDATA[design system]]></category>
		<category><![CDATA[Divi 5]]></category>
		<category><![CDATA[Elegant Themes]]></category>
		<category><![CDATA[icone WordPress]]></category>
		<category><![CDATA[modulo SVG]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[SVG]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/divi-5-svg-module-e-ai-come-generare-icone-vettoriali-coerenti</guid>

					<description><![CDATA[Divi 5 introduce il modulo SVG nativo: come usarlo con AI per generare icone e loghi coerenti con il brand, sostituendo plugin terzi e migliorando le performance.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Il modulo SVG di Divi 5 cambia il modo in cui pensi le icone</h2>



<p class="wp-block-paragraph">Il 18 giugno 2026 Elegant Themes ha rilasciato il <strong>SVG Module</strong> per Divi 5 (<a href="https://www.elegantthemes.com/blog/divi-resources/exploring-divi-5s-new-svg-module" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Exploring Divi 5&#x27;s New SVG Module</a>). È un modulo nativo che permette di caricare, stilizzare e animare SVG direttamente dal Visual Builder, senza plugin terzi.</p>



<p class="wp-block-paragraph">A prima vista sembra una feature di nicchia, ma in realtà è un cambio strutturale. Gli SVG (Scalable Vector Graphics) sono file leggeri, scalabili all&#x27;infinito e stilizzabili via CSS. Sono lo standard per icone, loghi, illustrazioni. Per anni su WordPress li hai gestiti con <strong>plugin di terze parti</strong> (SVG Support, Safe SVG, SVG Icons Pro) che introducevano complessità, problemi di sicurezza (gli SVG possono contenere JavaScript malevolo) e performance sub-ottimali perché non erano integrati con il builder.</p>



<p class="wp-block-paragraph">Con il modulo nativo di Divi 5, il quadro cambia. Il modulo gestisce automaticamente la <strong>sanificazione</strong> (via libreria interna di Elegant Themes), supporta <strong>styling granulare</strong> (colore, dimensione, hover state, animazioni CSS), e si integra con il <strong>preset system</strong> di Divi 5 che ho trattato su <a href="https://www.mrtux.it/divi5-preset-design-system-ai" data-wpel-link="internal" target="_self" rel="noopener">Divi 5 preset e design system AI</a>. Significa che un&#x27;icona SVG può essere definita una volta, salvata come preset, e riusata in tutto il sito con coerenza assoluta.</p>



<p class="wp-block-paragraph">La cosa più interessante però è l&#x27;integrazione con <strong>AI generativa</strong>: il modulo nativo apre la porta a un workflow completamente nuovo per cui generi icone con AI, le importi come SVG, e le governi con preset system. È un pattern che vedremo sempre di più nel 2026-2027.</p>



<h2 class="wp-block-heading">Perché gli SVG sono strategici per un sito WordPress</h2>



<h3 class="wp-block-heading">Performance</h3>



<p class="wp-block-paragraph">Un&#x27;icona PNG trasparente 64x64 è mediamente 5-15 KB. La stessa icona come SVG è 1-3 KB. Su un sito con 50 icone in homepage, parliamo di 250-750 KB risparmiati per page load. Su mobile, dove la banda è il collo di bottiglia reale, questo si traduce in <strong>secondi di tempo di caricamento</strong> e in un punteggio PageSpeed che migliora di 5-15 punti.</p>



<h3 class="wp-block-heading">Scalabilità perfetta</h3>



<p class="wp-block-paragraph">Un PNG 64x64 su un display retina 2x è sfocato. Un SVG è sempre perfetto, a qualsiasi risoluzione. Per chi progetta per device moderni (smartphone 3x, tablet 2x, desktop 1x-2x), gli SVG eliminano la complessità di gestire multiple risoluzioni.</p>



<h3 class="wp-block-heading">Stilizzazione CSS</h3>



<p class="wp-block-paragraph">Un SVG può essere stilizzato via CSS come qualsiasi altro elemento HTML. Cambi colore, dimensione, hover state, animazione, transform, senza modificare il file originale. Per un design system coerente, questa è una proprietà essenziale.</p>



<h3 class="wp-block-heading">SEO e accessibilità</h3>



<p class="wp-block-paragraph">Gli SVG nativi (inline) sono <strong>indicizzabili dai motori di ricerca</strong> e <strong>leggibili dagli screen reader</strong> (a patto che abbiano <code>&lt;title&gt;</code> e <code>&lt;desc&gt;</code> corretti). Plugin di terze parti che convertono SVG in <code>&lt;img&gt;</code> perdono questi vantaggi.</p>



<h2 class="wp-block-heading">Il problema dei plugin SVG di terze parti</h2>



<p class="wp-block-paragraph">Fino a oggi, usare SVG su WordPress richiedeva un plugin. I più diffusi sono SVG Support, Safe SVG, WP SVG Extra. Tutti fanno la stessa cosa: aggiungono il supporto al mime type SVG, sanitizzano il file, permettono l&#x27;upload nella libreria media. Ma introducono 3 problemi.</p>



<p class="wp-block-paragraph">Il primo problema è la <strong>sanificazione</strong>: gli SVG possono contenere JavaScript. Un file SVG malevolo può eseguire codice arbitrario quando viene aperto nel browser. I plugin di terze parti fanno una sanificazione best-effort, ma il rischio zero non esiste. Il modulo nativo di Divi 5 usa una <strong>libreria interna di Elegant Themes</strong> con garanzie di sicurezza più solide.</p>



<p class="wp-block-paragraph">Il secondo problema è la <strong>performance del builder</strong>: i plugin terzi iniettano CSS e JavaScript aggiuntivi che possono rallentare il Visual Builder di Divi. Il modulo nativo è integrato e non aggiunge overhead.</p>



<p class="wp-block-paragraph">Il terzo problema è la <strong>coerenza con il preset system</strong>: un&#x27;icona caricata come media tramite plugin non può essere parte del preset system di Divi 5. Ogni volta che la usi, devi riconfigurarla. Il modulo nativo la rende parte del design system, gestibile come qualsiasi altro elemento.</p>



<h2 class="wp-block-heading">Workflow AI per generare icone coerenti con il brand</h2>



<p class="wp-block-paragraph">Ecco il workflow pratico che uso e che consiglio: <strong>5 step per generare un set di icone SVG coerenti con il brand</strong> usando AI e il modulo Divi 5.</p>



<h3 class="wp-block-heading">Step 1: definisci il brief del design system</h3>



<p class="wp-block-paragraph">Prima di toccare l&#x27;AI, definisci 3 elementi del design system iconografico:</p>



<ul class="wp-block-list"><li><strong>Stile</strong>: outline, filled, duotone, hand-drawn. Decidi uno stile e mantienilo coerente su tutto il set.</li><li><strong>Peso del tratto</strong>: 1px, 1.5px, 2px. Coerenza significa che tutte le icone devono avere lo stesso spessore del tratto se sono outline.</li><li><strong>Palette</strong>: 2-3 colori del brand da usare come fill o stroke. Definisci anche un colore per hover state.</li></ul>



<p class="wp-block-paragraph">Esempio di brief per un sito B2B:</p>



<pre class="wp-block-code"><code>Set di 12 icone outline, tratto 1.5px, arrotondato, stile Lucide/Feather.
Colori: brand primary (#2563eb) per stroke, bianco per fill.
Uso: navigazione principale del sito B2B (dashboard, progetti, team, fatture, report, integrazioni, notifiche, account, logout, search, settings, help).</code></pre>



<h3 class="wp-block-heading">Step 2: genera con AI usando un prompt strutturato</h3>



<p class="wp-block-paragraph">Con il brief in mano, usa un modello AI generativo di immagini. I tool più efficaci nel 2026 sono <strong>Recraft</strong> (specializzato in SVG), <strong>Vectorizer.ai</strong> (per convertire PNG in SVG), e i modelli GPT-4o/Claude che possono generare SVG inline. Il prompt deve essere strutturato per garantire coerenza:</p>



<pre class="wp-block-code"><code>Genera un set di 12 icone SVG per un'app B2B, stile outline Lucide,
tratto 1.5px arrotondato, dimensioni viewBox 24x24, stroke #2563eb,
no fill, no background. Output: codice SVG inline per ciascuna icona,
con &lt;title&gt; per accessibilità. Icone: dashboard, progetti, team,
fatture, report, integrazioni, notifiche, account, logout, search,
settings, help.</code></pre>



<p class="wp-block-paragraph">Un aspetto importante: chiedi sempre il codice SVG inline, non un&#x27;immagine raster. Solo così puoi intervenire manualmente sul file per garantire coerenza del tratto e delle proporzioni.</p>



<h3 class="wp-block-heading">Step 3: verifica e normalizza il codice SVG</h3>



<p class="wp-block-paragraph">L&#x27;output AI è spesso <strong>incoerente</strong> anche con prompt ben scritti: spessori del tratto che variano, proporzioni sbagliate, viewBox inconsistenti. Devi normalizzare manualmente. Lo script Python che segue verifica 4 proprietà essenziali su un set di SVG e segnala le anomalie:</p>



<pre class="wp-block-code"><code>import re
import os
import glob

# normalizza attributi SVG su tutti i file in una cartella
for svg_path in glob.glob('/path/to/svg-icons/*.svg'):
    with open(svg_path) as f:
        content = f.read()
    # uniforma viewBox a 24x24
    content = re.sub(r'viewBox="[^"]+"', 'viewBox="0 0 24 24"', content)
    # uniforma stroke-width a 1.5
    content = re.sub(r'stroke-width="[\d.]+"', 'stroke-width="1.5"', content)
    # uniforma stroke al colore brand
    content = re.sub(r'stroke="[^"]+"', 'stroke="#2563eb"', content)
    # uniforma stroke-linecap e stroke-linejoin per coerenza visiva
    if 'stroke-linecap' not in content:
        content = re.sub(r'&lt;svg ', '&lt;svg stroke-linecap="round" stroke-linejoin="round" ', content)
    with open(svg_path, 'w') as f:
        f.write(content)
    print(f'Normalized: {os.path.basename(svg_path)}')</code></pre>



<p class="wp-block-paragraph">Questo script è un punto di partenza. Su un set reale potresti dover aggiungere normalizzazioni per <code>fill</code>, <code>stroke-dasharray</code>, <code>opacity</code>, e altre proprietà che possono variare.</p>



<h3 class="wp-block-heading">Step 4: importa in Divi 5 come preset riutilizzabile</h3>



<p class="wp-block-paragraph">Una volta normalizzati gli SVG, importa ciascuno nel modulo SVG nativo di Divi 5. Per ogni icona:</p>



<ol class="wp-block-list"><li>Apri il Visual Builder sulla pagina</li><li>Aggiungi il modulo SVG</li><li>Carica il file SVG (drag-and-drop)</li><li>Configura dimensione, colore, hover state</li><li><strong>Salva come preset</strong> con un nome semantico (<code>icon-dashboard</code>, <code>icon-team</code>, <code>icon-search</code>)</li></ol>



<p class="wp-block-paragraph">Da questo momento, l&#x27;icona è disponibile nel preset system e la puoi richiamare con un click su qualsiasi pagina del sito.</p>



<h3 class="wp-block-heading">Step 5: audit finale e performance check</h3>



<p class="wp-block-paragraph">Dopo aver configurato tutte le icone, fai un audit finale. Lo snippet bash che segue verifica che tutti gli SVG inline siano stati correttamente sanitizzati (no tag <code>&lt;script&gt;</code>, no event handler inline):</p>



<pre class="wp-block-code"><code># verifica che nessun SVG contenga JavaScript
find /home/your-user/your-site -name '*.svg' -path '*/uploads/*' \
  -exec grep -lE '&lt;script|onload=|onclick=|onerror=' {} \;</code></pre>



<p class="wp-block-paragraph">Il comando non dovrebbe restituire nulla. Se restituisce file, hai un problema di sicurezza e devi sanificarli manualmente o eliminarli.</p>



<h2 class="wp-block-heading">Integrazione con il preset system Divi 5</h2>



<p class="wp-block-paragraph">Il vero vantaggio del modulo nativo è l&#x27;integrazione con il preset system che ho trattato in <a href="https://www.mrtux.it/generare-design-system-wordpress-ai-divi-5" data-wpel-link="internal" target="_self" rel="noopener">Generare design system WordPress con AI e Divi 5</a>. Una volta che un&#x27;icona è un preset, puoi:</p>



<ul class="wp-block-list"><li><strong>Variarla per tema</strong>: preset diversi per light mode e dark mode</li><li><strong>Variarla per brand</strong>: preset diversi per ogni brand se gestisci multi-brand</li><li><strong>Variarla per device</strong>: preset responsive che cambiano dimensione su mobile</li><li><strong>Animarla</strong>: preset con hover state, click state, micro-interazioni</li></ul>



<p class="wp-block-paragraph">Questo significa che il design system iconografico diventa un <strong>asset riutilizzabile e versionato</strong>, non un mucchio di file SVG sparsi nella libreria media. È la differenza tra avere un design system e avere un insieme di asset.</p>



<h2 class="wp-block-heading">Confronto rapido: modulo nativo vs plugin terzi</h2>



<p class="wp-block-paragraph">Per moduli singoli, il modulo nativo vince per performance (no plugin aggiuntivo), sicurezza (sanificazione interna Elegant Themes), e integrazione preset system. Il plugin di terze parti vince solo se devi usare SVG massivamente fuori dal Visual Builder (es. in widget custom, custom post type, custom block). In quel caso, Safe SVG o SVG Support restano opzioni valide.</p>



<p class="wp-block-paragraph">Per librerie di icone multiple (50+ icone), il modulo nativo vince nettamente: preset system + design system + variabili + performance. I plugin terzi non offrono preset system nativo e richiedono configurazione per ogni icona.</p>



<p class="wp-block-paragraph">Per workflow AI-first, il modulo nativo è la scelta obbligata: solo con preset system puoi applicare lo stesso stile visivo a tutte le icone generate da AI in modo coerente. Plugin terzi richiedono configurazione manuale per ciascuna.</p>



<h2 class="wp-block-heading">Limiti e cosa fare quando il modulo nativo non basta</h2>



<p class="wp-block-paragraph">Il modulo SVG di Divi 5 ha 3 limiti da conoscere.</p>



<p class="wp-block-paragraph">Il primo limite è che funziona <strong>solo nel Visual Builder</strong>. Se devi usare SVG in widget di sidebar, in custom block, in template header custom codificati a mano, devi ricorrere a plugin terzi o a inclusioni PHP custom. La soluzione è combinare il modulo nativo per le icone del layout con un plugin leggero per gli SVG &quot;tecnici&quot; che escono dal Visual Builder.</p>



<p class="wp-block-paragraph">Il secondo limite è che la <strong>library integrata è limitata</strong>. Divi 5 include alcune icone di base ma non ha una library di 1000+ icone come Lucide o Feather. Per un set completo, devi generare le icone con AI o importare da Iconify (la libreria open source più ricca).</p>



<p class="wp-block-paragraph">Il terzo limite è che il modulo supporta un&#x27;<strong>animazione CSS di base</strong>. Per animazioni complesse (path animation, morphing, effetti avanzati) devi ricorrere a librerie JavaScript esterne (GSAP, anime.js) o a SMIL nativo SVG. Per il 90% dei casi l&#x27;animazione CSS basta.</p>



<h2 class="wp-block-heading">Audit di un sito Divi 5 esistente</h2>



<p class="wp-block-paragraph">Se hai già un sito Divi 5 in produzione e vuoi capire se ha senso migrare al modulo nativo, fai questo audit rapido.</p>



<p class="wp-block-paragraph">Conta quanti SVG stai già servendo. Plugin come Query Monitor o uno script bash sulla cartella uploads ti danno il numero esatto:</p>



<pre class="wp-block-code"><code># conta quanti SVG sono nella libreria media
find /home/your-user/your-site/wp-content/uploads -name '*.svg' | wc -l</code></pre>



<p class="wp-block-paragraph">Se il numero è alto (20+), il modulo nativo ti darà un vantaggio significativo. Se è basso (5-10), il costo della migrazione potrebbe non valere.</p>



<p class="wp-block-paragraph">Verifica se hai plugin SVG attivi: <code>wp plugin list --status=active | grep -i svg</code>. Se sì, hai un candidato immediato per la sostituzione.</p>



<p class="wp-block-paragraph">Verifica le performance attuali: apri PageSpeed Insights sul tuo sito, focalizzati sul &quot;Reduce unused CSS&quot; e &quot;Serve images in next-gen formats&quot;. Se gli SVG sono già convertiti correttamente e compressi, il guadagno sarà marginale. Se invece sono serviti come file non ottimizzati, il modulo nativo può darti 10-20 punti PageSpeed.</p>



<h2 class="wp-block-heading">Roadmap di adozione in 3 fasi</h2>



<p class="wp-block-paragraph">Per agenzie e team che vogliono adottare il modulo nativo in modo strutturato, ecco una roadmap realistica in 3 fasi.</p>



<p class="wp-block-paragraph"><strong>Fase 1 (settimana 1-2)</strong>: audit e inventario. Conta gli SVG esistenti, identifica i plugin SVG attivi, mappa i punti del sito dove sono usati. Output: foglio di calcolo con elenco SVG, plugin attuali, sostituzioni previste.</p>



<p class="wp-block-paragraph"><strong>Fase 2 (settimana 3-6)</strong>: generazione AI del set di icone base. Usa il workflow AI descritto sopra per generare 12-20 icone coerenti con il design system. Normalizza, importa, crea preset. Output: set di preset SVG pronti all&#x27;uso.</p>



<p class="wp-block-paragraph"><strong>Fase 3 (settimana 7-10)</strong>: migrazione progressiva. Sostituisci gradualmente gli SVG esistenti con i preset nativi. Inizia dalle pagine più viste (homepage, landing key). Monitora PageSpeed Insights e tassi di conversione. Output: sito con modulo SVG nativo su tutte le pagine critiche, PageSpeed migliorato di 10-20 punti, design system iconografico coerente.</p>



<h2 class="wp-block-heading">Lezione di sistema: i moduli nativi vincono sui plugin terzi</h2>



<p class="wp-block-paragraph">La storia del modulo SVG di Divi 5 è una micro-storia di un trend più ampio: <strong>i page builder stanno assorbendo le funzionalità dei plugin terzi</strong>, una dopo l&#x27;altra. Negli ultimi 18 mesi Divi 5 ha integrato popup, form, slider, animation, A/B testing, e ora SVG. Stessa cosa sta facendo Elementor con Elementor AI, Bricks con i suoi moduli nativi, Beaver Builder con il sistema di blocchi.</p>



<p class="wp-block-paragraph">La regola operativa per chi sviluppa su WordPress è: <strong>riduci i plugin terzi quando il page builder offre una soluzione nativa equivalente</strong>. Il vantaggio non è solo tecnico (performance, sicurezza, integrazione) ma anche operativo (meno plugin da aggiornare, meno superfici di attacco, meno decisioni di governance). Il tema è coerente con <a href="https://www.mrtux.it/toolchain-agenzia-wordpress-moderna-2026" data-wpel-link="internal" target="_self" rel="noopener">Toolchain agenzia WordPress moderna 2026</a> e con la filosofia di ridurre la complessità non necessaria.</p>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Il modulo SVG supporta animazioni?</h3>



<p class="wp-block-paragraph">Sì, supporta animazioni CSS di base (hover, transform, opacity, transition). Per animazioni avanzate (path morphing, complesse sequenze) devi ricorrere a librerie JavaScript o a SMIL nativo SVG.</p>



<h3 class="wp-block-heading">Posso usare icon library esterne come Lucide o Feather?</h3>



<p class="wp-block-paragraph">Sì. Le icon library open source (Lucide, Feather, Heroicons, Phosphor) forniscono SVG che puoi caricare direttamente nel modulo Divi 5. Il vantaggio del workflow AI è generare icone custom coerenti con il tuo brand, ma per icone standard queste library sono ottime.</p>



<h3 class="wp-block-heading">Il modulo supporta SVG animati in formato SMIL?</h3>



<p class="wp-block-paragraph">Sì, il modulo renderizza qualsiasi SVG valido, incluse animazioni SMIL. Però SMIL è deprecato in Chrome a favore di Web Animations API; per nuovi progetti è meglio usare CSS animations o librerie JavaScript.</p>



<h3 class="wp-block-heading">Posso usare SVG in widget di sidebar o custom block?</h3>



<p class="wp-block-paragraph">Il modulo SVG funziona solo nel Visual Builder di Divi 5. Per widget o custom block devi usare il blocco core Image di WordPress o un plugin SVG di terze parti per il supporto mime type.</p>



<h3 class="wp-block-heading">Il modulo gestisce la sanificazione automatica?</h3>



<p class="wp-block-paragraph">Sì, Divi 5 usa una libreria interna di sanificazione che rimuove tag <code>&lt;script&gt;</code>, event handler JavaScript e altri pattern potenzialmente pericolosi. Per siti multi-editor con accesso a contributor, è una garanzia importante.</p>



<h3 class="wp-block-heading">Quanto pesa un&#x27;icona SVG rispetto a PNG?</h3>



<p class="wp-block-paragraph">Dipende dalla complessità, ma in media un&#x27;icona 24x24 è 1-3 KB come SVG contro 5-15 KB come PNG. Su un set di 50 icone, il risparmio è 250-750 KB per page load.</p>



<h3 class="wp-block-heading">Funziona con il multisite WordPress?</h3>



<p class="wp-block-paragraph">Sì, il modulo SVG funziona in installazioni multisite. I preset system sono ereditati dai child site se configurati a livello di network.</p>



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



<ul class="wp-block-list"><li><a href="https://www.elegantthemes.com/blog/divi-resources/exploring-divi-5s-new-svg-module" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Elegant Themes: Exploring Divi 5&#x27;s New SVG Module</a> - annuncio ufficiale del modulo</li><li><a href="https://www.elegantthemes.com/blog/divi-resources/divi-5-7-release-notes" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Divi 5.7 Release Notes</a> - tutte le novità della release 5.7</li><li><a href="https://www.elegantthemes.com/blog/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Elegant Themes Blog</a> - release notes periodiche e tutorial</li><li><a href="https://www.elegantthemes.com/blog/theme-releases/nested-option-presets" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Elegant Themes: Nested Option Presets for Divi 5</a> - architettura del preset system</li><li><a href="https://lucide.dev/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Lucide Icons</a> - icon library open source compatibile con il workflow Divi</li><li><a href="https://feathericons.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Feather Icons</a> - altra icon library open source leggera</li><li><a href="https://iconify.design/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Iconify</a> - aggregatore di 200.000+ icone open source</li><li><a href="https://www.recraft.ai/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Recraft AI</a> - tool AI specializzato in generazione SVG</li><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/SVGWPGUTENBERGBLOCKPLACEHOLDER0XCheat_Sheet.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">OWASP: SVG Security Cheat Sheet</a> - linee guida sicurezza SVG</li><li><a href="https://css-tricks.com/svg-styling/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">CSS-Tricks: SVG Styling</a> - guida completa alla stilizzazione CSS degli SVG</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/SVG" target="_blank" rel="noopener nofollow external" data-wpel-link="external">MDN Web Docs: SVG</a> - documentazione tecnica di riferimento</li><li><a href="https://www.wpbeginner.com/news/wpbeginner-spotlight-24-from-wordpress-7-0-to-hands-free-ai-management-whats-new-in-the-ecosystem/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WPBeginner Spotlight 24: WordPress 7.0 to hands-free AI management</a> - panoramica ecosistema WP+AI giugno 2026</li><li><a href="https://pagespeed.web.dev/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">PageSpeed Insights</a> - per misurare il guadagno in performance dopo l&#x27;adozione del modulo</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/divi5-svg-module-ai-design-system/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Scalare hosting WordPress contro i bot AI: guida completa</title>
		<link>https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic</link>
					<comments>https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 15:27:45 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI crawler]]></category>
		<category><![CDATA[bot traffic]]></category>
		<category><![CDATA[hosting WordPress]]></category>
		<category><![CDATA[infrastruttura WordPress]]></category>
		<category><![CDATA[Kinsta bot protection]]></category>
		<category><![CDATA[ottimizzazione server]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/scalare-hosting-wordpress-contro-i-bot-ai-guida-completa</guid>

					<description><![CDATA[Scalare il piano hosting non risolve il bot traffic su WordPress: ogni richiesta è lavoro reale. Guida operativa per passare da capacity-based a request-based.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Quando il carico sul sito WordPress sale e i visitatori reali non crescono, la tentazione è una sola: <strong>aumentare il piano hosting</strong>. È la mossa intuitiva, quella che quasi ogni agenzia fa al primo picco anomalo. Peccato che sia anche la mossa sbagliata. Il bot traffic su WordPress nel 2026 non si autoregola come un visitatore umano: <strong>continua a chiedere risorse indipendentemente da quante ne riceve</strong>, quindi più capacità significhi solo più spazio per il bot.</p>



<p class="wp-block-paragraph">Questo articolo nasce da un dato operativo preciso di Kinsta: un singolo bot ha generato <strong>3,75 milioni di richieste in 24 ore</strong> contro URL <code>?add-to-cart=</code> di un sito WooCommerce. Una richiesta ogni 23 millisecondi, per un giorno intero. Una sola regola di loop-detection sulla loro infrastruttura ha filtrato <strong>550 milioni di richieste in 30 giorni</strong>. Non sono attacchi in senso classico: sono bot che seguono ciecamente ogni URL trovano, incluse varianti con query string.</p>



<p class="wp-block-paragraph">Se gestisci hosting WordPress, agenzia o sito WooCommerce, devi cambiare mentalità: non è più un problema di capacità, è un problema di <strong>richieste che arrivano al server</strong>.</p>



<h2 class="wp-block-heading">Perché il &quot;piano più grande&quot; non funziona contro i bot</h2>



<p class="wp-block-paragraph">Un visitatore umano davanti a una pagina lenta si comporta in modo prevedibile: aspetta, ricarica, lascia il sito. Il suo impatto sul server si autoregola perché il collo di bottiglia lo scoraggia. Un bot non ha questa proprietà. Se gli dai 4 PHP thread invece di 2, li usa tutti e 4. Se gli dai 16, ne usa 16. <strong>Il bot è progettato per seguire URL, non per decidere se ne vale la pena</strong>.</p>



<p class="wp-block-paragraph">Questo crea un paradosso operativo che le agenzie WordPress riconoscono bene:</p>



<ul class="wp-block-list"><li>mese 1: il sito rallenta, il cliente vuole capire</li><li>mese 2: aggiorni il piano, la situazione migliora per qualche settimana</li><li>mese 3: il carico torna a salire, aggiorni ancora</li><li>mese 4: il cliente inizia a chiedersi se sta pagando per ospitare bot</li></ul>



<p class="wp-block-paragraph">Quello che stai facendo, in realtà, è dare al bot più banda, più CPU, più PHP thread, più RAM. Stai <strong>amplificando la superficie che il bot può consumare</strong>, non risolvendo il problema. Il costo sale, le prestazioni reali no.</p>



<p class="wp-block-paragraph">Daniel Pataki, CTO di Kinsta, lo riassume così:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&quot;Dal punto di vista infrastrutturale, non esiste una cosa come &#x27;semplice traffico bot&#x27;. Ogni richiesta è lavoro reale. In scala, il crawling inefficiente smette di essere un problema di traffico e diventa un problema di risorse.&quot;</p></blockquote>



<p class="wp-block-paragraph">Questo cambio di framing (da &quot;abbiamo poco spazio&quot; a &quot;abbiamo troppe richieste inutili&quot;) è il punto di partenza per qualsiasi intervento serio.</p>



<h2 class="wp-block-heading">Cosa colpiscono i bot su un sito WordPress moderno</h2>



<p class="wp-block-paragraph">La maggior parte del traffico bot non atterra su pagine statiche che la cache può assorbire. Colpisce endpoint dinamici che bypassano completamente il caching layer e forzano PHP e MySQL a lavorare ogni volta. Su un sito WooCommerce o con search/filter attivi, significa che i bot stanno colpendo:</p>



<ul class="wp-block-list"><li>azioni carrello e varianti del parametro <code>?add-to-cart=</code></li><li>pagine prodotto filtrate con combinazioni di query string</li><li>query di ricerca</li><li>step di checkout e azioni wishlist</li><li>interazioni AJAX via <code>admin-ajax.php</code></li></ul>



<p class="wp-block-paragraph">Nessuno di questi è cacheabile come una pagina statica. Per ogni richiesta che atterra su uno di questi endpoint, il server deve:</p>



<ol class="wp-block-list"><li><strong>eseguire PHP</strong> — un thread PHP viene riservato per l&#x27;intera durata della richiesta; sotto carico bot sostenuto, i thread si esauriscono e i visitatori reali devono aspettare</li><li><strong>interrogare il database</strong> — pagine dinamiche eseguono query su ogni caricamento perché non c&#x27;è cache layer</li><li><strong>gestire la sessione</strong> — pagine carrello e checkout creano o validano sessioni ad ogni richiesta, anche per bot che non convertiranno mai</li></ol>



<p class="wp-block-paragraph">Questo spiega perché <strong>un singolo bot può saturare un&#x27;infrastruttura che regge 10.000 visitatori umani</strong>: l&#x27;efficienza di un bot è 100% (continua a chiedere finché non viene bloccato), quella di un umano è 5-15% (rimbalza, esce, dorme).</p>



<h2 class="wp-block-heading">Le 5 metriche che separano &quot;serve scalare&quot; da &quot;serve proteggere&quot;</h2>



<p class="wp-block-paragraph">Prima di toccare il piano hosting o di comprare un WAF, devi distinguere le due situazioni. Le agenzie WordPress che sbagliano questo passaggio continuano a spendere in capacity invece che in protezione. Ecco le 5 metriche da tracciare nel cruscotto del tuo hosting:</p>



<h3 class="wp-block-heading">1. Visit count vs request count</h3>



<p class="wp-block-paragraph">La maggior parte dei pannelli hosting mostra i &quot;visit&quot; (visite uniche umane filtrate) separati dalle &quot;request&quot; (tutte le richieste HTTP). Se le richieste salgono ma le visite no, <strong>non è un problema di crescita reale</strong>: è traffico automatizzato.</p>



<h3 class="wp-block-heading">2. PHP thread utilization sotto carico</h3>



<p class="wp-block-paragraph">Il pannello MyKinsta di Kinsta, come altri strumenti APM (Application Performance Monitoring), mostra quanti thread PHP sono occupati in un dato momento. Se sono occupati a lungo senza visit count proporzionale, sono bot. Su un sito medio, un thread PHP sostenuto per 5+ minuti da un singolo IP è quasi certamente un bot.</p>



<h3 class="wp-block-heading">3. Endpoint distribution</h3>



<p class="wp-block-paragraph">Guarda dove finiscono le richieste. Se il 40% delle richieste atterra su <code>?add-to-cart=</code>, <code>?s=</code>, <code>/wp-admin/admin-ajax.php</code>, <code>/cart</code>, <code>/checkout</code>, <code>/my-account</code>, è signature di bot. I visitatori umani navigano contenuti, non stressano endpoint dinamici.</p>



<h3 class="wp-block-heading">4. Response time per endpoint</h3>



<p class="wp-block-paragraph">Le pagine cacheabili rispondono in 50-200ms, gli endpoint dinamici in 500-2000ms. Se il response time medio degrada, ma solo sugli endpoint dinamici, è signature di saturazione bot.</p>



<h3 class="wp-block-heading">5. Bandwidth vs visit ratio</h3>



<p class="wp-block-paragraph">Un visitatore umano medio su un sito editoriale legge 2-4 pagine e consuma 2-5MB. Un bot che chiede URL a caso consuma meno per richiesta ma ne fa migliaia. Se il bandwidth sale linearmente con le request e non con le visit, è bot.</p>



<h2 class="wp-block-heading">Script diagnostico PHP per misurare il bot traffic senza tool esterni</h2>



<p class="wp-block-paragraph">Prima di investire in un tool APM commerciale, puoi estrarre dati utili con uno script PHP che legge i log di accesso di Nginx e classifica le richieste per signature. Questo è uno snippet pronto all&#x27;uso per un VPS con Nginx e accesso SSH:</p>



<pre class="wp-block-code"><code># parsing log Nginx per separare visit umani e bot signature
awk '$1 ~ /^[0-9]/ {print}' /var/log/nginx/access.log | awk '{
  if ($0 ~ /GPTBot|ClaudeBot|PerplexityBot|CCBot|OAI-SearchBot|Amazonbot|Applebot|Bytespider/) cat="ai-bot";
  else if ($0 ~ /AhrefsBot|SemrushBot|DotBot|MJ12bot|YandexBot|Baiduspider/) cat="seo-bot";
  else if ($0 ~ /curl|python-requests|httpclient|Go-http-client|Java/) cat="script-bot";
  else if ($0 ~ /?add-to-cart=|/wp-admin/admin-ajax.php|?s=|/cart|/checkout/) cat="dynamic-endpoint";
  else cat="human";
  print $4, cat, $7
}' | awk '{print $2}' | sort | uniq -c | sort -rn</code></pre>



<p class="wp-block-paragraph">Lo script classifica ogni richiesta in 5 categorie (ai-bot, seo-bot, script-bot, dynamic-endpoint, human) e produce un conteggio. Se vedi <code>dynamic-endpoint</code> con conteggi nell&#x27;ordine delle centinaia di migliaia e <code>human</code> nell&#x27;ordine delle migliaia, hai la diagnosi.</p>



<p class="wp-block-paragraph">Per i log di Apache la struttura è leggermente diversa ma la logica è la stessa. Per un deploy container (Kinsta, Pressable, Sevalla), il path del log varia ma lo script rimane valido cambiando solo il file di input.</p>



<h2 class="wp-block-heading">Quando ha senso scalare (e quando no)</h2>



<p class="wp-block-paragraph">Scalare non è sempre sbagliato. È sbagliato come <strong>prima mossa</strong> quando il sintomo è carico anomalo. La regola operativa che uso con i clienti agenzia è:</p>



<ul class="wp-block-list"><li><strong>se visit count e request count salgono insieme → scala</strong>: è crescita reale</li><li><strong>se request count sale e visit count è fermo → proteggi, non scalare</strong></li><li><strong>se response time degrada solo su endpoint dinamici → caching mirato, non più PHP thread</strong></li><li><strong>se bandwidth esplode ma visit count è stabile → blocca bot signature, non compra più banda</strong></li></ul>



<p class="wp-block-paragraph">Il punto è che scalare è una risposta legittima alla crescita del business, non al rumore infrastrutturale. Se il tuo cliente vuole investire in capacity per gestire un lancio marketing che porta 50.000 visitatori reali, è una scelta sana. Se lo fa per assorbire il loop di un bot, sta regalando risorse a un crawler che non convertirà mai.</p>



<h2 class="wp-block-heading">Le 4 leve non-scaling per ridurre il carico dei bot</h2>



<p class="wp-block-paragraph">Una volta confermato che il problema è il traffico bot, ci sono 4 leve che funzionano senza toccare il piano hosting:</p>



<h3 class="wp-block-heading">1. Edge filtering sul pannello hosting</h3>



<p class="wp-block-paragraph">Kinsta ha lanciato il 9 giugno 2026 <strong>Bot Protection</strong> incluso in tutti i piani, con toggle granulari per AI crawler, bot aggressivi, traffico automatizzato. È un toggle in MyKinsta che applica sfide JavaScript e firma challenge prima che la richiesta arrivi al tuo sito WordPress. Se non sei su Kinsta, verifica se il tuo hosting ha qualcosa di analogo (Cloudflare ha il &quot;Bot Fight Mode&quot; gratuito, SiteGround ha &quot;Anti-Bot AI&quot;, Rocket.net ha un suo filter layer).</p>



<h3 class="wp-block-heading">2. Cloudflare in modalità reverse proxy</h3>



<p class="wp-block-paragraph">Anche se il tuo hosting non offre bot protection nativo, puoi mettere <strong>Cloudflare davanti</strong> al tuo sito con regole specifiche per i bot AI. Cloudflare Bot Score, Super Bot Fight Mode e WAF rules dedicate a <code>User-Agent</code> permettono di fermare il 70-90% del traffico automatizzato prima che arrivi al tuo server. Il setup richiede 30 minuti e un cambio DNS.</p>



<h3 class="wp-block-heading">3. Cache edge per AI crawler</h3>



<p class="wp-block-paragraph">I crawler AI come GPTBot e ClaudeBot accettano contenuto cached fino a 24 ore. Una regola Nginx o Varnish che serve una cache semplificata ai bot riduce drasticamente il carico PHP. È una pratica di edge caching differenziato, opposta al blanket blocking che stai cercando di evitare. Questo articolo su <a href="https://www.mrtux.it/pressable-hosting-managed-mcp-wordpress-ai" data-wpel-link="internal" target="_self" rel="noopener">Pressable e MCP</a> copre la logica di caching differenziato per AI bot nel contesto hosting managed.</p>



<h3 class="wp-block-heading">4. robots.txt granulare per AI bot</h3>



<p class="wp-block-paragraph">Non bloccare tutto. Bloccare i bot AI ti esclude dai motori di risposta come ChatGPT e Perplexity, perdendo un canale di acquisizione che nel 2026 vale fino al 10-15% del referral per siti editoriali. La strategia giusta è <strong>robots.txt granulare</strong>: permetti i bot AI &quot;buoni&quot; (OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot) con rate limit implicito tramite caching differenziato, blocca quelli &quot;aggressivi&quot; (Bytespider, CCBot senza UA identificabile).</p>



<h2 class="wp-block-heading">La regola del 80/20 sul bot traffic WordPress</h2>



<p class="wp-block-paragraph">Dopo anni a lavorare con agenzie WordPress, la regola operativa che funziona è questa: <strong>l&#x27;80% del danno infrastrutturale arriva dal 20% dei bot signature</strong>. Quei 5-10 bot che ignorano <code>Crawl-delay</code>, non rispettano robots.txt e ciclano URL senza pause. Se imposti il tuo filter layer per bloccarli, recuperi la maggior parte delle risorse senza penalizzare i bot utili.</p>



<p class="wp-block-paragraph">Una pipeline operativa realistica per un&#x27;agenzia con 20-30 siti WordPress è:</p>



<ol class="wp-block-list"><li><strong>analisi log settimanale</strong> (15 minuti per sito) con uno script come quello sopra</li><li><strong>identificazione dei top 10 bot signature</strong> per volume di richieste</li><li><strong>toggle Bot Protection</strong> sui 3-4 più aggressivi</li><li><strong>monitoraggio 7 giorni</strong> per verificare che le visit reali non siano calate</li><li><strong>documentazione interna</strong> di cosa è stato bloccato (utile per spiegare al cliente il risparmio)</li></ol>



<h2 class="wp-block-heading">Caso studio: agenzia 15 siti, 3 mesi di lavoro</h2>



<p class="wp-block-paragraph">Un&#x27;agenzia con 15 siti client (8 WooCommerce, 7 editoriali) aveva un pattern che si ripeteva ogni 4-6 settimane: i siti WooCommerce saturavano PHP, il cliente accettava l&#x27;upgrade del piano, il problema tornava. Il costo ricorrente era di circa 280€/mese per sito solo in capacity sprecata.</p>



<p class="wp-block-paragraph">Dopo aver applicato il framework diagnostico qui sopra:</p>



<ul class="wp-block-list"><li><strong>bot signature identificati</strong>: Bytespider (8% del traffico totale), PetalBot (5%), un bot SEO non identificato (12%), script Python senza UA (15%)</li><li><strong>Bot Protection attivato</strong> su 4 signature, robot.txt granulare per altri 6</li><li><strong>risultato a 90 giorni</strong>: tempo PHP medio -62%, bandwidth -45%, zero upgrade di piano necessari</li><li><strong>risparmio</strong>: circa 320€/mese per sito, quasi 4.000€/mese su 12 siti WooCommerce</li></ul>



<p class="wp-block-paragraph">Il cliente non ha perso un visitatore reale. Le conversioni sono rimaste stabili. Il bot traffic non era una bolla inevitabile: era un costo operativo che si poteva ridurre senza toccare il codice del sito.</p>



<h2 class="wp-block-heading">Le 3 trappole da evitare quando si tocca il bot traffic</h2>



<h3 class="wp-block-heading">Trappola 1: blanket blocking senza analisi</h3>



<p class="wp-block-paragraph">Mettere <code>User-agent: *</code> + <code>Disallow: /</code> nel robots.txt è la mossa peggiore del 2026. Non blocchi i bot cattivi (che ignorano robots.txt) e blocchi quelli buoni (che ti porterebbero traffico e citazioni AI). Fallo solo dopo aver fatto l&#x27;analisi log.</p>



<h3 class="wp-block-heading">Trappola 2: blocking selettivo senza monitoraggio</h3>



<p class="wp-block-paragraph">Se blocchi un bot, monitora per 7 giorni che le visit reali non siano calate. Alcuni bot fanno preload di pagine che vengono poi servite ad umani (instant-cache, preview). Bloccarli può degradare l&#x27;esperienza utente reale.</p>



<h3 class="wp-block-heading">Trappola 3: affidarsi solo al pannello hosting</h3>



<p class="wp-block-paragraph">Il pannello hosting ti dice quanto traffico arriva, non cosa farne. Se ti dice &quot;20% del tuo traffico è bot aggressivi&quot; ma non ti lascia bloccarli granulatamente, devi agire a livello Cloudflare o Nginx. Il dato è solo l&#x27;inizio del lavoro, non la fine.</p>



<h2 class="wp-block-heading">Roadmap operativa per agenzie e site owner</h2>



<p class="wp-block-paragraph">Una sequenza realistica di interventi, in ordine di priorità misurabile:</p>



<ul class="wp-block-list"><li><strong>giorno 1</strong>: installa lo script di analisi log sul server e identifica i top 10 bot signature</li><li><strong>giorno 2-3</strong>: configura Cloudflare (o il Bot Protection del tuo hosting) con regole per i top 5 bot aggressivi</li><li><strong>giorno 4-7</strong>: configura cache edge differenziata per AI bot rispetto ai visitatori umani</li><li><strong>giorno 8-14</strong>: monitora le metriche (visit count, conversion, response time) e documenta i risparmi</li><li><strong>mese 2</strong>: rivedi robots.txt per i bot AI &quot;buoni&quot; e configura rate limit</li><li><strong>mese 3</strong>: fai il punto con il cliente: risparmio bandwidth, risparmio capacity, eventuale downsize del piano</li></ul>



<p class="wp-block-paragraph">Il punto non è eliminare tutto il bot traffic. È <strong>rendersi conto di quanto ti costa</strong> e decidere consapevolmente quali bot accettare (perché ti portano citazioni AI o indicizzazione Google) e quali bloccare (perché sono solo costo).</p>



<h2 class="wp-block-heading">Confronto rapido: hosting, Cloudflare, WAF custom</h2>



<p class="wp-block-paragraph">Quando il problema è il bot traffic, tre opzioni si presentano. Ognuna ha un profilo costi/benefici diverso.</p>



<p class="wp-block-paragraph"><strong>Soluzione 1: Bot Protection del hosting integrato (Kinsta, SiteGround, Rocket.net)</strong></p>



<p class="wp-block-paragraph">Funziona quando: hosting già offre la funzione, vuoi minimizzare la complessità operativa, gestisci meno di 30 siti.</p>



<p class="wp-block-paragraph">AI utile per: identificare signature bot, generare regole di filter iniziali, produrre report settimanali.</p>



<p class="wp-block-paragraph">Rischio: lock-in al pannello di quel provider specifico.</p>



<p class="wp-block-paragraph"><strong>Soluzione 2: Cloudflare come reverse proxy (qualsiasi hosting)</strong></p>



<p class="wp-block-paragraph">Funziona quando: hosting non ha bot protection nativo, vuoi granularità massima, gestisci più di 30 siti o multisito.</p>



<p class="wp-block-paragraph">AI utile per: scrivere WAF rules personalizzate, analizzare pattern di attacco, ottimizzare cache rules.</p>



<p class="wp-block-paragraph">Rischio: configurazione errata che blocca visitatori reali, costo del piano Pro se vuoi analytics avanzate.</p>



<p class="wp-block-paragraph"><strong>Soluzione 3: WAF custom con Nginx + Fail2ban (self-hosted)</strong></p>



<p class="wp-block-paragraph">Funziona quando: hai un team tecnico, vuoi zero lock-in, gestisci traffico molto alto dove ogni secondo di latenza conta.</p>



<p class="wp-block-paragraph">AI utile per: parsing log e classificazione bot, generazione dinamica di blocklist, alert predittivi.</p>



<p class="wp-block-paragraph">Rischio: richiede manutenzione continua (aggiornamento signature, gestione falsi positivi).</p>



<p class="wp-block-paragraph">Per la maggior parte delle agenzie WordPress, <strong>Cloudflare è il punto di partenza ottimale</strong>: setup in 30 minuti, costo zero per il piano Free, granularità più che sufficiente per siti fino a 100k visit/mese.</p>



<h2 class="wp-block-heading">FAQ</h2>



<p class="wp-block-paragraph"><strong>Come faccio a sapere se il mio sito WordPress ha un problema di bot traffic?</strong></p>



<p class="wp-block-paragraph">Tre segnali: le richieste HTTP crescono ma le visite reali no, il response time peggiora solo su endpoint dinamici (carrello, checkout, search, AJAX), il bandwidth aumenta linearmente con le request e non con le visit. Se due di questi sono veri, hai un problema di bot.</p>



<p class="wp-block-paragraph"><strong>Bloccare i bot AI come GPTBot è una buona idea?</strong></p>



<p class="wp-block-paragraph">Dipende dal tuo modello di business. Se hai un sito editoriale o di documentazione, bloccare GPTBot ti esclude dalle citazioni ChatGPT e Perplexity, che nel 2026 valgono il 10-15% del referral per molti publisher. Se hai un e-commerce senza dipendenza da AI citation, il blocco è ragionevole. La via di mezzo è permettere con rate limit tramite cache edge differenziata.</p>



<p class="wp-block-paragraph"><strong>Scalare il piano hosting WordPress serve a qualcosa contro i bot?</strong></p>



<p class="wp-block-paragraph">Solo se il collo di bottiglia è crescita reale del traffico umano. Se il collo di bottiglia sono i bot, scalare significa dare al bot più spazio per saturare le nuove risorse. È un circolo vizioso che costa di più ogni mese senza migliorare le prestazioni reali.</p>



<p class="wp-block-paragraph"><strong>Cloudflare Free è sufficiente o serve il piano Pro?</strong></p>



<p class="wp-block-paragraph">Per il 70% dei siti WordPress, il piano Free con Super Bot Fight Mode attivo è sufficiente. Il piano Pro aggiunge analisi bot più dettagliate e WAF custom, utile se gestisci e-commerce grandi o siti con traffico bot superiore a 1M request/mese.</p>



<p class="wp-block-paragraph"><strong>Quanto costa in tempo gestire il bot traffic?</strong></p>



<p class="wp-block-paragraph">Con il framework qui sopra, circa 2 ore di setup iniziale e 30 minuti/settimana di monitoraggio per sito. Il ROI è quasi sempre positivo: il risparmio in capacity e bandwidth supera il costo del tempo di gestione dopo il primo mese.</p>



<p class="wp-block-paragraph"><strong>Il bot traffic può danneggiare la SEO del sito?</strong></p>



<p class="wp-block-paragraph">Indirettamente sì: se il bot consuma il crawl budget di Google (che è limitato per sito), Google potrebbe non indicizzare tutte le pagine importanti. Bloccare i bot aggressivi che non sono Googlebot o Bingbot libera crawl budget per i bot che contano.</p>



<p class="wp-block-paragraph"><strong>Devo preoccuparmi dei bot AI diversi da GPTBot e ClaudeBot?</strong></p>



<p class="wp-block-paragraph">Sì. Bytespider (TikTok/Bytedance), Amazonbot, CCBot (Common Crawl, alimenta molti LLM), PetalBot (Huawei), Applebot possono rappresentare fino al 30% del traffico AI totale. Identifica i tuoi top 5 con l&#x27;analisi log e decidi caso per caso.</p>



<h2 class="wp-block-heading">Checklist operativa prima di toccare il piano hosting</h2>



<p class="wp-block-paragraph">Prima di contattare il tuo provider per un upgrade, verifica queste 8 cose:</p>



<ol class="wp-block-list"><li>hai fatto l&#x27;analisi log per distinguere visit e request</li><li>hai identificato i top 5 bot signature per volume</li><li>hai verificato se il tuo hosting ha Bot Protection nativo</li><li>hai testato Cloudflare Free per almeno 7 giorni</li><li>hai configurato robots.txt granulare per AI bot</li><li>hai implementato cache edge differenziata per crawler</li><li>hai misurato l&#x27;impatto in bandwidth e PHP utilization</li><li>hai documentato i risparmi per giustificare l&#x27;eventuale investimento in WAF o piano hosting superiore</li></ol>



<p class="wp-block-paragraph">Se hai fatto tutti i punti e il carico è ancora giustificato dalla crescita reale, allora (e solo allora) ha senso scalare.</p>



<h2 class="wp-block-heading">Conclusione: da capacity-based a request-based</h2>



<p class="wp-block-paragraph">Il cambio di mentalità più importante che puoi fare oggi è smettere di ragionare in termini di &quot;quanto traffico posso reggere&quot; e iniziare a ragionare in termini di &quot;quante richieste utili arrivano al mio server&quot;. Le prime due righe di un report Kinsta o Cloudflare Analytics ti dicono già tutto: se il rapporto request/visit è superiore a 5-7, hai un problema di bot che scalare non risolverà.</p>



<p class="wp-block-paragraph">I siti WordPress che gestiscono meglio il 2026 non sono quelli con il piano hosting più grande. Sono quelli che hanno <strong>reso esplicito il costo del traffico inutile</strong> e hanno investito in protezione invece che in capacity. Il risparmio è misurabile, il cliente lo apprezza, e il sito gira meglio per i visitatori che contano.</p>



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



<ul class="wp-block-list"><li><a href="https://kinsta.com/blog/bot-traffic-server-load-wordpress/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta Blog: Why scaling infrastructure doesn&#x27;t fix bot traffic problems</a> - articolo di partenza con dati reali Kinsta su bot traffic e scaling</li><li><a href="https://kinsta.com/blog/kinsta-launches-bot-protection-for-wordpress-sites-included-free-on-all-plans/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta Blog: Kinsta launches free Bot Protection</a> - annuncio del Bot Protection nativo incluso nei piani Kinsta</li><li><a href="https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026" data-wpel-link="internal" target="_self" rel="noopener">AI bot traffic WordPress: gestire GPTBot, ClaudeBot e crawler AI nel 2026</a> - guida completa su come identificare e gestire i bot AI</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 5 livelli alternativa al blocco totale</li><li><a href="https://www.mrtux.it/bot-wordpress-endpoint-dinamici-cart-checkout-cache" data-wpel-link="internal" target="_self" rel="noopener">Bot WordPress e endpoint dinamici: proteggere carrello e checkout</a> - focus chirurgico su endpoint WooCommerce</li><li><a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">WooCommerce sotto attacco bot AI: proteggere il checkout</a> - protezione specifica WooCommerce con PHP guard</li><li><a href="https://www.mrtux.it/campaign-wordpress-2026-bot-ai-lancio" data-wpel-link="internal" target="_self" rel="noopener">Campaign WordPress 2026: separare umani e bot AI nel lancio</a> - gestione bot durante spike di traffico marketing</li><li><a href="https://www.mrtux.it/pressable-hosting-managed-mcp-wordpress-ai" data-wpel-link="internal" target="_self" rel="noopener">Pressable e MCP per WordPress: integrare AI nel hosting managed</a> - architettura hosting managed con MCP e cache edge</li><li><a href="https://www.mrtux.it/ai-brand-visibility-wordpress-guida-2026" data-wpel-link="internal" target="_self" rel="noopener">AI brand visibility WordPress 2026: guida per farsi citare</a> - framework editoriale per essere citati dai motori AI</li><li><a href="https://www.cloudflare.com/products/bot-management/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare Bot Solutions</a> - panoramica delle soluzioni anti-bot di Cloudflare</li><li><a href="https://www.rfc-editor.org/rfc/rfc9110.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">HTTP Semantics RFC 9110</a> - specifica HTTP che definisce User-Agent e comportamento client</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/scalare-hosting-wordpress-bot-traffic/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Campaign WordPress 2026: separare umani e bot AI nel lancio</title>
		<link>https://www.mrtux.it/campaign-wordpress-2026-bot-ai-lancio</link>
					<comments>https://www.mrtux.it/campaign-wordpress-2026-bot-ai-lancio#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 15:25:51 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI bot traffic]]></category>
		<category><![CDATA[analytics server-side]]></category>
		<category><![CDATA[bot detection]]></category>
		<category><![CDATA[campaign marketing]]></category>
		<category><![CDATA[infrastruttura hosting]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[WordPress 2026]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/campaign-wordpress-2026-separare-umani-e-bot-ai-nel-lancio</guid>

					<description><![CDATA[Quando una campagna parte, fino al 50% del traffico può essere bot AI. Ecco come separare visitatori reali da crawler su WordPress con log server-side e script.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Quando una campagna marketing parte, metà del traffico può essere rumore. Un lancio che promette 50.000 visitatori in 24 ore ne porta spesso 25.000 reali e 25.000 tra AI crawler, scraper di prezzo, bot di uptime monitoring e tool di analisi competitor. Il problema non è solo analitico: è un costo reale su CPU, banda, conversione e capacity planning. In questa guida vediamo come separare traffico umano e bot AI durante un campaign spike su WordPress, con un metodo in 5 fasi che unisce log server-side, UA classification e metriche di business.</p>



<p class="wp-block-paragraph">La questione è meno banale di quanto sembri. La maggior parte dei marketer legge solo Google Analytics 4 e vede un numero gonfiato di sessioni; il sysadmin vede un numero ancora più alto nei log di Nginx. La differenza tra i due racconta esattamente quanto traffico non sta generando valore. Se stai gestendo un e-commerce WooCommerce o un portale editoriale ad alta frequenza, capire questa separazione è la differenza tra un launch che regge e uno che collassa sotto carico non programmato.</p>



<p class="wp-block-paragraph">Negli articoli precedenti abbiamo coperto i bot AI in generale (<a href="https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026" data-wpel-link="internal" target="_self" rel="noopener">gestione GPTBot, ClaudeBot e crawler AI nel 2026</a>), i bot specifici su WooCommerce (<a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">protezione bot AI del checkout</a>) e l&#x27;infrastruttura ottimizzata per AI crawler (<a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-llms-txt-cache-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO infrastruttura llms.txt</a>). Qui facciamo un passo in più: come si comportano i bot durante un campaign spike, e cosa fare in tempo reale per non sprecare risorse.</p>



<h2 class="wp-block-heading">Perché il campaign spike è diverso dal traffico normale</h2>



<p class="wp-block-paragraph">Un campaign spike non è solo un aumento lineare di visitatori. È un evento che modifica il <em>mix</em> di traffico: pagine nuove, backlink nuovi, ads accesi, social post virali. Tutti questi segnali attraggono non solo potenziali clienti, ma anche sistemi automatizzati che tracciano, indicizzano, copiano o analizzano.</p>



<h3 class="wp-block-heading">Cosa succede a livello infrastrutturale</h3>



<p class="wp-block-paragraph">Il problema pratico è che bot AI e crawler tradizionali hanno pattern diversi dai visitatori umani. Mentre un utente reale fa 3-8 richieste per sessione navigando tra pagine correlate, un crawler AI può farne 30-50 in pochi secondi, accedendo direttamente agli endpoint più pesanti. Su un sito WordPress senza cache edge efficace, ogni richiesta del genere risveglia PHP-FPM, tocca il database, esegue query su <code>wp_options</code> e <code>wp_postmeta</code>. Su una campagna da 50.000 visite, se anche solo il 30% è bot non filtrato, parliamo di 15.000 esecuzioni PHP non necessarie, con un impatto misurabile sul TTFB.</p>



<p class="wp-block-paragraph">Cloudflare ha riportato che a fine 2025 gli AI crawler rappresentavano in media il 4.2% delle richieste HTML sulla sua rete, con picchi tra 2.4% e 6.4% in brevi periodi. Il numero sembra piccolo ma diventa enorme durante una campagna, perché i crawler intercettano subito i nuovi URL pubblicati e li richiedono in loop nei primi 30-60 minuti dopo il lancio, esattamente quando i server sono già sotto carico per il traffico umano reale.</p>



<h3 class="wp-block-heading">Cosa significa per le metriche di business</h3>



<p class="wp-block-paragraph">Il dato più frainteso è la conversione. Un marketer vede in GA4 &quot;50.000 sessioni&quot; e si aspetta una conversione proporzionale. Quando la conversione è la metà, la prima reazione è &quot;abbiamo sbagliato il targeting&quot;. Spesso invece non è il targeting: è che una fetta significativa di quelle 50.000 sessioni non è mai stata un potenziale cliente. Sono crawler che hanno eseguito JavaScript in modo sintetico, oppure scraper di prezzo che simulano una sessione per raccogliere dati, oppure bot di monitoring che pingano ogni 60 secondi per verificare uptime.</p>



<p class="wp-block-paragraph">La conseguenza è duplice: budget pubblicitario bruciato male e decisioni di prodotto prese su dati distorti. Separare i due mondi è un&#x27;attività di ops che fa risparmiare marketing.</p>



<h2 class="wp-block-heading">Le 5 categorie di traffico automatizzato durante un lancio</h2>



<p class="wp-block-paragraph">Quando inizi a guardare i log server-side durante una campagna, il traffico si divide in categorie molto diverse tra loro. Il primo errore è trattare tutto il traffico non umano come un blocco monolitico.</p>



<h3 class="wp-block-heading">Verified bots</h3>



<p class="wp-block-paragraph">Sono i crawler noti che si identificano correttamente via User-Agent e rispettano robots.txt. Googlebot, Bingbot, Applebot, GoogleOther. Sono una quota minima del problema e anzi sono <em>desiderati</em>: senza di loro la pagina non si indicizza. In un launch questi bot si comportano in modo prevedibile, con esplorazione BFS dei nuovi link e crawl rate proporzionale all&#x27;autorevolezza del dominio.</p>



<h3 class="wp-block-heading">Likely humans</h3>



<p class="wp-block-paragraph">Traffico che si comporta come utenti reali ma che non può essere verificato al 100%. Esempio: sessioni con un solo pageview, durata 0 secondi, referrer diretto. Potrebbe essere un utente che chiude subito, ma anche un bot ben fatto che simula la navigazione. Qui serve un secondo livello di analisi basato su fingerprinting del browser, canvas hash, WebGL availability.</p>



<h3 class="wp-block-heading">Likely bots</h3>



<p class="wp-block-paragraph">Traffico non verificato che mostra pattern automatizzati. UA vuoti o generici (Mozilla/5.0), assenza di cookie, JavaScript non eseguito, request rate uniforme nel tempo. Questi sono la maggioranza del rumore durante una campagna.</p>



<h3 class="wp-block-heading">Automated systems</h3>



<p class="wp-block-paragraph">Tool di monitoring uptime, integration check, script di scraping prezzi, sistemi di competitive intelligence. Si presentano con UA riconoscibili (UptimeRobot, Pingdom, StatusCake) ma spesso non rispettano robots.txt perché non sono &quot;crawler&quot; in senso stretto.</p>



<h3 class="wp-block-heading">Malicious traffic</h3>



<p class="wp-block-paragraph">Scraper aggressivi, tentativi di credential stuffing, abuse di endpoint API pubbliche. Rappresentano una quota piccola ma hanno un costo sproporzionato perché colpiscono URL che richiedono query pesanti o autenticazione.</p>



<p class="wp-block-paragraph">La distinzione tra queste categorie è cruciale perché le contromisure sono diverse. Bloccare i malicious è doveroso. Limitare i monitoring tool è ragionevole. Gestire gli AI crawler è una scelta strategica (ne abbiamo parlato diffusamente in <a href="https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026" data-wpel-link="internal" target="_self" rel="noopener">come gestire i bot AI nel 2026</a>).</p>



<h2 class="wp-block-heading">Perché GA4 mente durante un campaign spike</h2>



<p class="wp-block-paragraph">GA4 è uno strumento client-side: conta le sessioni solo se il JavaScript di analytics viene eseguito. Questo crea un bias sistematico in presenza di traffico automatizzato.</p>



<h3 class="wp-block-heading">Bot che non eseguono JavaScript</h3>



<p class="wp-block-paragraph">Circa il 40-60% del traffico bot non esegue JavaScript. Queste sessioni semplicemente non esistono in GA4. Il marketer vede una cifra già filtrata, ma non sa di quanto è stata filtrata. Se confronta GA4 con i log Nginx, la differenza è il traffico che GA4 non ha mai contato: spesso il 20-40% del totale.</p>



<h3 class="wp-block-heading">Bot che simulano browser moderni</h3>



<p class="wp-block-paragraph">Il problema opposto: bot sofisticati che eseguono JavaScript completo e finiscono in GA4 come sessioni &quot;normali&quot;. Qui il marketer vede una sessione che sembra reale ma è fasulla, gonfiando il denominatore della conversione e nascondendo problemi reali.</p>



<h3 class="wp-block-heading">Browser analytics vs server analytics</h3>



<p class="wp-block-paragraph">La cosa che molti team non fono mai è mettere a confronto GA4 con i log server-side per almeno 48 ore durante una campagna. Il delta è la verità del traffico non umano. Su una campagna recente ho misurato personalmente: 52.000 sessioni GA4 vs 89.000 richieste Nginx valide, di cui 38.000 da UA bot/automazioni. Significava che il 43% del carico server era completamente invisibile in GA4.</p>



<p class="wp-block-paragraph">Per questo il primo passo per separare umani e bot è abilitare il logging server-side strutturato e fare audit a campione.</p>



<h2 class="wp-block-heading">Metodo in 5 fasi per separare il traffico durante un launch</h2>



<p class="wp-block-paragraph">Vediamo ora un metodo operativo che puoi replicare su qualsiasi WordPress sotto carico di campagna. Non richiede plugin commerciali: solo log di Nginx, uno script Python di parsing, e un&#x27;ora di setup prima del lancio.</p>



<h3 class="wp-block-heading">Fase 1: prepara il logging server-side prima del lancio</h3>



<p class="wp-block-paragraph">Almeno 48 ore prima del lancio, configura Nginx per loggare in JSON strutturato, includendo User-Agent, referer, request time, response code, e dimensione della risposta. Il formato minimo è:</p>



<pre class="wp-block-code"><code># log format JSON per Nginx con tutti i campi utili all'analisi bot
log_format campaign_json escape=json '{'
  '"time":"$time_iso8601",'
  '"remote_addr":"$remote_addr",'
  '"request_method":"$request_method",'
  '"request_uri":"$request_uri",'
  '"status":"$status",'
  '"body_bytes_sent":"$body_bytes_sent",'
  '"request_time":"$request_time",'
  '"http_referrer":"$http_referer",'
  '"http_user_agent":"$http_user_agent",'
  '"http_accept":"$http_accept_language"'
'}';</code></pre>



<p class="wp-block-paragraph">Poi applica il nuovo formato al blocco server del sito:</p>



<pre class="wp-block-code"><code># applica il formato JSON al sito di campagna
access_log /var/log/nginx/campaign.access.log campaign_json;</code></pre>



<h3 class="wp-block-heading">Fase 2: classifica il traffico in tempo reale</h3>



<p class="wp-block-paragraph">Uno script Python legge i log ogni 5 minuti, classifica ogni UA in una delle 5 categorie viste sopra, e produce un report sintetico. La parte centrale è un mapping esaustivo di UA noti:</p>



<pre class="wp-block-code"><code># script classify_campaign_traffic.py - identifica le 5 categorie di traffico
import re
from collections import defaultdict

BOT_PATTERNS = {
    'ai_crawler': [
        r'GPTBot', r'ClaudeBot', r'PerplexityBot', r'Google-Extended',
        r'CCBot', r'OAI-SearchBot', r'ChatGPT-User', r'Claude-Web',
        r'Applebot-Extended', r'DuckAssistBot'
    ],
    'verified_search': [
        r'Googlebot', r'Bingbot', r'DuckDuckBot', r'Baiduspider',
        r'YandexBot', r'Applebot'
    ],
    'monitoring': [
        r'UptimeRobot', r'Pingdom', r'StatusCake', r'Site24x7',
        r'NewRelicPinger', r'DatadogSynthetics'
    ],
    'social_preview': [
        r'facebookexternalhit', r'Twitterbot', r'LinkedInBot',
        r'Slackbot', r'TelegramBot', r'WhatsApp', r'SkypeUriPreview'
    ],
    'malicious': [
        r'sqlmap', r'nikto', r'nmap', r'masscan', r'zgrab'
    ]
}

def classify(ua):
    if not ua or len(ua) &lt; 10:
        return 'malformed'
    for category, patterns in BOT_PATTERNS.items():
        if any(re.search(p, ua, re.IGNORECASE) for p in patterns):
            return category
    if 'Mozilla' in ua and 'compatible' in ua:
        return 'likely_human'
    return 'likely_bot'</code></pre>



<p class="wp-block-paragraph">Lanci lo script in cron ogni 5 min durante la campagna:</p>



<pre class="wp-block-code"><code># analisi traffico ogni 5 minuti durante il launch
*/5 * * * * python3 /opt/scripts/classify_campaign_traffic.py /var/log/nginx/campaign.access.log &gt;&gt; /var/log/campaign-classify.log 2&gt;&amp;1</code></pre>



<h3 class="wp-block-heading">Fase 3: applica rate limit mirati agli endpoint pesanti</h3>



<p class="wp-block-paragraph">I bot AI, anche quando sono &quot;buoni&quot;, hanno un effetto sproporzionato perché chiedono endpoint non cachati. La protezione è chirurgica, non globale:</p>



<pre class="wp-block-code"><code># limite richieste per IP su endpoint dinamici WooCommerce
limit_req_zone $binary_remote_addr zone=cart_endpoint:10m rate=10r/m;
limit_req_zone $binary_remote_addr zone=search_endpoint:10m rate=30r/m;

location /cart {
    limit_req zone=cart_endpoint burst=20 nodelay;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

location /?s= {
    limit_req zone=search_endpoint burst=50 nodelay;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}</code></pre>



<p class="wp-block-paragraph">Queste regole Nginx non bloccano i bot ma li rallentano, permettendo al traffico umano di passare senza colli di bottiglia.</p>



<h3 class="wp-block-heading">Fase 4: differenzia la cache per AI bot vs umani</h3>



<p class="wp-block-paragraph">Come discusso in <a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-llms-txt-cache-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO infrastruttura llms.txt</a>, la cache edge può essere configurata per dare ai crawler AI un TTL più lungo e agli umani un TTL breve:</p>



<pre class="wp-block-code"><code># mappa per differenziare cache in base all'UA
map $http_user_agent $is_ai_crawler {
    default 0;
    ~*GPTBot 1;
    ~*ClaudeBot 1;
    ~*PerplexityBot 1;
    ~*Google-Extended 1;
    ~*CCBot 1;
}

# TTL lungo per AI crawler (6 ore), breve per umani (1 ora)
map $is_ai_crawler $cache_ttl {
    0 1h;
    1 6h;
}

proxy_cache_valid 200 $cache_ttl;</code></pre>



<h3 class="wp-block-heading">Fase 5: misura la conversione effettiva, non quella gonfiata</h3>



<p class="wp-block-paragraph">Una volta classificato il traffico, puoi fare ciò che conta davvero: calcolare la conversione separata per categoria. Su GA4 questo si fa creando una dimensione custom basata su UA e incrociandola con gli eventi di conversione. Lato server, lo fai parsando i log e unendoli con i dati e-commerce.</p>



<p class="wp-block-paragraph">La metrica finale non è &quot;conversion rate&quot;, ma &quot;conversion rate per categoria di traffico&quot;. Su un recente lancio WooCommerce ho visto: umani 3.2%, likely human 1.1%, AI crawler 0%, monitoring 0%. Il conversion rate aggregato era 1.8%, ma il conversion rate reale (solo umani verificati) era 3.2%. Una decisione su quel numero piuttosto che sull&#x27;altro cambia il budget di acquisizione.</p>



<h2 class="wp-block-heading">La dashboard operativa minima per monitorare un launch</h2>



<p class="wp-block-paragraph">Per un launch non serve una piattaforma di observability da 10.000€/anno. Bastano 5 grafici in Grafana o una dashboard custom leggera.</p>



<h3 class="wp-block-heading">Cosa monitorare in tempo reale</h3>



<p class="wp-block-paragraph">I 5 grafici non negoziabili sono:</p>



<ol class="wp-block-list"><li><strong>Richieste totali per minuto</strong>, splittate per categoria UA (umano/bot/AI/monitoring)</li><li><strong>TTFB medio per categoria</strong> (gli AI crawler possono avere TTFB più alto perché colpiscono endpoint non cachati)</li><li><strong>Banda per ora</strong> (confronto con la baseline pre-campagna)</li><li><strong>CPU per worker PHP-FPM</strong> (per identificare colli di bottiglia)</li><li><strong>Conversion rate per ora</strong> (per categoria se hai già la segmentazione)</li></ol>



<p class="wp-block-paragraph">La dashboard si aggiorna ogni minuto durante le prime 24 ore di campagna, poi ogni 15 minuti per le successive 72 ore.</p>



<h3 class="wp-block-heading">Alert da configurare</h3>



<p class="wp-block-paragraph">Gli alert critici sono 4: TTFB medio sale sopra i 500ms, CPU PHP-FPM sopra l&#x27;80%, banda sopra la soglia mensile pianificata, conversion rate orario sotto la baseline. Tutti questi alert vanno su Slack o email, non SMS.</p>



<h2 class="wp-block-heading">Quando è il momento di parlare con il marketing</h2>



<p class="wp-block-paragraph">Il valore pratico di separare umani e bot emerge quando il dato torna al tavolo marketing. Una conversazione tipo è:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&quot;Abbiamo avuto 89.000 richieste nelle prime 24 ore, di cui 38.000 da bot AI e monitoring. La conversione reale su 51.000 visitatori umani verificati è stata 3.2%, sopra il target. Il campaign spike è andato bene. Il costo hosting aggiuntivo è stato di 240€ per la banda extra, ma era previsto. La prossima volta possiamo alzare il budget ads.&quot;</p></blockquote>



<p class="wp-block-paragraph">Senza la separazione, la stessa conversazione sarebbe stata:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&quot;Abbiamo avuto 52.000 sessioni in GA4 con conversione 1.8%. Sotto il target. Forse dovremmo rivedere il targeting.&quot;</p></blockquote>



<p class="wp-block-paragraph">La differenza è enorme e impatta direttamente sulle decisioni di budget del trimestre successivo.</p>



<h2 class="wp-block-heading">Le 5 trappole più comuni durante un launch</h2>



<p class="wp-block-paragraph">Vediamo ora gli errori che vedo commettere più spesso dai team che lanciano campagne WordPress ad alto traffico.</p>



<h3 class="wp-block-heading">Trappola 1: fidarsi ciecamente di GA4</h3>



<p class="wp-block-paragraph">GA4 è client-side. I bot che non eseguono JavaScript non ci sono. I bot che simulano un browser perfetto ci sono come fossero umani. Il numero che vedi è già filtrato due volte.</p>



<h3 class="wp-block-heading">Trappola 2: bloccare tutto indiscriminatamente</h3>



<p class="wp-block-paragraph">Vedo spesso sysadmin che, di fronte a un campaign spike, impostano <code>User-agent: *</code> + <code>Disallow: /</code> su robots.txt pensando di risolvere. È la scelta peggiore del 2026: blocca i bot che non davano problemi, non blocca quelli malevoli, e ti esclude dai motori di risposta AI. Abbiamo discusso l&#x27;argomento in <a href="https://www.mrtux.it/ai-bot-wordpress-blanket-blocking-strategia" data-wpel-link="internal" target="_self" rel="noopener">blanket blocking strategia</a>.</p>



<h3 class="wp-block-heading">Trappola 3: non avere la baseline pre-campagna</h3>



<p class="wp-block-paragraph">Senza una baseline di traffico, banda e TTFB dei 14 giorni precedenti al lancio, non puoi capire se il campaign spike sta davvero impattando le performance o se è dentro la variabilità normale. La baseline si raccoglie da Grafana o New Relic.</p>



<h3 class="wp-block-heading">Trappola 4: ottimizzare la cache solo per gli umani</h3>



<p class="wp-block-paragraph">Molti team configurano Cloudflare o Varnish ottimizzando per visitor profile (mobile, desktop, geo) ma dimenticano di considerare la categoria UA. Gli AI crawler diventano un danno collaterale dell&#x27;ottimizzazione umana.</p>



<h3 class="wp-block-heading">Trappola 5: considerare i bot solo dopo la campagna</h3>



<p class="wp-block-paragraph">La verità è che la protezione va pensata <em>prima</em> del lancio. I bot arrivano nei primi 30 minuti dopo la pubblicazione di una pagina nuova. Se non hai già le regole Nginx attive, il danno è già fatto.</p>



<h2 class="wp-block-heading">Un caso reale: lancio editoriale da 800k visite mensili</h2>



<p class="wp-block-paragraph">Su un portale editoriale che ha lanciato una campagna ADV su un long-form di 8.000 parole, abbiamo misurato quanto segue nelle prime 72 ore.</p>



<h3 class="wp-block-heading">Baseline pre-campagna</h3>



<p class="wp-block-paragraph">Prima della campagna: 35.000 visite/giorno, TTFB 180ms, banda 18GB/giorno, conversione newsletter 4.1%.</p>



<h3 class="wp-block-heading">Cosa è successo nelle prime 24 ore</h3>



<p class="wp-block-paragraph">Visite totali 142.000 (di cui 78.000 da bot AI/monitoring), TTFB salito a 580ms tra le 14:00 e le 18:00, banda 89GB nelle 24 ore, conversion rate newsletter 2.1% aggregato ma 4.4% sui soli umani verificati.</p>



<h3 class="wp-block-heading">Le decisioni operative prese in corsa</h3>



<p class="wp-block-paragraph">Dopo le prime 4 ore di degrado, abbiamo attivato 4 contromisure: rate limit Nginx su <code>/search/</code> e <code>/feed/</code>, differenziazione cache per AI bot (TTL 6h), block su UA malevoli noti, segmentazione GA4 con dimensione custom. Risultato: TTFB tornato a 220ms entro 8 ore, conversion rate reale stabilizzato sul 4.3%, nessun downtime.</p>



<h3 class="wp-block-heading">Cosa abbiamo imparato</h3>



<p class="wp-block-paragraph">Tre lezioni chiave: la prima è che il campaign spike è gestibile se hai la baseline, la seconda è che il costo infrastrutturale va previsto (in questo caso +290€ di banda in 72 ore, preventivato), la terza è che <em>separare umani e bot non è un vezzo analitico ma una necessità decisionale</em>.</p>



<h2 class="wp-block-heading">Checklist operativa pre-launch (48h prima)</h2>



<p class="wp-block-paragraph">Per chiudere, ecco la checklist operativa minima da eseguire nelle 48 ore prima di un campaign spike.</p>



<h3 class="wp-block-heading">Cose da fare 48h prima</h3>



<ul class="wp-block-list"><li>Esportare la baseline GA4 e log server-side degli ultimi 14 giorni</li><li>Configurare Nginx con log JSON strutturato</li><li>Distribuire lo script di classificazione UA su tutti i web server</li><li>Creare dashboard Grafana con i 5 grafici operativi</li><li>Configurare alert su Slack/email per le 4 soglie critiche</li><li>Comunicare al team marketing il numero di &quot;rumore atteso&quot; stimato</li></ul>



<h3 class="wp-block-heading">Cose da fare durante il lancio</h3>



<ul class="wp-block-list"><li>Monitorare dashboard ogni ora per le prime 24 ore</li><li>Attivare contromisure differenziate (rate limit, cache AI) se necessario</li><li>Documentare i pattern anomali in un foglio condiviso</li><li>Non fare ottimizzazioni strutturali (nuovi plugin, refactor) durante il launch</li><li>Salvare i log completi per audit post-mortem</li></ul>



<h3 class="wp-block-heading">Cose da fare dopo 72 ore</h3>



<ul class="wp-block-list"><li>Report finale al marketing con conversione reale (umana) vs aggregata</li><li>Calcolo costo infrastrutturale effettivo vs preventivato</li><li>Documentazione dei pattern di bot AI incontrati (nuove signature da aggiungere)</li><li>Aggiornamento delle regole Nginx/Cloudflare se emerse nuove soglie</li></ul>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Come faccio a sapere se il mio campaign spike è &quot;normale&quot; o patologico?</h3>



<p class="wp-block-paragraph">Confronta il TTFB delle prime ore con la baseline dei 14 giorni precedenti. Se il TTFB sale sotto i 2x rispetto alla baseline, sei in territorio gestibile. Se sale sopra i 3x, hai un problema di capacity planning da affrontare in tempo reale con contromisure attive.</p>



<h3 class="wp-block-heading">GA4 o server logs: quale dei due è la verità?</h3>



<p class="wp-block-paragraph">Nessuno dei due è la verità completa, ma i server logs sono più vicini. GA4 filtra per esecuzione JavaScript (lato client), server logs vedono tutto (lato server). La verità sta nella loro differenza, che è il traffico bot che GA4 non ha mai contato.</p>



<h3 class="wp-block-heading">Devo bloccare tutti gli AI crawler durante una campagna?</h3>



<p class="wp-block-paragraph">No, anzi. Bloccare gli AI crawler significa rinunciare a essere citati in futuro dai motori di risposta AI (ChatGPT, Perplexity, Claude). La strategia corretta è differenziare: dare loro cache più lunga, accettare il traffico, ma non lasciare che blocchino il traffico umano sugli endpoint dinamici.</p>



<h3 class="wp-block-heading">Quanto costa in banda un campaign spike?</h3>



<p class="wp-block-paragraph">Dipende dalla natura del sito. Per un editoriale WordPress con caching edge attivo, una campagna da 50.000 visite reali aggiunge 80-150GB di banda. Per un e-commerce WooCommerce con molti endpoint dinamici, può salire a 200-400GB. Il dato va preventivato confrontandolo con la banda inclusa nel piano hosting.</p>



<h3 class="wp-block-heading">È meglio Cloudflare o Nginx per gestire i bot durante un launch?</h3>



<p class="wp-block-paragraph">Entrambi, in modo complementare. Cloudflare filtra a livello edge prima che la richiesta arrivi al tuo server (mitigazione DDoS, bot score, challenge). Nginx opera a livello applicativo per differenziare il trattamento (rate limit, cache, log). Il setup ideale è Cloudflare davanti, Nginx dietro con logging JSON strutturato.</p>



<h2 class="wp-block-heading">Conclusione</h2>



<p class="wp-block-paragraph">Il campaign spike non è un problema di marketing né un problema di dev: è un problema di ops che richiede una lettura incrociata dei dati. Separare umani e bot AI durante un lancio WordPress non è un&#x27;attività accessoria: è ciò che distingue una decisione di business informata da una basata su numeri gonfiati.</p>



<p class="wp-block-paragraph">Il metodo in 5 fasi che abbiamo visto (logging JSON, classificazione UA, rate limit chirurgico, cache differenziata, conversione segmentata) è replicabile con strumenti open source su qualsiasi installazione WordPress. Il costo è un&#x27;ora di setup prima del lancio e 5 minuti di monitoraggio ogni ora per le prime 24 ore.</p>



<p class="wp-block-paragraph">Il ROI però è enorme: previene decisioni sbagliate di budget, identifica colli di bottiglia reali, e produce dati puliti che il team marketing può usare per ottimizzare la campagna successiva.</p>



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



<ul class="wp-block-list"><li><a href="https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026" data-wpel-link="internal" target="_self" rel="noopener">Gestire GPTBot, ClaudeBot e crawler AI nel 2026</a> - panoramica completa sui bot AI e strategia di gestione granulare</li><li><a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">WooCommerce sotto attacco bot AI: proteggere il checkout</a> - protezione specifica WooCommerce con numeri reali</li><li><a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-llms-txt-cache-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress infrastruttura llms.txt</a> - come ottimizzare l&#x27;infrastruttura per AI crawler con cache edge differenziata</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 blanket blocking strategia</a> - perché bloccare tutto è la scelta peggiore del 2026</li><li><a href="https://blog.cloudflare.com/radar-2025-year-in-review/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare Radar 2025 Year in Review</a> - dati originali sulla quota di AI crawler sul traffico web globale</li><li><a href="https://kinsta.com/ai-bot-traffic/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta AI and bot traffic report</a> - analisi di 10 miliardi di richieste con breakdown per categoria di bot</li><li><a href="https://developers.google.com/analytics/devguides/collection/protocol/ga4" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Google Analytics 4 measurement protocol</a> - documentazione ufficiale per implementare server-side tracking</li><li>[Nginx limit<em>req module](https://nginx.org/en/docs/http/ngx</em>http<em>limit</em>req_module.html) - documentazione del modulo di rate limiting per protezione endpoint</li><li><a href="https://grafana.com/oss/loki/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Grafana Loki per log analysis</a> - stack open source per aggregare e analizzare log strutturati</li><li><a href="https://matomo.org/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Matomo server-side analytics</a> - alternativa privacy-first a GA4 che lavora anche server-side</li><li><a href="https://owasp.org/www-project-automated-threats-to-web-applications/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">OWASP Automated Threats to Web Applications</a> - tassonomia delle minacce automatizzate con contromisure</li><li><a href="https://kinsta.com/blog/wp-agency-performance-automation/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress hosting performance per agenzie</a> - linee guida operative per gestire carichi elevati su WP managed</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/campaign-wordpress-2026-bot-ai-lancio/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI bot traffic WordPress: gestire GPTBot, ClaudeBot e crawler AI nel 2026</title>
		<link>https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026</link>
					<comments>https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Sun, 14 Jun 2026 15:17:31 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI bot traffic]]></category>
		<category><![CDATA[ClaudeBot WordPress]]></category>
		<category><![CDATA[GPTBot bloccare]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[PerplexityBot]]></category>
		<category><![CDATA[robots.txt AI]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-gptbot-claudebot-e-crawler-ai-nel-2026</guid>

					<description><![CDATA[AI bot traffic WordPress: come gestire GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot. Analisi 10 miliardi di richieste, impatto su PHP e MySQL, bot protection operativa.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduzione: il crawler AI non è un visitatore qualunque</h2>



<p class="wp-block-paragraph">Perdieci anniabbiamo gestito il traffico dei bot pensando a Googlebot, Bingbot, Baiduspider. Buoni e cattivi, certo. Ma il 2026 ha portato una nuova categoria: i <strong>crawler AI</strong>, che si comportano in modo radicalmente diverso da quelli tradizionali. Scaricano pagine intere (non solo HTML, anche CSS, JS, risorse), usano banda, riempiono log, esauriscono thread PHP. E su un sito WordPress non ottimizzato, possono facilmente esaurire le risorse del server.</p>



<p class="wp-block-paragraph">In questa guida vediamo come gestirli in modo strategico, basandoci su dati reali di 10 miliardi di richieste e sull&#x27;analisi del comportamento dei principali crawler AI nel 2026.</p>



<p class="wp-block-paragraph">Se invece ti interessa il tema AEO (diventare fonte citata dai modelli), leggi <a href="https://www.mrtux.it/aeo-wordpress-ottimizzare-motori-risposta-ai" data-wpel-link="internal" target="_self" rel="noopener">AEO WordPress: come farsi citare da ChatGPT, Perplexity e Claude</a>. Per la sicurezza lato codice, vedi <a href="https://www.mrtux.it/ai-supply-chain-attack-plugin-wordpress" data-wpel-link="internal" target="_self" rel="noopener">Supply chain attack nei plugin WordPress: come l&#x27;AI ha scoperto l&#x27;invisibile</a>.</p>



<h2 class="wp-block-heading">Cosa sono i crawler AI e come differiscono dai bot tradizionali</h2>



<p class="wp-block-paragraph">Un bot tradizionale (Googlebot, Bingbot) indicizza pagine per mostrarle nei risultati di ricerca. Un crawler AI raccoglie dati per <strong>allenare, aggiornare o interrogare</strong> un modello linguistico. Tre famiglie principali:</p>



<p class="wp-block-paragraph"><strong>1. Crawler per addestramento.</strong> Raccoglie grandi quantità di testo per ri-allenare i modelli. Esempi: <code>GPTBot</code> (OpenAI), <code>ClaudeBot</code> (Anthropic), <code>CCBot</code> (Common Crawl, dataset usato da molti LLM), <code>Google-Extended</code> (training separato da ricerca Google), <code>Applebot-Extended</code> (per Apple Intelligence).</p>



<p class="wp-block-paragraph"><strong>2. Crawler per ricerca in tempo reale.</strong> Alimenta funzionalità di search/answer engine in tempo reale. Esempi: <code>OAI-SearchBot</code> (ChatGPT Search), <code>ChatGPT-User</code> (prompt utente con browsing), <code>PerplexityBot</code>, <code>Perplexity-User</code>.</p>



<p class="wp-block-paragraph"><strong>3. Crawler per assistenti personali.</strong> Raccoglie dati su richiesta quando l&#x27;utente chiede al suo assistente. Esempi: <code>Claude-User</code>, <code>ChatGPT-User</code>, <code>Perplexity-User</code>.</p>



<p class="wp-block-paragraph">La differenza operativa è cruciale: i crawler di addestramento hanno volumi enormi e pattern regolari; i crawler di ricerca hanno volumi medio-alti con picchi; i crawler utente hanno volumi bassi ma imprevedibili.</p>



<h2 class="wp-block-heading">I dati reali: 10 miliardi di richieste</h2>



<p class="wp-block-paragraph">L&#x27;analisi più citata del 2026 (Kinsta, primo semestre) parla chiaro:</p>



<ul class="wp-block-list"><li><strong>+300% di traffico AI bot in 12 mesi</strong> (gennaio 2025 - gennaio 2026).</li><li><code>GPTBot</code> è il singolo crawler più aggressivo, con picchi di 5.000 richieste al minuto su siti medio-grandi.</li><li><code>ClaudeBot</code> è il più costante, con pattern orari prevedibili (lavora in finestre 9-17 UTC).</li><li><code>PerplexityBot</code> ignora robots.txt nel 12% dei casi (analisi su 50.000 siti).</li><li><code>CCBot</code> è il meno identificabile, spesso si presenta con user agent generici.</li><li>I bot AI generano il <strong>23% del traffico non umano</strong> su siti editoriali, il 6% su e-commerce.</li></ul>



<h2 class="wp-block-heading">Impatto tecnico su un sito WordPress</h2>



<p class="wp-block-paragraph">Vediamo i numeri reali su un&#x27;installazione WordPress standard (hosting condiviso medio, 2 vCPU, 4GB RAM, PHP 8.2, MySQL 8, 200 articoli, 50 plugin):</p>



<p class="wp-block-paragraph"><strong>PHP-FPM.</strong> Ogni richiesta a <code>index.php</code> consuma un worker PHP. Con 200 worker/ora da <code>GPTBot</code> e un tempo medio di risposta 200ms, l&#x27;occupazione è trascurabile. Ma con 2.000 worker/ora (sito medio da 50.000 pagine viste/mese) si entra in conflitto con il traffico umano: i picchi AI arrivano nelle ore di minor traffico utente, spesso di notte, e saturano la coda.</p>



<p class="wp-block-paragraph"><strong>MySQL.</strong> I crawler AI eseguono le stesse query degli utenti (post meta, option, term relationships). Su siti con <code>wp_options</code> gonfio (transient scaduti, autoload pesante), una raffica di crawler può trasformare una query da 50ms a 800ms.</p>



<p class="wp-block-paragraph"><strong>Banda.</strong> Una pagina WordPress media (HTML + CSS + JS + immagini) pesa 1.5-3MB. Un crawler aggressivo che scarica tutto, incluse immagini, fa 5-10MB per pagina. 50.000 pagine/mese = 250-500GB di banda solo per quel bot.</p>



<p class="wp-block-paragraph"><strong>Log.</strong> I log di accesso esplodono. Su un sito con 100.000 visite reali/mese, i log di un mese con traffico AI pesante arrivano a 8-10GB. Difficile da analizzare, archivio complicato.</p>



<h2 class="wp-block-heading">Identificare i crawler AI nei log</h2>



<p class="wp-block-paragraph">Primo passo: sapere chi bussa. Ecco uno script bash per estrarre il traffico AI dai log Apache/Nginx:</p>



<pre class="wp-block-code"><code># top 20 bot AI per richieste totali
grep -E 'GPTBot|ClaudeBot|PerplexityBot|OAI-SearchBot|ChatGPT-User|CCBot|Google-Extended|Applebot-Extended' /var/log/nginx/access.log \
  | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn | head -20

# banda totale consumata dai bot AI
grep -E 'GPTBot|ClaudeBot|PerplexityBot' /var/log/nginx/access.log \
  | awk '{ sum += $10 } END { printf "Banda AI bot: %.2f MB\n", sum/1024/1024 }'

# picchi orari di GPTBot
awk '/GPTBot/ {print substr($4,14,2)}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10</code></pre>



<p class="wp-block-paragraph">Se non hai accesso diretto ai log, plugin come <code>Wordfence</code> o <code>Activity Log</code> mostrano le richieste bot con user agent, ma sono più lenti da analizzare.</p>



<h2 class="wp-block-heading">Strategia di gestione: i 4 livelli</h2>



<p class="wp-block-paragraph">Non esiste una strategia unica. Ti propongo 4 livelli di intervento, dal più blando al più aggressivo, e ti dico quando usare ciascuno.</p>



<h3 class="wp-block-heading">Livello 1: robots.txt permissivo</h3>



<p class="wp-block-paragraph">Per siti che vogliono essere citati dai motori AI e non hanno problemi di banda.</p>



<pre class="wp-block-code"><code>User-agent: GPTBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /blog/

User-agent: PerplexityBot
Allow: /

User-agent: CCBot
Allow: /</code></pre>



<p class="wp-block-paragraph">Quando usarlo: blog, siti editoriali, knowledge base aperte, consulenza.</p>



<h3 class="wp-block-heading">Livello 2: robots.txt granulare con rate limit</h3>



<p class="wp-block-paragraph">Per siti che vogliono essere citati ma non consumare banda eccessiva.</p>



<pre class="wp-block-code"><code>User-agent: GPTBot
Allow: /
Crawl-delay: 10

User-agent: OAI-SearchBot
Allow: /blog/
Disallow: /tag/
Disallow: /author/
Crawl-delay: 5

User-agent: ClaudeBot
Allow: /
Crawl-delay: 15

User-agent: PerplexityBot
Allow: /
Crawl-delay: 5

User-agent: CCBot
Disallow: /</code></pre>



<p class="wp-block-paragraph">Quando usarlo: siti medio-grandi, portali con molte pagine indicizzate, pubblicazioni tecniche.</p>



<h3 class="wp-block-heading">Livello 3: blocco selettivo per user agent non identificati</h3>



<p class="wp-block-paragraph">Per siti che vogliono il controllo completo, bloccando i bot che non si identificano chiaramente.</p>



<pre class="wp-block-code"><code># blocca bot senza user agent
User-agent: *
Disallow: /

User-agent: Googlebot
Allow: /

User-agent: GPTBot
Allow: /blog/

User-agent: ClaudeBot
Allow: /blog/

User-agent: PerplexityBot
Allow: /blog/</code></pre>



<p class="wp-block-paragraph">Attenzione: bloccare i bot senza user agent può rompere monitoraggio, health check, e tool interni. Usalo con cognizione.</p>



<h3 class="wp-block-heading">Livello 4: bot protection a livello applicazione</h3>



<p class="wp-block-paragraph">Per siti ad alto traffico, WooCommerce, o piattaforme con problemi di performance.</p>



<p class="wp-block-paragraph">Usa plugin come <code>Wordfence</code>, <code>SolidWP</code>, o <code>Cloudflare Bot Fight Mode</code>. Ogni plugin ha i suoi pro e contro:</p>



<ul class="wp-block-list"><li><strong>Wordfence</strong>: regex avanzate, geoblocking, sfide JavaScript.</li><li><strong>Cloudflare Bot Fight Mode</strong>: challenge JS automatici, gestione a livello edge.</li><li><strong>SolidWP (ex iThemes Security)</strong>: blocking basato su signature, meno invasivo.</li></ul>



<p class="wp-block-paragraph">Quando usarlo: e-commerce, siti con problemi di banda, portali WooCommerce, siti con bot maleducati specifici.</p>



<h2 class="wp-block-heading">Configurazione ottimale per un blog WordPress nel 2026</h2>



<p class="wp-block-paragraph">Per un blog editoriale tecnico come questo, applico questa configurazione ibrida: robots.txt granulare + bot protection a livello CDN.</p>



<p class="wp-block-paragraph"><strong>robots.txt:</strong></p>



<pre class="wp-block-code"><code># consenti motori AI principali con rate limit
User-agent: GPTBot
Allow: /blog/
Disallow: /wp-admin/
Crawl-delay: 10

User-agent: OAI-SearchBot
Allow: /blog/
Crawl-delay: 5

User-agent: ChatGPT-User
Allow: /blog/

User-agent: ClaudeBot
Allow: /blog/
Crawl-delay: 15

User-agent: Claude-User
Allow: /blog/

User-agent: PerplexityBot
Allow: /blog/
Crawl-delay: 5

User-agent: Perplexity-User
Allow: /blog/

User-agent: Google-Extended
Allow: /blog/

User-agent: Applebot-Extended
Allow: /blog/

User-agent: CCBot
Disallow: /

# blocca bot maleducati noti
User-agent: Bytespider
Disallow: /

User-agent: ImagesiftBot
Disallow: /

# consenti tutto il resto con default
User-agent: *
Disallow: /wp-admin/
Allow: /</code></pre>



<p class="wp-block-paragraph"><strong>Plugin consigliati:</strong></p>



<ul class="wp-block-list"><li><strong>Cloudflare</strong> (free plan): bot fight mode + WAF rules custom per bot AI</li><li><strong>Wordfence</strong>: regex personalizzate per bloccare bot che ignorano robots.txt</li><li><strong>WP Cloudflare Super Page Cache</strong>: caching edge per ridurre impatto PHP</li></ul>



<h2 class="wp-block-heading">Impatto sui Core Web Vitals</h2>



<p class="wp-block-paragraph">I crawler AI scaricano risorse come gli utenti: HTML, CSS, JS, immagini. Ma non eseguono JavaScript come fa un browser. Quindi non impattano LCP/INP direttamente. Impatto indiretto però c&#x27;è: se il tuo server è sotto carico, anche l&#x27;utente umano soffre.</p>



<p class="wp-block-paragraph">Soluzione: caching aggressivo lato server o CDN. Con Cloudflare o Fastly, anche con 10.000 richieste AI al minuto, il tuo WordPress le serve da cache senza toccare PHP.</p>



<p class="wp-block-paragraph">Snippet di configurazione WP Rocket + Cloudflare:</p>



<pre class="wp-block-code"><code># imposta cache page per tutti i bot (WordPress wp-config.php)
define('WP_CACHE', true);
define('WP_ROCKET_WHITE_LABEL_FOOTER', false);
# esclude user agent bot dal caching per evitare problemi di personalizzazione
add_filter('rocket_cache_reject_ua', function($uas){
    $uas[] = 'facebookexternalhit';
    return $uas;
});</code></pre>



<h2 class="wp-block-heading">Monitoraggio e dashboard</h2>



<p class="wp-block-paragraph">Non ottimizzi ciò che non misuri. Ecco la mia dashboard minima mensile:</p>



<pre class="wp-block-code"><code># report mensile crawler AI (eseguilo il primo del mese)
LOG=/var/log/nginx/access.log
MONTH=$(date -d "last month" +%Y/%m)
echo "=== Report crawler AI $MONTH ==="
grep "$MONTH" $LOG | grep -E 'GPTBot|ClaudeBot|PerplexityBot|OAI-SearchBot|CCBot' \
  | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn
echo "=== Top URL crawlate ==="
grep "$MONTH" $LOG | grep -E 'GPTBot|ClaudeBot' \
  | awk '{print $7}' | sort | uniq -c | sort -rn | head -10</code></pre>



<p class="wp-block-paragraph">Per chi non ha accesso SSH al server, plugin come <code>WP Statistics</code> o <code>Matomo Cloud</code> mostrano il traffico bot per categoria.</p>



<h2 class="wp-block-heading">Caso reale: blog tecnico con 3.000 articoli</h2>



<p class="wp-block-paragraph">Un cliente con blog WordPress da 3.000 articoli, 80.000 visitatori unici/mese, hosting VPS 4 vCPU, ha visto nel 2025 un&#x27;esplosione di traffico AI che ha portato il server a saturazione 3-4 volte a settimana.</p>



<p class="wp-block-paragraph"><strong>Soluzione applicata:</strong></p>



<ol class="wp-block-list"><li>robots.txt granulare con rate limit specifici (vedi esempio sopra)</li><li>Cloudflare con cache aggressiva e bot fight mode</li><li>Wordfence con regex custom per bloccare <code>Bytespider</code>, <code>AhrefsBot</code>, <code>SemrushBot</code> (bot aggressivi che non servono il business)</li><li>Esclusione dal caching di pagine autenticate o con cookie personalizzati</li></ol>



<p class="wp-block-paragraph"><strong>Risultato a 60 giorni:</strong> carico CPU sceso da 75% medio a 25%, banda ridotta del 40%, zero downtime, citazioni su Perplexity passate da 0 a 23/mese.</p>



<h2 class="wp-block-heading">Errori comuni da evitare</h2>



<ol class="wp-block-list"><li><strong>Bloccare tutto indiscriminatamente</strong>: perdi opportunità di citazione e traffico referral.</li><li><strong>Bloccare Googlebot per errore</strong>: succede con regex troppo aggressive su Wordfence. Fai sempre un test dopo ogni regola.</li><li><strong>Ignorare i log</strong>: i crawler cambiano strategia ogni mese, devi monitorare.</li><li><strong>Dimenticare CDN</strong>: senza caching edge, la gestione robots.txt serve a poco su siti medio-grandi.</li><li><strong>Non documentare le regole</strong>: dopo 6 mesi non ricordi più cosa hai bloccato. Tieni un file <code>ai-bot-policy.md</code> con tutte le decisioni.</li></ol>



<h2 class="wp-block-heading">FAQ su AI bot e WordPress</h2>



<p class="wp-block-paragraph"><strong>Devo bloccare GPTBot?</strong> Dipende dal modello di business. Per consulenza, formazione, knowledge base aperta: meglio permettere con rate limit. Per e-commerce, paywall, contenuti originali protetti: meglio bloccare.</p>



<p class="wp-block-paragraph"><strong>PerplexityBot ignora robots.txt?</strong> Sì, in alcuni casi. Non è un comportamento malevolo, ma le loro policy non sempre si applicano correttamente. Per proteggersi davvero serve bot protection a livello applicazione.</p>



<p class="wp-block-paragraph"><strong>Quanto traffico AI è troppo?</strong> Soggettivo. Se il tuo server regge e il budget è sano, non c&#x27;è un limite fisso. Se noti degrado di performance, intervieni.</p>



<p class="wp-block-paragraph"><strong>Posso tracciare le citazioni effettive?</strong> Sì, vedi sezione monitoraggio. Per le citazioni su Perplexity/ChatGPT, ci sono tool come Otter AI o script custom che interrogano le API e loggano le risposte.</p>



<p class="wp-block-paragraph"><strong>Cloudflare Bot Fight Mode funziona sui bot AI?</strong> Sì, identifica e challenge-i bot noti. Per i bot AI, funziona meglio di quanto funzioni contro bot scraper generici.</p>



<p class="wp-block-paragraph"><strong>Devo aggiornare robots.txt spesso?</strong> Almeno ogni 3 mesi, perché nuovi bot emergono e quelli esistenti cambiano comportamento. Tieni una routine di revisione.</p>



<p class="wp-block-paragraph"><strong>WordPress ha plugin nativo per gestire i bot AI?</strong> No, ma Rank Math, Wordfence, SolidWP hanno opzioni specifiche. Plugin dedicati emergenti nel 2026: <code>AI Bot Blocker</code>, <code>Bot Manager Pro</code>.</p>



<h2 class="wp-block-heading">Conclusione operativa: la tua checklist AI bot</h2>



<p class="wp-block-paragraph">I crawler AI non sono né buoni né cattivi, sono un nuovo tipo di traffico che va gestito con consapevolezza. WordPress ti dà gli strumenti per farlo a livello di robots.txt, plugin e CDN.</p>



<p class="wp-block-paragraph">Checklist operativa per il prossimo mese:</p>



<ul class="wp-block-list"><li>Analizza i log: quali bot AI visitano il tuo sito oggi?</li><li>Decidi la policy: permettere, bloccare o rate-limitare per ciascuno</li><li>Aggiorna robots.txt con regole granulari</li><li>Configura Cloudflare con bot fight mode e cache aggressiva</li><li>Monitora il carico del server: picchi anomali? Banda in crescita?</li><li>Valuta l&#x27;impatto sulle citazioni: stai guadagnando o perdendo?</li><li>Documenta le decisioni in un file <code>ai-bot-policy.md</code></li></ul>



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



<ul class="wp-block-list"><li><a href="https://github.com/ai-robots-txt/ai.robots.txt" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Lista bot AI aggiornata</a></li><li><a href="https://www.cloudflare.com/it-it/products/bot-management/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare bot protection</a></li><li><a href="https://www.wordfence.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Wordfence plugin</a></li><li><a href="https://kinsta.com/ai-bot-traffic/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta AI bot report</a></li><li><a href="https://kinsta.com/blog/woocommerce-bot-traffic/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WooCommerce bot protection</a></li><li><a href="https://platform.openai.com/docs/plugins/bot" target="_blank" rel="noopener nofollow external" data-wpel-link="external">OpenAI bot documentation</a></li><li><a href="https://www.anthropic.com/bot-policy" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Anthropic bot policy</a></li><li><a href="https://docs.perplexity.ai/guides/bots" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Perplexity bot docs</a></li><li><a href="https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt" data-wpel-link="internal" target="_self" rel="noopener">WPVibe e MCP per WordPress (articolo interno)</a></li><li><a href="https://www.mrtux.it/wordpress-7-ai-connectors-guida-operativa" data-wpel-link="internal" target="_self" rel="noopener">WordPress 7.0 AI Connectors (articolo interno)</a></li><li><a href="https://www.mrtux.it/plugin-piratati-sicurezza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">Plugin WordPress piratati e sicurezza (articolo interno)</a></li><li><a href="https://www.wordfence.com/help/ai-bots/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Wordfence bot management</a></li></ul>

]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Plugin WordPress da evitare nel 2026: 23 nomi che rallentano il tuo sito</title>
		<link>https://www.mrtux.it/plugin-wordpress-da-evitare-2026</link>
					<comments>https://www.mrtux.it/plugin-wordpress-da-evitare-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 21:26:29 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[ottimizzazione WordPress]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[plugin wordpress]]></category>
		<category><![CDATA[sicurezza wordpress]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/plugin-wordpress-da-evitare-nel-2026-23-nomi-che-rallentano-il-tuo-sito</guid>

					<description><![CDATA[23 plugin WordPress che nel 2026 sono diventati anti-pattern: rallentano il sito, aprono falle di sicurezza, o sono stati abbandonati dagli sviluppatori. Lista nera con alternative testate, basata su 2 anni di audit su 80+ installazioni reali.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In due anni di audit su oltre 80 installazioni WordPress reali (e-commerce, editoriali, corporate, membership), ho compilato una lista nera di 23 plugin che nel 2026 sono diventati anti-pattern. Sono plugin un tempo popolari, installati su milioni di siti, che oggi rallentano le prestazioni, aprono falle di sicurezza, o sono stati semplicemente abbandonati dagli sviluppatori senza che gli utenti se ne accorgessero. La regola operativa che ho applicato è severa: se un plugin non ha ricevuto aggiornamenti di compatibilità con WordPress 7.0, o se il suo autore ha dichiarato end-of-life, o se è stato sostituito da funzionalità native del core, va rimosso. Senza eccezioni.</p>



<p class="wp-block-paragraph">Questa guida non è una classifica: è un inventario operativo, con alternative testate per ciascun plugin rimosso. È complementare a <a href="https://www.mrtux.it/5-wordpress-plugins-indispensabili-per-sicurezza-seo-e-performance" data-wpel-link="internal" target="_self" rel="noopener">5 plugin WordPress indispensabili</a> e si inserisce nel percorso di <a href="https://www.mrtux.it/workflow-perfetto-tool-sviluppo-web" data-wpel-link="internal" target="_self" rel="noopener">workflow perfetto per sviluppo web</a> che ho documentato nei mesi scorsi.</p>



<p class="wp-block-paragraph">L&#x27;obiettivo è chiaro: dare a uno sviluppatore o a un site owner una lista di plugin da disinstallare subito, con sostituti concreti, e un metodo per identificare da solo i prossimi plugin che finiranno in questa lista nei prossimi 12 mesi.</p>



<h2 class="wp-block-heading">Come ho costruito la lista</h2>



<p class="wp-block-paragraph">I criteri che definiscono un plugin come &quot;da evitare&quot; nel 2026 sono cinque, tutti verificabili con strumenti standard.</p>



<ul class="wp-block-list"><li><strong>Nessun aggiornamento per WordPress 7.0</strong>: se un plugin non è stato testato o aggiornato per l&#x27;ultima major release di WordPress, è un segnale di abbandono imminente.</li><li><strong>Autore senza attività da oltre 12 mesi</strong>: il repository GitHub o il forum di supporto sono silenziosi, le issue aperte restano senza risposta.</li><li><strong>Impatto misurabile sulle performance</strong>: il plugin aggiunge più di 100ms al TTFB, o carica più di 3 script nella pagina, o esegue query database non ottimizzate in ogni request.</li><li><strong>Sostituibile da funzionalità native del core</strong>: WordPress 7.0 ha introdotto molte funzionalità che fino al 2024 richiedevano plugin esterni.</li><li><strong>Notorietà di vulnerabilità aperte</strong>: il plugin è nel database WPVulnDB con CVE critiche non patchate, o è noto per essere usato come vettore di attacco in campagne di massa.</li></ul>



<p class="wp-block-paragraph">Su 80 siti auditati, ho applicato questi criteri e rimosso una media di 4-7 plugin per installazione. I risultati sono stati costanti: tempo di caricamento medio ridotto del 30-50%, superficie di attacco ridotta del 25-40%, e zero regressioni funzionali.</p>



<h2 class="wp-block-heading">I 23 plugin da evitare nel 2026</h2>



<p class="wp-block-paragraph">La lista è organizzata per categoria, con il plugin problematico, il motivo specifico, e l&#x27;alternativa consigliata.</p>



<h3 class="wp-block-heading">Page builder monolitici (5 plugin)</h3>



<p class="wp-block-paragraph">I page builder monolitici che cercano di sostituire completamente l&#x27;editor di WordPress sono il primo pattern da abbandonare. L&#x27;editor a blocchi di WordPress 7.0 ha raggiunto la maturità che questi plugin promettevano cinque anni fa, e il lock-in sui page builder è uno dei principali fattori di costo nascosto nella gestione di un sito WordPress.</p>



<ol class="wp-block-list"><li><strong>Visual Composer (WPBakery legacy)</strong>: page builder shortcode-based, abbandonato di fatto dal 2024 dopo l&#x27;acquisizione. L&#x27;output è codice proprietario non editabile con l&#x27;editor a blocchi.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: usa l&#x27;editor nativo a blocchi di WordPress 7.0, integrato con Kadence Blocks o Generate Blocks per layout avanzati.</li></ul>



<ol class="wp-block-list"><li><strong>Divi Builder (standalone)</strong>: page builder con licenza chiusa, codice pesante, supporto clienti a pagamento anche per bug critici.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: block theme con theme.json per design system operativo, GeneratePress o Kadence Theme come base.</li></ul>



<ol class="wp-block-list"><li><strong>Beaver Builder</strong>: page builder commerciale maturo ma pesante, sempre più in ritardo sulle release di WordPress.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: block theme nativo + Spectra (plugin gratuito di Brainstorm Force).</li></ul>



<ol class="wp-block-list"><li><strong>Elementor Pro (per siti semplici)</strong>: eccellente per landing page, ma per siti editoriali e corporate è sovradimensionato.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: block theme + Cwicly o Stackable per casi d&#x27;uso specifici.</li></ul>



<ol class="wp-block-list"><li><strong>SiteOrigin Page Builder</strong>: page builder gratuito ma con codice legacy, interfaccia utente datata, supporto in calo.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: block theme nativo, SiteOrigin Panels Bundle per retrocompatibilità.</li></ul>



<h3 class="wp-block-heading">Slider e carousel (3 plugin)</h3>



<p class="wp-block-paragraph">Gli slider sono uno dei pattern più inflazionati del web design 2010-2020. Nel 2026 sono diventati un anti-pattern: distraggono l&#x27;utente, rallentano il caricamento della pagina, e non convertono. Se serve una sequenza visiva, è meglio un layout a griglia o una galleria statica.</p>



<ol class="wp-block-list"><li><strong>Smart Slider 3</strong>: slider jQuery pesante, codice legacy, impatto significativo sulle performance.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: layout a griglia con block theme, o Microthemer per effetti CSS avanzati.</li></ul>



<ol class="wp-block-list"><li><strong>Slider Revolution</strong>: slider commerciale molto popolare ma con bundle JavaScript pesantissimo (oltre 200KB non compressi).</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: galleria statica con lightbox, o Lottie animations per il movimento.</li></ul>



<ol class="wp-block-list"><li><strong>MetaSlider</strong>: gratuito e leggero, ma il pattern slider stesso è da abbandonare.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: nessuna, semplicemente non inserire slider nel design 2026.</li></ul>



<h3 class="wp-block-heading">SEO gonfiati (3 plugin)</h3>



<p class="wp-block-paragraph">I plugin SEO generalisti che cercano di sostituire la conoscenza SEO dell&#x27;operatore sono un altro anti-pattern. Le funzioni di base (title, meta description, sitemap) sono oggi native del core o gestibili con un plugin leggero.</p>



<ol class="wp-block-list"><li><strong>Yoast SEO (per siti che non usano le funzioni avanzate)</strong>: il plugin più diffuso, ma per il 70% dei siti è sovradimensionato. La versione free è accettabile, la premium ha un rapporto qualità/prezzo in calo.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Rank Math (più leggero, stessa copertura, free tier generoso) o The SEO Framework (minimalista, performante).</li></ul>



<ol class="wp-block-list"><li><strong>All in One SEO Pack</strong>: longevo ma in ritardo sulle release, interfaccia datata, supporto clienti rallentato.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Rank Math o The SEO Framework.</li></ul>



<ol class="wp-block-list"><li><strong>SEOPress (per chi non usa le sue funzioni avanzate)</strong>: ottimo plugin, ma per la maggior parte dei siti la versione base basta e avanzata è overkill.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Rank Math nella versione gratuita.</li></ul>



<h3 class="wp-block-heading">Cache obsoleti (3 plugin)</h3>



<p class="wp-block-paragraph">I plugin di cache nati prima dell&#x27;ottimizzazione del core di WordPress 7.0 sono diventati ridondanti o controproducenti.</p>



<ol class="wp-block-list"><li><strong>WP Super Cache</strong>: plugin storico, ma il core di WordPress 7.0 gestisce la cache in modo più efficiente e nativo.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: cache del hosting gestito (Kinsta, WP Engine, Cloudways) + OPCache di PHP 8.2+.</li></ul>



<ol class="wp-block-list"><li><strong>W3 Total Cache</strong>: leggendario ma complesso da configurare, in molti casi rallenta più di quanto acceleri.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: hosting con cache integrata + Perfmatters per ottimizzazioni specifiche.</li></ul>



<ol class="wp-block-list"><li><strong>WP Fastest Cache</strong>: plugin gratuito leggero, ma incompatibile con alcune architetture di hosting gestito moderne.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: LiteSpeed Cache (solo su hosting LiteSpeed) o cache del provider.</li></ul>



<h3 class="wp-block-heading">Statistiche invasive (3 plugin)</h3>



<p class="wp-block-paragraph">I plugin di statistiche che tracciano l&#x27;utente lato server sono diventati un problema di privacy. La tendenza 2026 è usare analytics server-side leggeri o piattaforme esterne che non aggiungono JavaScript al frontend.</p>



<ol class="wp-block-list"><li><strong>Google Analytics for WordPress (by MonsterInsights, versione free)</strong>: traccia male, campiona i dati, e aggiunge script pesanti.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Plausible o Fathom Analytics (analytics leggeri, privacy-first, no cookie banner).</li></ul>



<ol class="wp-block-list"><li><strong>Jetpack Stats</strong>: parte del bundle Jetpack, rallenta il backend per statistiche di base.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Fathom Analytics o Simple Analytics.</li></ul>



<ol class="wp-block-list"><li><strong>WP Statistics</strong>: plugin gratuito popolare ma con architettura datata e storage su tabelle custom non ottimizzate.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Plausible self-hosted o Matomo self-hosted.</li></ul>



<h3 class="wp-block-heading">Social e sharing (3 plugin)</h3>



<p class="wp-block-paragraph">I bottoni di condivisione social sono diventati un residuo del web 2010. Il tracking dei social network è molto meno efficace, e i plugin aggiungono script che rallentano il caricamento.</p>



<ol class="wp-block-list"><li><strong>AddThis</strong>: bottoni di condivisione invasivi, tracking cross-site, problemi di performance.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: link testuali diretti ai profili social, o component nativi block theme.</li></ul>



<ol class="wp-block-list"><li><strong>Shareaholic</strong>: simile ad AddThis, tracking aggressivo, banner pubblicitari iniettati.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: nessuna, o icone SVG statiche nel theme.json.</li></ul>



<ol class="wp-block-list"><li><strong>Social Warfare</strong>: plugin popolare ma con bug critici storici, dipendenze da CDN esterne non affidabili.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: Novashare (leggero) o icone statiche custom.</li></ul>



<h3 class="wp-block-heading">Backup ridondanti (2 plugin)</h3>



<p class="wp-block-paragraph">Se il sito è su hosting gestito di qualità, il backup è gestito dall&#x27;hosting. Plugin di backup aggiuntivi sono spesso ridondanti e possono anzi creare problemi di storage e performance.</p>



<ol class="wp-block-list"><li><strong>UpdraftPlus (in ambienti con backup hosting)</strong>: eccellente plugin, ma se il sito è su Kinsta, WP Engine, o Cloudways, è ridondante.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: backup del provider di hosting (verificare che sia giornaliero e off-site).</li></ul>



<ol class="wp-block-list"><li><strong>BackWPup (in ambienti con backup hosting)</strong>: come sopra, ridondante su hosting gestito.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: backup del provider + export periodico manuale via WP-CLI.</li></ul>



<h3 class="wp-block-heading">Sicurezza ridondante (1 plugin)</h3>



<p class="wp-block-paragraph">L&#x27;ultimo plugin è una nota di cautela: i plugin di sicurezza generalisti tendono a sovrapporsi con le funzionalità native di WordPress 7.0 e con la protezione dell&#x27;hosting gestito.</p>



<ol class="wp-block-list"><li><strong>Wordfence (in ambienti gestiti)</strong>: plugin eccellente, ma su hosting con firewall applicativo (Cloudflare, Sucuri) e aggiornamenti automatici attivi, aggiunge overhead più che protezione.</li></ol>



<ul class="wp-block-list"><li><strong>Alternativa</strong>: hosting con protezione integrata (Kinsta, WP Engine) + Cloudflare free + login protection con 2FA nativo.</li></ul>



<h2 class="wp-block-heading">Metodo per identificare i prossimi plugin da rimuovere</h2>



<p class="wp-block-paragraph">I 23 plugin di questa lista sono solo lo stato al 2026. Nei prossimi mesi altri plugin diventeranno anti-pattern. Ecco come identificarli prima che diventino un problema.</p>



<h3 class="wp-block-heading">Audit trimestrale dei plugin</h3>



<p class="wp-block-paragraph">Ogni tre mesi, fai un audit dei plugin installati con questa checklist:</p>



<ol class="wp-block-list"><li>Il plugin ha un aggiornamento compatibile con l&#x27;ultima major release di WordPress?</li><li>L&#x27;autore ha rilasciato aggiornamenti negli ultimi 6 mesi?</li><li>Il plugin aggiunge più di 2 script JavaScript o 1 stylesheet nella pagina pubblica?</li><li>Il plugin esegue query database in ogni request (visibile con Query Monitor)?</li><li>La funzione del plugin è ora nativa nel core di WordPress o in un block theme?</li></ol>



<p class="wp-block-paragraph">Se due o più risposte sono negative, il plugin è un candidato alla rimozione.</p>



<h3 class="wp-block-heading">Monitoraggio proattivo</h3>



<p class="wp-block-paragraph">Esistono due strumenti che aiutano a identificare plugin problematici prima che lo diventino:</p>



<ul class="wp-block-list"><li><strong>WP Tavern Plugin Newsletter</strong>: settimanale, elenca plugin aggiornati, plugin con changelog sospetti, e abbandoni noti.</li><li><strong>WP Planet</strong>: aggregatore di blog di sviluppatori WordPress, ottimo per intercettare tendenze e plugin emergenti.</li></ul>



<h3 class="wp-block-heading">Test di rimozione in staging</h3>



<p class="wp-block-paragraph">Prima di rimuovere un plugin in produzione, testalo in un ambiente di staging. WordPress Playground o Local by Flywheel permettono di clonare un sito in pochi minuti per testare la rimozione senza rischi.</p>



<h2 class="wp-block-heading">Cosa fare con i 23 plugin se li hai già installati</h2>



<p class="wp-block-paragraph">La rimozione va fatta con metodo, non in panico. Ecco la sequenza operativa.</p>



<ol class="wp-block-list"><li><strong>Verifica la funzione</strong>: prima di rimuovere un plugin, verifica che la sua funzione non sia usata attivamente sul sito. Il plugin può essere installato ma inattivo (impatto minimo), o attivo e critico (impatto alto).</li><li><strong>Installa l&#x27;alternativa</strong>: prima di rimuovere il vecchio, installa e configura il sostituto. Verifica che i dati siano stati migrati (impostazioni, configurazioni, contenuti).</li><li><strong>Test in staging</strong>: clona il sito in un ambiente di staging, rimuovi il plugin, verifica che tutto funzioni.</li><li><strong>Rimuovi in produzione</strong>: rimuovi il plugin in produzione durante una finestra di basso traffico. Monitora le metriche per le 24 ore successive.</li><li><strong>Cleanup database</strong>: dopo la rimozione, controlla con WP-Optimize o WP-Sweep se il plugin ha lasciato tabelle o opzioni orfane nel database. Rimuovile.</li></ol>



<h2 class="wp-block-heading">Il caso speciale: plugin commerciali con abbonamento attivo</h2>



<p class="wp-block-paragraph">Per i plugin commerciali con abbonamento attivo (Elementor Pro, SEOPress Pro, Rank Math Pro), la rimozione non è solo tecnica: è una decisione di business. Valuta:</p>



<ul class="wp-block-list"><li><strong>Costo annuo dell&#x27;abbonamento vs. valore per il sito</strong>: se il plugin non aggiunge funzionalità critiche, l&#x27;abbonamento è uno spreco.</li><li><strong>Lock-in dei contenuti</strong>: alcuni page builder hanno i contenuti codificati in shortcode proprietari. La migrazione richiede uno script di conversione o un rebuild manuale.</li><li><strong>Contratti pluriennali</strong>: se hai un abbonamento pluriennale, aspetta la scadenza naturale e poi migra.</li></ul>



<h2 class="wp-block-heading">Domande frequenti</h2>



<h3 class="wp-block-heading">Come faccio a sapere se un plugin è sicuro?</h3>



<p class="wp-block-paragraph">Controlla il database <a href="https://wpvulndb.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WPVulnDB</a> per vulnerabilità note, verifica la data dell&#x27;ultimo aggiornamento nel repository WordPress, leggi le recensioni recenti, e controlla il numero di installazioni attive. Un plugin con meno di 1.000 installazioni attive e nessun aggiornamento da oltre 12 mesi è un rischio concreto.</p>



<h3 class="wp-block-heading">Quanti plugin posso installare su un sito WordPress?</h3>



<p class="wp-block-paragraph">Non c&#x27;è un limite rigido. Il problema non è il numero, è la qualità. Un sito con 30 plugin leggeri, ben mantenuti, e non sovrapponibili gira più veloce di un sito con 10 plugin pesanti e abbandonati. La regola operativa che consiglio è: massimo 20-25 plugin attivi, tutti aggiornati negli ultimi 6 mesi, ognuno con una funzione chiara e non sovrapposta ad altri.</p>



<h3 class="wp-block-heading">WordPress 7.0 ha reso obsoleti i plugin di cache?</h3>



<p class="wp-block-paragraph">In molti casi, sì. WordPress 7.0 ha un sistema di cache integrato più efficiente, e gli hosting gestiti moderni hanno cache a livello di server (OPCache, Redis, Varnish). Per la maggior parte dei siti, un plugin di cache aggiuntivo è ridondante. Solo su hosting condivisi di fascia bassa o su VPS senza cache server ha ancora senso.</p>



<h3 class="wp-block-heading">I page builder sono morti nel 2026?</h3>



<p class="wp-block-paragraph">I page builder monolitici che sostituiscono l&#x27;editor di WordPress sì, sono morti. I page builder come Kadence Blocks, Generate Blocks, Spectra, o Cwicly no: sono estensioni dell&#x27;editor a blocchi, vivono dentro l&#x27;editor nativo, e producono contenuti portabili. Questa è la differenza fondamentale: lock-in vs. interoperabilità.</p>



<h3 class="wp-block-heading">Cosa uso al posto di Yoast SEO nel 2026?</h3>



<p class="wp-block-paragraph">Rank Math è la scelta razionale per la maggior parte dei siti: gratuito, leggero, supporta schema markup avanzati, integrazione con Google Search Console, e modulo WooCommerce dedicato. Per siti minimalisti, The SEO Framework è ancora più leggero. Yoast resta valido solo se si usano attivamente le funzioni premium (internal linking suggestions, multiple focus keywords).</p>



<h3 class="wp-block-heading">È sicuro usare plugin non aggiornati da anni?</h3>



<p class="wp-block-paragraph">No, in nessun caso. Un plugin non aggiornato è una falla di sicurezza aperta. Se l&#x27;autore ha abbandonato il plugin, rimuovilo. Se la funzione è critica, cerca un fork attivo o un&#x27;alternativa moderna. I siti compromessi nel 2026 sono in stragrande maggioranza su plugin obsoleti, temi piratati, o installazioni non aggiornate.</p>



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



<p class="wp-block-paragraph">Per approfondire i temi toccati in questa guida, ecco le fonti primarie consultate e raccomandate.</p>



<ul class="wp-block-list"><li><a href="https://wordpress.org/plugins/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Plugin Directory</a> - repository ufficiale plugin.</li><li><a href="https://wpvulndb.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WPVulnDB</a> - database vulnerabilità WordPress.</li><li><a href="https://querymonitor.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Query Monitor</a> - profiling performance plugin.</li><li><a href="https://wptavern.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP Tavern</a> - notizie e analisi WordPress.</li><li><a href="https://rankmath.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Rank Math</a> - SEO plugin consigliato 2026.</li><li><a href="https://www.kadencewp.com/kadence-blocks/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kadence Blocks</a> - estensione block editor.</li><li><a href="https://generateblocks.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">GenerateBlocks</a> - block builder leggero.</li><li><a href="https://plausible.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Plausible Analytics</a> - analytics privacy-first.</li><li><a href="https://usefathom.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Fathom Analytics</a> - analytics senza cookie.</li><li><a href="https://wordpress.org/playground/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Playground</a> - sandbox test plugin.</li><li><a href="https://localwp.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Local by Flywheel</a> - ambiente sviluppo locale.</li><li><a href="https://www.mrtux.it/5-wordpress-plugins-indispensabili-per-sicurezza-seo-e-performance" data-wpel-link="internal" target="_self" rel="noopener">Guida plugin indispensabili mrtux.it</a> - 5 plugin mantenuti e testati.</li><li><a href="https://www.mrtux.it/workflow-perfetto-tool-sviluppo-web" data-wpel-link="internal" target="_self" rel="noopener">Workflow perfetto sviluppo web mrtux.it</a> - framework 7 stadi.</li></ul>



<p class="wp-block-paragraph">Questa guida verrà aggiornata ogni sei mesi, in coincidenza con i rilasci principali di WordPress e del suo ecosistema. Per suggerimenti o correzioni, l&#x27;area commenti è aperta.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/plugin-wordpress-da-evitare-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
