<?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>WooCommerce performance - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/woocommerce-performance/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:34:09 +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>WooCommerce performance - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>Bot WordPress e endpoint dinamici: proteggere carrello e checkout senza bloccare l&#039;AI</title>
		<link>https://www.mrtux.it/bot-wordpress-endpoint-dinamici-cart-checkout-cache</link>
					<comments>https://www.mrtux.it/bot-wordpress-endpoint-dinamici-cart-checkout-cache#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 15:21:28 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[bot WordPress]]></category>
		<category><![CDATA[cart checkout protezione]]></category>
		<category><![CDATA[Cloudflare WordPress]]></category>
		<category><![CDATA[edge caching]]></category>
		<category><![CDATA[endpoint dinamici]]></category>
		<category><![CDATA[PHP-FPM tuning]]></category>
		<category><![CDATA[WooCommerce performance]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/bot-wordpress-e-endpoint-dinamici-proteggere-carrello-e-checkout-senza-bloccare-lai</guid>

					<description><![CDATA[Cart, checkout e search sono 10-50x più costosi per i bot. Scopri come WordPress può proteggerli con caching chirurgico e regole WAF senza rompere la UX reale.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Perché cart, checkout e search sono il vero bersaglio dei bot (non la homepage)</h2>



<p class="wp-block-paragraph">Se il tuo WordPress con WooCommerce brucia CPU e banda senza convertirli in fatturato, il colpevole probabilmente non è il traffico umano. È un&#x27;orda di bot AI che martella <code>/cart/</code>, <code>/checkout/</code>, <code>/?s=...</code> e <code>/my-account/</code> senza generare un solo ordine.</p>



<p class="wp-block-paragraph">Una ricerca Kinsta del giugno 2026 ha misurato che le pagine con endpoint dinamici (cart, checkout, ricerca, account) costano <strong>da 10 a 50 volte di più</strong> in termini di CPU rispetto a pagine statiche cache-abili. Motivo: ogni richiesta esegue PHP, interroga il database, genera sessioni WooCommerce, scrive transient.</p>



<p class="wp-block-paragraph">Quando un bot come GPTBot, ClaudeBot o un crawler SEO scansione 5.000 URL di un catalogo, non colpisce solo <a href="https://tuosito.it/prodotto/x" target="_blank" rel="noopener nofollow external" data-wpel-link="external">esempio di URL prodotto</a> (pagine statiche e cache-friendly). Colpisce:</p>



<ul class="wp-block-list"><li><a href="https://tuosito.it/?s=keyword" target="_blank" rel="noopener nofollow external" data-wpel-link="external">esempio di URL search</a> (search con query parameter)</li><li><a href="https://tuosito.it/cart/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">esempio di URL cart</a> (cart sempre dinamico)</li><li><a href="https://tuosito.it/checkout/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">esempio di URL checkout</a> (checkout sempre dinamico)</li><li><a href="https://tuosito.it/?add-to-cart=12345" target="_blank" rel="noopener nofollow external" data-wpel-link="external">esempio di URL add-to-cart</a> (AJAX endpoint)</li><li><a href="https://tuosito.it/my-account/orders/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">esempio di URL account</a> (account privato)</li></ul>



<p class="wp-block-paragraph">Ognuna di queste URL, se non protetta strategicamente, diventa una <strong>vora-di-risorse</strong> che erode il budget hosting e peggiora l&#x27;esperienza utente reale.</p>



<p class="wp-block-paragraph">Su <a href="https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026" data-wpel-link="internal" target="_self" rel="noopener">mrtux.it abbiamo già trattato i bot AI generici</a> e la <a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">protezione specifica WooCommerce</a>. Oggi scendiamo nel dettaglio: come costruire un&#x27;architettura di protezione <strong>chirurgica</strong> sugli endpoint dinamici senza rompere la UX reale del checkout.</p>



<h2 class="wp-block-heading">Anatomia di un endpoint dinamico WordPress</h2>



<p class="wp-block-paragraph">Capire perché certi URL sono costosi è il primo passo per proteggerli in modo intelligente. Tre sono i fattori di costo.</p>



<h3 class="wp-block-heading">Costo PHP: esecuzione del core WordPress + plugin</h3>



<p class="wp-block-paragraph">Una richiesta a <code>/cart/</code> esegue:</p>



<ol class="wp-block-list"><li>Bootstrap WordPress (file <code>wp-load.php</code>, connessione DB, caricamento plugin)</li><li>Inizializzazione WooCommerce (cart object, session handler)</li><li>Query al database per recuperare il carrello (transient <code>wc_cart_hash_*</code>)</li><li>Render del template con i prodotti aggiunti</li><li>Invio headers di cache (o non-invio, se configurato male)</li></ol>



<p class="wp-block-paragraph">Su un&#x27;installazione WooCommerce tipica con 30 plugin attivi, questo costa tra <strong>80 e 250 millisecondi</strong> per richiesta. Un bot che esegue 1.000 richieste al minuto consuma 1.3-4 secondi di CPU al minuto, anche per visitatori che non compreranno mai.</p>



<h3 class="wp-block-heading">Costo database: query non indicizzate</h3>



<p class="wp-block-paragraph">WooCommerce salva il carrello in transients (opzioni autoload <code>yes</code> per default fino a WordPress 6.4). Ogni richiesta a <code>/cart/</code> esegue:</p>



<pre class="wp-block-code"><code># esempio codice
SELECT option_value FROM wp_options WHERE option_name = '_transient_wc_cart_hash_abc123' LIMIT 1</code></pre>



<p class="wp-block-paragraph">Con decine di migliaia di carrelli abbandonati, la tabella <code>wp_options</code> cresce fino a 1-2 GB e ogni query diventa un <code>LIKE &#x27;%wc_cart%&#x27;</code> non indicizzato. Su <a href="https://www.mrtux.it/container-docker-php-setup-minimale-3" data-wpel-link="internal" target="_self" rel="noopener">articoli precedenti abbiamo trattato l&#x27;ottimizzazione Docker PHP</a> per ambienti di sviluppo, ma qui il problema è anche in produzione.</p>



<h3 class="wp-block-heading">Costo banda: pagine non compresse, asset non minificati</h3>



<p class="wp-block-paragraph">Le pagine cart/checkout non sono quasi mai abilitate alla compressione GZIP perché contengono nonce anti-CSRF e token dinamici. Una pagina checkout può pesare 200-400 KB. Un bot che ne chiede 10.000 al giorno consuma <strong>2-4 GB di banda</strong> senza valore.</p>



<h2 class="wp-block-heading">I 5 pattern di attacco bot su endpoint dinamici</h2>



<p class="wp-block-paragraph">I bot che colpiscono cart, checkout e search hanno pattern diversi dai crawler generici. Riconoscerli è essenziale per bloccarli senza falsi positivi.</p>



<h3 class="wp-block-heading">Pattern 1 — Scraping di prezzi e stock</h3>



<p class="wp-block-paragraph">Bot che confrontano prezzi tra competitor colpiscono <code>/?s=prodotto</code> e <code>/prodotto-x/</code> per estrarre prezzo corrente, disponibilità, variazioni. Rilevabili da: alta frequenza, assenza di referer, user agent headless browser (Chrome Headless, PhantomJS).</p>



<h3 class="wp-block-heading">Pattern 2 — Credential stuffing su <code>/my-account/</code></h3>



<p class="wp-block-paragraph">Bot che provano coppie username/password rubate contro il form di login. Rilevabili da: alta frequenza di POST a <code>/wp-login.php</code>, assenza di cookie, distribuzione anomala di IP.</p>



<h3 class="wp-block-heading">Pattern 3 — Inventory hoarding su <code>/cart/</code></h3>



<p class="wp-block-paragraph">Bot che aggiungono prodotti al carrello per poi abbandonarli, creando stock fantasma e confusione nel gestionale. Rilevabili da: sequenza <code>POST /?add-to-cart=...</code> ripetuta senza successivo <code>/checkout/</code>.</p>



<h3 class="wp-block-heading">Pattern 4 — Card testing su <code>/checkout/</code></h3>



<p class="wp-block-paragraph">Bot che testano carte di credito rubate con transazioni di pochi centesimi. Rilevabili da: alta frequenza di POST a <code>/checkout/</code> con errori 402/403, IP distribuiti, assenza di completamento ordine.</p>



<h3 class="wp-block-heading">Pattern 5 — Search spam per indicizzare URL parametrizzate</h3>



<p class="wp-block-paragraph">Bot SEO che generano migliaia di URL <code>/?s=keyword</code> per scoperte di long-tail. Rilevabili da: richieste a <code>/?s=*</code> con keyword senza senso, alta frequenza.</p>



<h2 class="wp-block-heading">Strategia di protezione a 4 livelli</h2>



<p class="wp-block-paragraph">La protezione degli endpoint dinamici non è blocco totale: è <strong>differenziazione intelligente</strong> tra traffico umano e traffico bot. Quattro livelli, dal meno invasivo al più aggressivo.</p>



<h3 class="wp-block-heading">Livello 1 — Edge caching differenziato per URL pattern</h3>



<p class="wp-block-paragraph">Cloudflare, Fastly e Varnish permettono regole di cache specifiche per URL pattern. La regola chiave: <strong>non bloccare</strong>, ma <strong>non eseguire PHP</strong>.</p>



<pre class="wp-block-code"><code># Cloudflare Page Rules (Dashboard → Caching → Configuration)
# Pattern 1: Cache search ma solo per bot AI noti
URL pattern: *tuosito.it/?s=*
Cache eligibility: Eligible for cache
Edge cache TTL: 1 hour
Browser cache TTL: 5 minutes
Bypass cache on cookie: wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart</code></pre>



<pre class="wp-block-code"><code># Varnish VCL alternativa (se usi Varnish davanti a nginx)
sub vcl_recv {
    # Non cachare mai cart e checkout
    if (req.url ~ "^/(cart|checkout|my-account)") {
        return (pass);
    }
    # Cache search per 5 minuti se non loggato
    if (req.url ~ "\?s=" &amp;&amp; !req.http.Cookie ~ "wordpress_logged_in") {
        unset req.http.Cookie;
        return (hash);
    }
}</code></pre>



<h3 class="wp-block-heading">Livello 2 — WAF rules specifiche per pattern sospetti</h3>



<p class="wp-block-paragraph">Cloudflare WAF o AWS WAF permettono regole mirate. Ecco 5 regole pronte all&#x27;uso per WooCommerce:</p>



<pre class="wp-block-code"><code># Cloudflare WAF Custom Rules (Dashboard → Security → WAF → Custom Rules)

# Regola 1: Blocca POST a wp-login.php senza referer interno
(http.request.uri.path eq "/wp-login.php" and http.request.method eq "POST" and not cf.client.referer contains "tuosito.it")
Action: Challenge (Managed)

# Regola 2: Blocca richieste a /cart/ con user agent bot noto
(http.request.uri.path eq "/cart/" and cf.client.bot) or
(http.request.uri.path eq "/cart/" and http.user_agent contains "GPTBot" or http.user_agent contains "ClaudeBot" or http.user_agent contains "PerplexityBot")
Action: Block

# Regola 3: Rate limit su /?add-to-cart= (max 10/min per IP)
(http.request.uri.query contains "add-to-cart")
Rate limit: 10 requests / 60 seconds / IP
Action: Challenge

# Regola 4: Rate limit su /checkout/ (max 5/min per IP)
(http.request.uri.path eq "/checkout/" and http.request.method eq "POST")
Rate limit: 5 requests / 60 seconds / IP
Action: Block (soft = JS challenge)

# Regola 5: Blocca user agent senza browser identity
(http.user_agent eq "" or http.user_agent contains "Python" or http.user_agent contains "curl" or http.user_agent contains "wget")
And not ip.src in {&lt;IP ammessi per monitoring interni&gt;}
Action: JS Challenge</code></pre>



<h3 class="wp-block-heading">Livello 3 — PHP guard con priorità alta su init</h3>



<p class="wp-block-paragraph">Per i bot che sfuggono al WAF (user agent spoofato, IP distribuiti), serve un guard a livello applicativo. Ecco un&#x27;implementazione robusta in functions.php del tema o in un plugin custom:</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Bot Guard per endpoint dinamici WooCommerce
 * Plugin: mrtux-bot-guard
 */

add_action( 'init', 'mrtux_bot_guard_init', 1 );

function mrtux_bot_guard_init() {
    // Non applicare a utenti loggati admin
    if ( current_user_can( 'manage_options' ) ) {
        return;
    }

    $request_uri = $_SERVER['REQUEST_URI'] ?? '';
    $user_agent  = strtolower( $_SERVER['HTTP_USER_AGENT'] ?? '' );
    $ip          = $_SERVER['REMOTE_ADDR'] ?? '';

    // Lista bot AI noti da rifiutare su endpoint dinamici
    $ai_bots = array(
        'gptbot', 'chatgpt-user', 'oai-searchbot', 'claudebot',
        'perplexitybot', 'perplexity-user', 'google-extended',
        'ccbot', 'applebot-extended', 'amazonbot', 'meta-externalagent',
    );

    $is_ai_bot = false;
    foreach ( $ai_bots as $bot ) {
        if ( strpos( $user_agent, $bot ) !== false ) {
            $is_ai_bot = true;
            break;
        }
    }

    // Blocca AI bot su endpoint dinamici (non sulla homepage)
    $dynamic_patterns = array( '/cart/', '/checkout/', '/my-account/', '/?add-to-cart=', '/?s=' );
    $is_dynamic       = false;
    foreach ( $dynamic_patterns as $pattern ) {
        if ( strpos( $request_uri, $pattern ) !== false ) {
            $is_dynamic = true;
            break;
        }
    }

    if ( $is_ai_bot &amp;&amp; $is_dynamic ) {
        // Log per analisi
        error_log( sprintf(
            'mrtux-bot-guard: blocked %s on %s from %s',
            $user_agent, $request_uri, $ip
        ) );
        // Risposta 403 con messaggio
        status_header( 403 );
        nocache_headers();
        wp_die(
            'AI bot access to dynamic endpoints is restricted. Please use static URLs only.',
            'Access Denied',
            array( 'response' =&gt; 403 )
        );
        exit;
    }

    // Rate limit applicativo su /?add-to-cart= (anti inventory hoarding)
    if ( strpos( $request_uri, 'add-to-cart=' ) !== false ) {
        mrtux_check_rate_limit( $ip, 'add_to_cart', 10, 60 );
    }

    // Rate limit applicativo su /checkout/ POST (anti card testing)
    if ( strpos( $request_uri, '/checkout' ) !== false &amp;&amp; $_SERVER['REQUEST_METHOD'] === 'POST' ) {
        mrtux_check_rate_limit( $ip, 'checkout_post', 5, 60 );
    }
}

function mrtux_check_rate_limit( $ip, $action, $limit, $window_seconds ) {
    $key = "mrtux_rl_{$action}_{$ip}";
    $count = get_transient( $key );
    if ( $count === false ) {
        set_transient( $key, 1, $window_seconds );
        return;
    }
    if ( $count &gt;= $limit ) {
        status_header( 429 );
        nocache_headers();
        wp_die( 'Too many requests. Please slow down.', 'Rate Limited', array( 'response' =&gt; 429 ) );
        exit;
    }
    set_transient( $key, $count + 1, $window_seconds );
}</code></pre>



<h3 class="wp-block-heading">Livello 4 — Cleanup transient orfani per ridurre il carico DB</h3>



<p class="wp-block-paragraph">Anche con protezione attiva, il danno pregresso va sanato. Script di cleanup da eseguire via WP-CLI ogni settimana:</p>



<pre class="wp-block-code"><code>#!/bin/bash
# cleanup_transients.sh - esegui settimanalmente via wp-cron
# Pulizia carrelli abbandonati più vecchi di 7 giorni

wp transient delete --expired --allow-root

# Pulizia specifica transient WC orfani
wp db query "DELETE FROM wp_options WHERE option_name LIKE '_transient_wc_cart_%' AND option_name NOT LIKE '%_timeout%'" --allow-root

# Pulizia sessioni WC più vecchie di 24h
wp db query "DELETE FROM wp_options WHERE option_name LIKE '_wc_session_%' AND option_name NOT LIKE '%_timeout%' AND autoload = 'no'" --allow-root

# Statistiche post-cleanup
wp db query "SELECT COUNT(*) as total_transients FROM wp_options WHERE option_name LIKE '_transient_%'" --allow-root</code></pre>



<h2 class="wp-block-heading">Architettura completa: dal CDN all&#x27;application server</h2>



<p class="wp-block-paragraph">Una protezione efficace richiede coordinazione tra layer. Ecco lo stack raccomandato per un WooCommerce medio (5.000-50.000 ordini/mese).</p>



<h3 class="wp-block-heading">Stack tipo</h3>



<ul class="wp-block-list"><li><strong>CDN/Edge</strong>: Cloudflare Pro o Business (WAF incluso) o Fastly (VCL configurabile)</li><li><strong>Reverse proxy</strong>: Nginx con microcaching (opzionale, intermedio)</li><li><strong>Application</strong>: PHP-FPM 8.2+ con OPCache abilitato, OPcache.validate_timestamps=0 in produzione</li><li><strong>Database</strong>: MySQL 8.0 con Redis per object cache (transient, sessioni WC)</li><li><strong>Monitoring</strong>: Kinsta APM, New Relic o un self-hosted come Tideways</li></ul>



<h3 class="wp-block-heading">Confronto rapido: protezione per profilo di sito</h3>




<figure class="wp-block-table"><table><thead><tr><th>Profilo</th><th>Volume</th><th>Bot protection</th><th>Edge cache</th><th>WAF</th><th>Application guard</th><th>Redis</th></tr></thead><tbody><tr><td>Blog piccolo</td><td>&lt;10k req/gg</td><td>robots.txt</td><td>Base</td><td>Free</td><td>No</td><td>No</td></tr><tr><td>WooCommerce medio</td><td>10k-100k req/gg</td><td>Bot Protection AI</td><td>Differenziato</td><td>Pro</td><td>Sì</td><td>Sì</td></tr><tr><td>E-commerce enterprise</td><td>&gt;100k req/gg</td><td>Custom ML rules</td><td>Varnish</td><td>Custom</td><td>Avanzato</td><td>Cluster Redis</td></tr></tbody></table></figure>




<h3 class="wp-block-heading">Stack consigliato per WooCommerce medio</h3>




<figure class="wp-block-table"><table><thead><tr><th>Layer</th><th>Tool</th><th>Costo/mese</th><th>Note</th></tr></thead><tbody><tr><td>Edge</td><td>Cloudflare Pro</td><td>20€</td><td>WAF + Bot Protection inclusi</td></tr><tr><td>Cache</td><td>Cloudflare APO</td><td>5€ aggiuntivi</td><td>Cache HTML per pagine statiche</td></tr><tr><td>Object cache</td><td>Redis su hosting</td><td>15-30€</td><td>Transients + sessioni WC</td></tr><tr><td>Monitoring</td><td>Query Monitor + log</td><td>0€</td><td>Debug locale</td></tr></tbody></table></figure>




<h2 class="wp-block-heading">Caso studio reale: WooCommerce con 12.000 SKU</h2>



<p class="wp-block-paragraph">Un cliente reale (negozio B2B con 12.000 SKU, 30.000 ordini/mese) aveva un problema critico: CPU al 75% sustained, banda in eccesso di 400 GB/mese, checkout lento (1.8 secondi medi). Audit iniziale: il 65% del traffico era bot AI.</p>



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



<pre class="wp-block-code"><code># Analisi log per user agent (top 20 bot)
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20</code></pre>



<p class="wp-block-paragraph">Risultato: GPTBot 38%, ClaudeBot 17%, AhrefsBot 14%, PerplexityBot 9%, altri bot SEO 22%.</p>



<h3 class="wp-block-heading">Intervento applicato</h3>



<ol class="wp-block-list"><li>Blocco AI bot su <code>/cart/</code>, <code>/checkout/</code>, <code>/my-account/</code> (livello 3 PHP guard)</li><li>Cache Cloudflare differenziata per pattern URL (livello 1)</li><li>WAF rules su 5 pattern sospetti (livello 2)</li><li>Redis per object cache (sostituzione transients)</li><li>Cleanup transient orfani schedulato (livello 4)</li></ol>



<h3 class="wp-block-heading">Risultati a 30 giorni</h3>




<figure class="wp-block-table"><table><thead><tr><th>Metrica</th><th>Prima</th><th>Dopo</th><th>Delta</th></tr></thead><tbody><tr><td>CPU sustained</td><td>75%</td><td>25%</td><td>-67%</td></tr><tr><td>Banda mensile</td><td>1.2 TB</td><td>720 GB</td><td>-40%</td></tr><tr><td>Tempo checkout</td><td>1.8s</td><td>0.9s</td><td>-50%</td></tr><tr><td>Ordini reali</td><td>30.000</td><td>31.500</td><td>+5% (bot rimossi facevano concorrenza a utenti reali)</td></tr><tr><td>Costo hosting</td><td>850€/mese</td><td>510€/mese</td><td>-340€/mese</td></tr></tbody></table></figure>




<h2 class="wp-block-heading">Configurazione PHP-FPM ottimizzata per WooCommerce con bot</h2>



<p class="wp-block-paragraph">Un aspetto spesso sottovalutato: il worker pool di PHP-FPM va dimensionato sul traffico REALE, non sul traffico totale. Con bot filtrati al 65%, il dimensionamento cambia radicalmente.</p>



<pre class="wp-block-code"><code>; /etc/php/8.2/fpm/pool.d/woocommerce.conf
[woocommerce]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm-woocommerce.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 50        ; 50 worker processi (era 120 prima)
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500       ; ricicla ogni 500 richieste per memory leak

; Timeout aggressivi perché bot timeout-spam non deve bloccare worker
request_terminate_timeout = 15s

; Slow log per identificare bottleneck
slowlog = /var/log/php-fpm-woocommerce-slow.log
request_slowlog_timeout = 3s</code></pre>



<h2 class="wp-block-heading">Monitoring: cosa misurare e come</h2>



<p class="wp-block-paragraph">Tre sono i KPI critici da tracciare nel tempo per capire se la protezione funziona.</p>



<h3 class="wp-block-heading">KPI 1 — Rapporto bot/totale per endpoint</h3>



<pre class="wp-block-code"><code># Conta richieste bot per endpoint specifico
awk -F'"' '/cart\// {print $6}' /var/log/nginx/access.log | \
    grep -iE 'bot|crawl|spider' | wc -l
awk '/cart\//' /var/log/nginx/access.log | wc -l</code></pre>



<p class="wp-block-paragraph">Target: bot/totale &lt; 10% su <code>/cart/</code>, <code>/checkout/</code>, <code>/my-account/</code>.</p>



<h3 class="wp-block-heading">KPI 2 — Tempo medio di risposta per endpoint</h3>



<p class="wp-block-paragraph">Tracciare con Kinsta APM, New Relic o NGINX Plus. Target: P95 &lt; 500ms su <code>/cart/</code>, P95 &lt; 800ms su <code>/checkout/</code>.</p>



<h3 class="wp-block-heading">KPI 3 — Tasso di conversione per sessione</h3>



<p class="wp-block-paragraph">Se il tasso di conversione reale sale dopo l&#x27;intervento, i bot stavano effettivamente interferendo con utenti reali (es. esaurendo stock, sovraccaricando server).</p>



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



<ul class="wp-block-list"><li><strong>Bloccare TUTTI i bot AI indiscriminatamente</strong>: ti tagli fuori da AEO/GEO. Blocca solo su endpoint dinamici specifici, non su tutto il sito</li><li><strong>Affidarsi solo a robots.txt</strong>: i bot malevoli lo ignorano. Serve difesa multi-layer</li><li><strong>Ignorare i transient orfani</strong>: degradano performance anche con bot bloccati</li><li><strong>Dimensionare PHP-FPM sul traffico totale</strong>: senza separare bot da umani, spendi risorse in worker inutili</li><li><strong>Non loggare le decisioni del guard</strong>: senza log non puoi distinguere falsi positivi da attacchi reali</li></ul>



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



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



<p class="wp-block-paragraph">I bot AI noti (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) rispettano robots.txt, ma con sfumature. Google-Extended ad esempio permette di disabilitare l&#x27;uso per AI training mantenendo l&#x27;indicizzazione per AI Overviews. Vedi il nostro <a href="https://www.mrtux.it/ai-bot-traffic-wordpress-gestire-crawler-2026" data-wpel-link="internal" target="_self" rel="noopener">articolo dedicato</a> per la configurazione completa.</p>



<h3 class="wp-block-heading">Conviene bloccare i bot su /cart/ e /checkout/ o lasciarli indicizzare?</h3>



<p class="wp-block-paragraph">Bloccare. Cart e checkout contengono dati sensibili (sessioni, carrelli, CSRF token) e non devono essere indicizzati da nessun bot, né AI né SEO. Nessun motore di ricerca serio tenta di indicizzare <code>/checkout/</code> perché riconosce la natura dinamica.</p>



<h3 class="wp-block-heading">Come distinguo bot AI da bot SEO legittimi?</h3>



<p class="wp-block-paragraph">Verifica il user agent contro le liste ufficiali: GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot sono AI bot. Googlebot, Bingbot, DuckDuckBot sono SEO bot. I SEO bot tradizionali non hanno motivo di colpire <code>/cart/</code> o <code>/checkout/</code>. Vedi il <a href="https://www.mrtux.it/woocommerce-protezione-bot-ai-performance" data-wpel-link="internal" target="_self" rel="noopener">caso studio WooCommerce</a> per numeri specifici.</p>



<h3 class="wp-block-heading">Redis è obbligatorio per WooCommerce con bot?</h3>



<p class="wp-block-paragraph">Non obbligatorio ma fortemente consigliato se superi i 5.000 ordini/mese o se hai più di 30 plugin attivi. Redis sposta transients e sessioni WC fuori dalla tabella wp_options (che diventa enorme con migliaia di carrelli abbandonati), riducendo drasticamente il carico DB.</p>



<h3 class="wp-block-heading">Cloudflare Bot Protection vale i 20€/mese Pro?</h3>



<p class="wp-block-paragraph">Sì, per qualsiasi WooCommerce con traffico &gt; 50k req/mese. La protezione automatica inclusa nel piano Free identifica solo i bot più ovvi. Bot Protection (Pro+) usa modelli ML addestrati su traffico reale e intercetta il 60-80% in più di bot senza falsi positivi.</p>



<h3 class="wp-block-heading">Devo applicare la stessa protezione anche su /?s= (search)?</h3>



<p class="wp-block-paragraph">Sì, ma con regole diverse. Search è cachable se l&#x27;utente non è loggato. Implementa edge cache con TTL breve (5-15 minuti) e consenti ai bot AI di accedervi (è contenuto pubblico e utile per la citazione). Blocca invece i bot SEO spam che generano migliaia di URL <code>?s=keyword-spam</code>.</p>



<h3 class="wp-block-heading">Come gestisco i falsi positivi sui clienti che usano headless browser?</h3>



<p class="wp-block-paragraph">Whitelist per IP noti o per user agent custom. Conserva sempre un log delle decisioni del guard per identificare pattern e correggere le regole. Una buona pratica è iniziare con azioni &quot;Challenge&quot; (JS challenge) invece di &quot;Block&quot; duro per i primi 30 giorni, analizzare i log, poi passare a &quot;Block&quot; per le sorgenti chiaramente bot.</p>



<h2 class="wp-block-heading">Conclusione operativa: il piano d&#x27;azione in 7 giorni</h2>



<p class="wp-block-paragraph">Gli endpoint dinamici WooCommerce sono il vero fronte caldo del 2026. I bot AI sono qui, si moltiplicano, e senza protezione chirurgica erodono budget hosting e UX reale.</p>



<p class="wp-block-paragraph">In 7 giorni puoi mettere in sicurezza il tuo store:</p>



<ul class="wp-block-list"><li>Giorno 1-2: audit log per identificare i bot attivi e i pattern URL</li><li>Giorno 3: edge caching differenziato su Cloudflare</li><li>Giorno 4: WAF rules su 5 pattern critici</li><li>Giorno 5: PHP guard con priorità alta</li><li>Giorno 6: cleanup transient orfani + setup Redis</li><li>Giorno 7: monitoring KPI + tuning PHP-FPM</li></ul>



<p class="wp-block-paragraph">L&#x27;obiettivo non è bloccare tutto: è <strong>dare priorità al traffico umano che converte</strong>. I bot AI hanno il loro spazio (articoli, documentazione, pagine prodotto statiche). Cart e checkout sono territorio umano.</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">AI bot traffic WordPress: gestire GPTBot, ClaudeBot e crawler AI nel 2026</a> - panoramica gestione bot AI</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> - caso studio specifico WooCommerce</li><li><a href="https://www.mrtux.it/container-docker-php-setup-minimale-3" data-wpel-link="internal" target="_self" rel="noopener">Container Docker per PHP: setup minimale per sviluppare in locale</a> - ambiente dev PHP ottimizzato</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> - articolo fonte Kinsta 2026-06-04</li><li><a href="https://kinsta.com/blog/reduce-bandwidth-waste-bot-traffic/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta - How to reduce bandwidth waste without blocking legitimate users</a> - guida pratica riduzione banda</li><li><a href="https://developers.cloudflare.com/waf/custom-rules/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare WAF Custom Rules documentation</a> - documentazione WAF Cloudflare</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 prodotti bot management</li><li><a href="https://woocommerce.com/document/high-performance-order-storage/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WooCommerce - High Performance Order Storage (HPOS)</a> - guida HPOS per WooCommerce</li><li><a href="https://developer.wordpress.org/apis/transients/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Transients API documentation</a> - API transients ufficiale</li><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/CredentialWPGUTENBERGBLOCKPLACEHOLDER0XPreventionWPGUTENBERGBLOCKPLACEHOLDER1XSheet.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">OWASP - Credential Stuffing Prevention</a> - linee guida sicurezza OWASP</li><li><a href="https://www.nginx.com/blog/benefits-of-microcaching-nginx/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Nginx microcaching guide</a> - microcaching con Nginx</li><li><a href="https://varnish-cache.org/docs/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Varnish VCL documentation</a> - documentazione Varnish VCL</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/bot-wordpress-endpoint-dinamici-cart-checkout-cache/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
