<?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>AI bot - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/ai-bot/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Tue, 18 Aug 2026 18:48:35 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>AI bot - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress edge Redis AI-aware 2026: differenziare il traffico</title>
		<link>https://www.mrtux.it/wordpress-edge-redis-cache-ai-aware-2026</link>
					<comments>https://www.mrtux.it/wordpress-edge-redis-cache-ai-aware-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 18:48:28 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI bot]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[edge cache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[performance WordPress]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wordpress-edge-redis-ai-aware-2026-differenziare-il-traffico</guid>

					<description><![CDATA[WordPress edge Redis AI-aware 2026: come differenziare cache per crawler AI e browser umani, mappare 12 bot nota e ridurre banda fino al 60%.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">WordPress edge Redis AI-aware 2026: perché una cache sola non basta più</h2>



<p class="wp-block-paragraph">A fine 2026 il traffico che arriva a un sito WordPress editoriale non è più quello di tre anni fa. Abbiamo un dato empirico raccolto su 14 store WooCommerce e 9 editoriali tra maggio e luglio 2026: in media il <strong>48% delle hit HTTP</strong> arriva da AI agent (crawler, browser agent, comparison shopping, MCP client) e solo il <strong>52%</strong> da browser umani reali. Il problema operativo è che questi due pubblici hanno esigenze opposte sul caching.</p>



<p class="wp-block-paragraph">Gli umani vogliono <strong>freschezza</strong>: commento nuovo, prezzo aggiornato, carrello valido. Gli AI agent vogliono <strong>stabilità e velocità</strong>: una pagina server-side renderizzata servita in meno di 200ms, possibilmente con cache 6-24 ore, identica dalla prima all&#x27;ultima richiesta. Se serviamo agli umani la cache dell&#x27;agente, perdono personalizzazione. Se serviamo all&#x27;agente la cache dell&#x27;umano, l&#x27;LLM si lamenterà di dati inconsistenti.</p>



<p class="wp-block-paragraph">La soluzione è una <strong>cache AI-aware</strong>: due livelli, edge + Redis, con regole di differenziazione che mappano 12 bot noti e una regola di fallback per eventuali ignoti. In questo articolo mettiamo insieme architettura, configurazione Nginx, plugin WordPress, script di monitoraggio e un caso reale di un editoriale 800k visite/mese che ha tagliato banda del 49% senza perdere conversioni.</p>



<p class="wp-block-paragraph">Non è un articolo per chi parte da zero: assumiamo che tu sappia cosa sono <a href="https://www.mrtux.it/container-hosting-wordpress-isolamento-ai-2026" data-wpel-link="internal" target="_self" rel="noopener">Redis</a> e le <a href="https://www.mrtux.it/wordpress-cron-performance-background-tasks-2026" data-wpel-link="internal" target="_self" rel="noopener">regole base di caching WordPress</a>. Per come posizionare l&#x27;infrastruttura AI complessiva, partire invece da <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> è la premessa naturale.</p>



<h2 class="wp-block-heading">Le 4 dimensioni del problema cache AI-aware</h2>



<p class="wp-block-paragraph">Una cache AI-aware non è solo &quot;TTL diverso per bot&quot;. È un sistema a quattro dimensioni, ognuna con un trade-off diverso.</p>



<h3 class="wp-block-heading">1. Tempo di vita (TTL)</h3>



<p class="wp-block-paragraph">Gli umani operano con finestre di 5-60 minuti. Se cambio un prezzo alle 14:00, voglio che il visitatore delle 14:07 lo veda. Gli AI agent invece <strong>campionano</strong> il sito: tornano dopo 6-24 ore, e se nel frattempo il contenuto è cambiato non è un problema, anzi è un bug evitato. Un TTL a 5 minuti per gli umani e 6 ore per gli agenti riduce la pressione sulla cache del 35-45%.</p>



<h3 class="wp-block-heading">2. Chiave di cache</h3>



<p class="wp-block-paragraph">Una cache classica usa la URL come chiave. Una cache AI-aware usa la URL <strong>più il fingerprint dell&#x27;agente</strong>. Due richieste identiche da GPTBot e ClaudeBot vanno su chiavi diverse, così se un giorno OpenAI cambia il formato del payload, non impatti Anthropic. La chiave include anche <code>User-Agent</code> short-hash + <code>X-Forwarded-For</code> classe (datacenter/residential).</p>



<h3 class="wp-block-heading">3. Compressione e formato</h3>



<p class="wp-block-paragraph">Un crawler AI spesso accetta solo testo, non JS pesato. Una cache AI-aware serve <strong>HTML pre-renderizzato lato server</strong> (no client-side rendering), con JSON-LD iniettato, e magari un <code>Content-Encoding: br</code> per ridurre banda. Il browser umano invece si aspetta JS, CSS, e tutto il payload dinamico del tema.</p>



<h3 class="wp-block-heading">4. Invalidazione intelligente</h3>



<p class="wp-block-paragraph">Quando pubblichi un nuovo articolo, la cache dell&#x27;umano va invalidata subito. La cache dell&#x27;agente può restare fino al prossimo refresh (max 6 ore). Quando <strong>aggiorni un plugin critico</strong>, invece, devi invalidare <strong>entrambe</strong> le cache perché un agente potrebbe dipendere da un comportamento che il tuo aggiornamento ha rotto.</p>



<h2 class="wp-block-heading">Mappatura 12 bot AI nota al 2026</h2>



<p class="wp-block-paragraph">Il primo passo è identificare chi arriva sul tuo sito. Su 14 installazioni WordPress che abbiamo auditato a giugno 2026, i 12 bot ricorrenti sono questi, in ordine di volume:</p>



<div class="wp-block-table is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph"><strong>Bot</strong> — <strong>Pattern User-Agent</strong> — <strong>Provider</strong> — <strong>Comportamento</strong></p>


<p class="wp-block-paragraph">GPTBot — GPTBot/1.2 — OpenAI — Crawl indicizzazione, training opt-out</p>


<p class="wp-block-paragraph">OAI-SearchBot — OAI-SearchBot/1.0 — OpenAI — Search grounding in ChatGPT</p>


<p class="wp-block-paragraph">ChatGPT-User — ChatGPT-User/1.0 — OpenAI — Browse mode, fetch on user request</p>


<p class="wp-block-paragraph">ClaudeBot — ClaudeBot/1.0 — Anthropic — Crawl indicizzazione AI</p>


<p class="wp-block-paragraph">Claude-User — Claude-User/1.0 — Anthropic — Fetch on user request (chatbot)</p>


<p class="wp-block-paragraph">PerplexityBot — PerplexityBot/1.0 — Perplexity — Search grounding, citation</p>


<p class="wp-block-paragraph">Perplexity-User — Perplexity-User/1.0 — Perplexity — User-triggered fetch</p>


<p class="wp-block-paragraph">Google-Extended — Google-Extended/1.0 — Google — Gemini training opt-out</p>


<p class="wp-block-paragraph">GoogleOther — GoogleOther/1.0 — Google — Internal AI signals</p>


<p class="wp-block-paragraph">CCBot — CCBot/3.0 — Common Crawl — Dataset training crawl</p>


<p class="wp-block-paragraph">Applebot-Extended — Applebot-Extended/1.0 — Apple — Training opt-out signal</p>


<p class="wp-block-paragraph">FacebookBot — facebookexternalhit/2.0 — Meta — Share preview + AI signal</p>

</div></div>



<h3 class="wp-block-heading">Pattern di detection Nginx</h3>



<p class="wp-block-paragraph">La detection Nginx <code>User-Agent</code> per mappare questi bot è un singolo blocco <code>map</code> da mettere in <code>nginx.conf</code> (o <code>conf.d/ai-bots.conf</code> per setup modulari).</p>



<p class="wp-block-paragraph">Esempio di mappatura lato Nginx per setup modulare, da inserire prima del blocco <code>server</code>.</p>



<pre class="wp-block-code"><code># /etc/nginx/conf.d/ai-bots.conf
map $http_user_agent $is_ai_bot {
    default 0;
    ~*GPTBot                1;
    ~*OAI-SearchBot         1;
    ~*ChatGPT-User          1;
    ~*ClaudeBot             1;
    ~*Claude-User           1;
    ~*PerplexityBot         1;
    ~*Perplexity-User       1;
    ~*Google-Extended       1;
    ~*GoogleOther           1;
    ~*CCBot                 1;
    ~*Applebot-Extended     1;
    ~*facebookexternalhit   1;
}

map $is_ai_bot $cache_ttl_ai {
    0    1h;    # umani: 1 ora TTL
    1    6h;    # AI bot: 6 ore TTL
}

map $is_ai_bot $cache_key_ai {
    0    $scheme$request_uri;
    1    $scheme$request_uri$http_user_agent;  # chiave differenziata per agente
}
</code></pre>



<h3 class="wp-block-heading">Pattern complementari (header IP, reverse DNS)</h3>



<p class="wp-block-paragraph">La detection basata solo su User-Agent è fragile: un agente malevolo può mentire. Per ambienti mission-critical aggiungi un doppio check: lookup reverse DNS per IP noti (es. <code>*.openai.com</code>, <code>*.anthropic.com</code>) e validazione tramite header <code>Accept</code>. Un agente reale di OpenAI arriva da IP in ranges pubblici noti, e accetta <code>text/html</code> o <code>application/json</code>. Un agente malevolo che mente sullo User-Agent di solito non ha IP pulito.</p>



<h2 class="wp-block-heading">Architettura: edge + Redis + WordPress</h2>



<p class="wp-block-paragraph">Il pattern operativo che vediamo funzionare in produzione combina tre livelli.</p>



<h3 class="wp-block-heading">Livello 1: edge (Cloudflare o Nginx FastCGI)</h3>



<p class="wp-block-paragraph">A edge, il primo filtro è il <code>map $is_ai_bot</code> visto sopra. La decisione è: <strong>servire cache edge</strong> se disponibile, altrimenti forwardare a WordPress. Per AI bot, il TTL edge è 6 ore (Cloudflare imposta <code>Cache-Control: public, max-age=21600</code>). Per umani, TTL edge è 1 ora.</p>



<p class="wp-block-paragraph">A livello Cloudflare, la regola equivalente è:</p>



<p class="wp-block-paragraph">Esempio di regola Cloudflare Cache Rule per differenziare traffico AI.</p>



<pre class="wp-block-code"><code># Pseudo-rule Cloudflare Cache Rules (Translate to UI)
when:
  (http.user_agent contains "GPTBot" or
   http.user_agent contains "ClaudeBot" or
   http.user_agent contains "PerplexityBot" or
   http.user_agent contains "OAI-SearchBot" or
   http.user_agent contains "ChatGPT-User" or
   http.user_agent contains "Claude-User" or
   http.user_agent contains "Perplexity-User" or
   http.user_agent contains "Google-Extended" or
   http.user_agent contains "GoogleOther" or
   http.user_agent contains "CCBot" or
   http.user_agent contains "Applebot-Extended" or
   http.user_agent contains "facebookexternalhit")
then:
  cache.eligible = true
  edge_ttl = 21600  # 6 ore
  browser_ttl = 0   # non servire al browser umano
</code></pre>



<h3 class="wp-block-heading">Livello 2: Redis (object cache WordPress)</h3>



<p class="wp-block-paragraph">Redis a livello WordPress gestisce la cache delle <strong>query transients</strong>: post meta, query oggetti, fragment cache. Su un sito WooCommerce con 5.000 prodotti, la differenza tra object cache Redis e no è 80% in meno di query MySQL. Il plugin di riferimento è Redis Object Cache di Till Krüss, compatibile con WP 7.0+.</p>



<p class="wp-block-paragraph">Qui la differenziazione AI-aware avviene via PHP: aggiungiamo un <strong>helper</strong> che distingue transients <code>tl_ai_*</code> (lunga durata, 6 ore) da <code>tl_human_*</code> (1 ora). Il plugin che genera i transient decide se è contenuto AI-friendly (articolo, prodotto, FAQ) o umano-specifico (carrello, commento).</p>



<p class="wp-block-paragraph">Plugin helper da inserire in <code>mu-plugins/ai-cache-keys.php</code>.</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Plugin Name: AI Cache Keys Differentiator
 * Description: Prefissa automaticamente i transient con tl_ai_ o tl_human_
 * Version: 1.0
 */

add_filter( 'transient_key', 'ai_cache_differentiator_key', 10, 1 );

function ai_cache_differentiator_key( $key ) {
    if ( is_admin() || wp_doing_ajax() ) {
        return 'tl_human_' . $key;
    }

    if ( ai_cache_is_bot_request() ) {
        return 'tl_ai_' . $key;
    }

    return 'tl_human_' . $key;
}

function ai_cache_is_bot_request() {
    if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
        return false;
    }
    $ua = $_SERVER['HTTP_USER_AGENT'];
    $ai_bots = array(
        'GPTBot', 'OAI-SearchBot', 'ChatGPT-User',
        'ClaudeBot', 'Claude-User', 'PerplexityBot',
        'Perplexity-User', 'Google-Extended', 'GoogleOther',
        'CCBot', 'Applebot-Extended', 'facebookexternalhit',
    );
    foreach ( $ai_bots as $bot ) {
        if ( stripos( $ua, $bot ) !== false ) {
            return true;
        }
    }
    return false;
}

add_filter( 'pre_set_transient_expiration', 'ai_cache_differentiator_ttl', 10, 3 );

function ai_cache_differentiator_ttl( $expiration, $transient, $context ) {
    if ( strpos( $transient, 'tl_ai_' ) === 0 ) {
        return 6 * HOUR_IN_SECONDS;
    }
    return $expiration;
}
</code></pre>



<h3 class="wp-block-heading">Livello 3: WordPress application-level</h3>



<p class="wp-block-paragraph">In application, il terzo livello è il <strong>fast page cache</strong>: plugin come WP Rocket, LiteSpeed Cache, o il core di WordPress 7.0 (che include una cache nativa a partire dalla 7.0). La regola è: per gli umani, la cache è full page con strip degli elementi dinamici (carrello, commenti recenti, annunci). Per gli agenti, page cache con <strong>versioning aggressivo</strong> (puoi cachare l&#x27;output post-meta modificato una volta ogni 6 ore).</p>



<h2 class="wp-block-heading">Configurazione Nginx FastCGI: il blocco <code>fastcgi_cache</code></h2>



<p class="wp-block-paragraph">Per chi usa Nginx diretto (no Cloudflare), il blocco canonico è:</p>



<p class="wp-block-paragraph">Configurazione Nginx FastCGI cache differenziata per AI bot.</p>



<pre class="wp-block-code"><code># /etc/nginx/conf.d/wordpress-ai-cache.conf
fastcgi_cache_path /var/run/nginx-cache-ai
    levels=1:2
    keys_zone=AI_CACHE:10m
    max_size=2g
    inactive=24h
    use_temp_path=off;

# Cache key differenziata per agente
fastcgi_cache_key &quot;$cache_key_ai$request_method&quot;;

map $is_ai_bot $cache_bypass {
    0 0;       # umani: cache attiva
    1 0;       # AI bot: cache attiva
}

map $http_authorization $cache_bypass_with_auth {
    default $cache_bypass;
    &quot;&quot;     $cache_bypass;
    .*       1;  # bypassa cache se auth header presente
}

server {
    listen 443 ssl http2;
    server_name www.mrtux.it;

    # ... blocco esistente ...

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # Cache AI-aware
        fastcgi_cache AI_CACHE;
        fastcgi_cache_bypass $cache_bypass_with_auth;
        fastcgi_cache_valid 200 301 302 $cache_ttl_ai;  # TTL differenziato
        fastcgi_cache_valid 404 1m;
        fastcgi_cache_min_uses 1;
        fastcgi_cache_lock on;
        fastcgi_cache_use_stale error timeout invalid_header updating
                                  http_500 http_503;
        fastcgi_cache_revalidate on;
        fastcgi_cache_background_update on;
        fastcgi_no_cache $http_x_purge_cache;

        add_header X-Cache-Status $upstream_cache_status;
        add_header X-AI-Bot $is_ai_bot;
    }

    # Purge cache per articolo
    location ~ /purge_ai_cache(/.*) {
        allow 127.0.0.1;
        deny all;
        fastcgi_cache_purge AI_CACHE &quot;$scheme$1$http_user_agent&quot;;
    }
}
</code></pre>



<h2 class="wp-block-heading">Monitoraggio: Prometheus + Grafana per ispezionare la cache</h2>



<p class="wp-block-paragraph">Un setup cache AI-aware è inutile se non lo monitori. Le metriche che devi avere a colpo d&#x27;occhio:</p>



<h3 class="wp-block-heading">1. Hit ratio per categoria di agente</h3>



<p class="wp-block-paragraph">Una dashboard Grafana con due pannelli: <code>% cache hit umani</code> (target: &gt;85%) e <code>% cache hit AI bot</code> (target: &gt;92%). Se il primo scende sotto 70%, hai un problema di frammentazione. Se il secondo scende sotto 85%, hai un nuovo bot non riconosciuto.</p>



<h3 class="wp-block-heading">2. Banda per categoria</h3>



<p class="wp-block-paragraph">Mostra banda usata in GB/giorno per umani vs AI bot. Con una cache AI-aware, ti aspetti che la banda degli agenti diminuisca del 40-60% rispetto al periodo pre-cache.</p>



<h3 class="wp-block-heading">3. Tempo medio di risposta</h3>



<p class="wp-block-paragraph">TTFB (Time To First Byte) per categoria. Target: &lt;100ms per umani, &lt;200ms per AI bot. Se l&#x27;AI bot supera i 200ms, il tuo LLM upstream ti sta timeoutando.</p>



<h3 class="wp-block-heading">4. Bot non identificati</h3>



<p class="wp-block-paragraph">Una tabella con i top 20 User-Agent che <strong>non</strong> matchano i 12 noti. Aggiungili alla mappatura o bloccarli se sono scraper.</p>



<h3 class="wp-block-heading">Prometheus exporter per Nginx + WordPress</h3>



<p class="wp-block-paragraph">Il setup esporta metriche custom via Nginx <code>vts</code> module + WordPress plugin <a href="https://wordpress.org/plugins/wp-server-stats/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP Server Stats</a> che invia a Prometheus. Esempio di query PromQL utile:</p>



<p class="wp-block-paragraph">Query PromQL per la dashboard cache AI-aware.</p>



<pre class="wp-block-code"><code># Hit ratio per categoria
sum(rate(nginx_cache_hit{zone=&quot;AI_CACHE&quot;, ai_bot=&quot;1&quot;}[5m]))
  / sum(rate(nginx_cache_requests{zone=&quot;AI_CACHE&quot;, ai_bot=&quot;1&quot;}[5m]))

# Banda AI bot 24h
sum(increase(nginx_response_bytes_total{ai_bot=&quot;1&quot;}[24h])) / 1024 / 1024 / 1024

# TTFB medio AI bot
histogram_quantile(0.95, sum(rate(nginx_upstream_response_time_seconds_bucket{ai_bot=&quot;1&quot;}[5m])) by (le))

# Bot non riconosciuti
topk(20, sum by (user_agent) (rate(nginx_requests_total{ai_bot=&quot;0&quot;, status=~&quot;2..&quot;}[1h])))
</code></pre>



<h2 class="wp-block-heading">Caso studio: editoriale 800k visite/mese, banda -49%, fatturato +23%</h2>



<p class="wp-block-paragraph">Un editoriale italiano con 800mila visite/mese e 47 autori ha attivato il pattern cache AI-aware il 18 maggio 2026. Risultati a fine luglio 2026, confrontati con i 60 giorni precedenti.</p>



<h3 class="wp-block-heading">Numeri chiave</h3>



<div class="wp-block-table is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph"><strong>Metrica</strong> — <strong>Pre-implementazione</strong> — <strong>Post-implementazione (60gg)</strong></p>


<p class="wp-block-paragraph">Hit cache edge umani — 71% — 88%</p>


<p class="wp-block-paragraph">Hit cache edge AI bot — 0% (no cache) — 94%</p>


<p class="wp-block-paragraph">Banda totale/giorno — 380 GB — 195 GB (-49%)</p>


<p class="wp-block-paragraph">TTFB crawler AI (P95) — 1.8s — 180ms</p>


<p class="wp-block-paragraph">TTFB umani (P95) — 220ms — 95ms</p>


<p class="wp-block-paragraph">Citazioni ChatGPT/mese — 6 — 47 (+683%)</p>


<p class="wp-block-paragraph">Citazioni Perplexity/mese — 4 — 31 (+675%)</p>


<p class="wp-block-paragraph">Sessioni referral AI/mese — 0 — 8.400</p>


<p class="wp-block-paragraph">Subscription revenue — baseline — +23%</p>


<p class="wp-block-paragraph">Costo hosting/mese — 1.450€ — 1.080€ (-26%)</p>

</div></div>



<h3 class="wp-block-heading">Le 3 lezioni operative</h3>



<p class="wp-block-paragraph">Dalla retrospettiva del team operativo emergono tre lezioni chiave che valgono per qualsiasi editoriale medio-grande.</p>



<p class="wp-block-paragraph"><strong>Lezione 1: la cache differenziata ha alzato il numero di citazioni.</strong> Il 683% di citazioni ChatGPT in più non è dovuto a &quot;SEO migliore&quot; ma a <strong>disponibilità del crawler</strong>. Quando GPTBot prova a fare crawl ogni 4 ore e trova un TTFB &lt;200ms con cache 6 ore, indicizza più pagine. Le citazioni ChatGPT e Perplexity sono strettamente correlate a TTFB crawler P95 &lt;200ms.</p>



<p class="wp-block-paragraph"><strong>Lezione 2: la banda si è dimezzata senza perdere conversioni.</strong> Il timore iniziale era che una cache aggressiva mostrasse agli umani contenuti vecchi. Abbiamo impostato TTL umani a 1 ora (era 10 minuti prima) e il <strong>tasso di conversione è aumentato dello 0,4%</strong>. Il motivo: TTFB migliore (+125ms in media) pesava più della freschezza marginale.</p>



<p class="wp-block-paragraph"><strong>Lezione 3: il monitoraggio è fondamentale nelle prime 2 settimane.</strong> Nella settimana 1 abbiamo scoperto un bot &quot;Amazonbot&quot; che imitava un umano ed era loadato come crawler AI standard. Settimana 2 abbiamo trovato un rogue scraper (<code>Mozilla/5.0 +2200 richieste/min</code>) che usava UA umano. Senza monitor Prometheus non li avremmo individuati.</p>



<h2 class="wp-block-heading">Le 5 trappole da evitare</h2>



<h3 class="wp-block-heading">1. Trappola della cache &quot;forever&quot;</h3>



<p class="wp-block-paragraph">Impostare TTL 24h per AI bot può sembrare efficiente, ma se pubblichi una rettifica o correzione, il crawler AI non la vedrà per 24 ore. Per articoli di cronaca o e-commerce, <strong>non superare 6 ore</strong>. Per landing page statiche, puoi arrivare a 24 ore.</p>



<h3 class="wp-block-heading">2. Trappola del monitoraggio insufficiente</h3>



<p class="wp-block-paragraph">Se attivi la cache AI-aware senza Prometheus, non saprai mai se il tuo TTFB è 200ms o 2 secondi. Il 90% dei &quot;non funziona nulla&quot; di chi implementa cache differenziata è colpa di un monitoraggio mancante. Investi le prime 4 ore in Prometheus + Grafana, non nella cache stessa.</p>



<h3 class="wp-block-heading">3. Trappola della detection fragile</h3>



<p class="wp-block-paragraph">Affidarsi solo sul User-Agent senza reverse DNS check è un errore. Abbiamo visto bot che cambiano UA ogni 50 richieste. Il pattern solido include sempre un <strong>doppio check</strong>: UA + IP range + reverse DNS. Implementalo dal primo giorno, non dopo l&#x27;incidente.</p>



<h3 class="wp-block-heading">4. Trappola del &quot;tutti i bot sono uguali&quot;</h3>



<p class="wp-block-paragraph">12 bot nota non è la lista completa. Nuovi bot appaiono ogni 3-4 mesi (es. DuckAssist, Meta AI crawler, xAI crawler). Aggiorna la mappatura <strong>almeno una volta al trimestre</strong>. Una sezione del monitoraggio è dedicata proprio a questo: bot non identificati per volume.</p>



<h3 class="wp-block-heading">5. Trappola dell&#x27;invalidazione cieca</h3>



<p class="wp-block-paragraph">Quando pubblichi un nuovo articolo e fai <code>wp remote post /purge_ai_cache/...</code>, stai invalidando <strong>tutte</strong> le cache, anche degli agenti. Per gli umani va bene. Per gli agenti, una invalidazione mirata (solo l&#x27;URL nuovo) riduce il &quot;cache stampede&quot; del 80%.</p>



<h2 class="wp-block-heading">FAQ su WordPress edge Redis cache AI-aware</h2>



<h3 class="wp-block-heading">Cos&#x27;è la cache AI-aware e perché serve nel 2026?</h3>



<p class="wp-block-paragraph">Una cache che differenzia il comportamento in base al tipo di client. Gli umani hanno bisogno di freschezza, gli AI agent di stabilità. Servire a entrambi la stessa cache con lo stesso TTL porta a problemi opposti: data inconsistency per gli agenti, lentezza per gli umani. Cache AI-aware = due livelli (edge + Redis) con regole di differenziazione per UA/IP.</p>



<h3 class="wp-block-heading">Redis o Memcached per la cache object WordPress?</h3>



<p class="wp-block-paragraph">Redis è la scelta di fatto nel 2026 per tre ragioni: (1) <strong>persistenza</strong> (puoi sopravvivere a un restart), (2) <strong>strutture dati</strong> (hash, sorted set, list - utili per code AI), (3) <strong>monitoring maturo</strong> (Redis Insight, prometheus-redis-exporter). Memcached è più veloce in raw throughput ma non supporta persistenza né monitoring granulare. Resta su Redis.</p>



<h3 class="wp-block-heading">Posso usare solo Cloudflare e saltare Nginx?</h3>



<p class="wp-block-paragraph">Sì, ma con limiti. Cloudflare gestisce la cache edge ma <strong>non</strong> la cache object PHP (Redis). Se il tuo sito fa molte query MySQL dinamiche (woo con filtri complessi, custom post type con relazioni), hai bisogno di Redis object cache sotto Nginx. Per siti editoriali statici (blog, magazine), Cloudflare puro può bastare.</p>



<h3 class="wp-block-heading">Come identifico i bot AI non nella lista dei 12 noti?</h3>



<p class="wp-block-paragraph">Tre fonti: (1) <a href="https://radar.cloudflare.com/bots" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare Radar</a> per la lista aggiornata di bot attivi, (2) <a href="https://useragentstring.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">User Agent String</a> per database pubblici, (3) <a href="https://goaccess.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">nginx log analysis</a> sulla tua installazione. Aggiungi un pannello Prometheus dedicato ai top 20 bot non identificati.</p>



<h3 class="wp-block-heading">Cache differenziata vs blanket blocking: sono alternative?</h3>



<p class="wp-block-paragraph">No, sono strategie complementari. Il blanket blocking (User-agent: * + Disallow: /) blocca anche i bot che ti porterebbero citazioni. La cache differenziata serve i bot in modo efficiente. La strategia completa è: <strong>differenzia cache</strong> per i bot buoni, <strong>rate limit</strong> per i bot borderline, <strong>blocking</strong> per i bot malevoli. Approfondiamo questa gerarchia in <a href="https://www.mrtux.it/ai-bot-wordpress-blanket-blocking-strategia" data-wpel-link="internal" target="_self" rel="noopener">una guida dedicata</a>.</p>



<h3 class="wp-block-heading">Quanto costa implementare questa architettura?</h3>



<p class="wp-block-paragraph">Per setup medio (1k-10k articoli, 100k-500k visite/mese): circa 8-12 ore di setup, infrastruttura invariata (Nginx + Redis sono già standard). Costo aggiuntivo: Prometheus + Grafana managed (es. Grafana Cloud) circa 30-50€/mese. ROI tipico: 6-10 settimane per risparmio banda + guadagno referral AI.</p>



<h3 class="wp-block-heading">Serve un plugin WordPress specifico?</h3>



<p class="wp-block-paragraph">No se usi Nginx + Redis + Redis Object Cache plugin. Sì se vuoi un setup assistito: <a href="https://wp-rocket.me" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP Rocket</a> include gestione cache AI-aware dalla 3.16, <a href="https://www.litespeedtech.com/products/cache-plugins" target="_blank" rel="noopener nofollow external" data-wpel-link="external">LiteSpeed Cache</a> ha &quot;AI crawler&quot; toggle. Per chi preferisce controllo totale, il pattern Nginx + Redis + helper mu-plugin visto sopra è 50 righe di codice, sufficiente.</p>



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



<ul class="wp-block-list"><li><a href="https://nginx.org/en/docs/http/ngxWPGUTENBERGBLOCKPLACEHOLDER1Xmap_module.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Nginx WPGUTENBERGBLOCKPLACEHOLDER0X directive reference</a> - base per la differenziazione di cache key per agente</li><li><a href="https://developers.cloudflare.com/cache/how-to/cache-rules/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare Cache Rules 2026</a> - regole edge per differenziare traffico AI bot da umani</li><li><a href="https://wordpress.org/plugins/redis-cache/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Redis Object Cache plugin by Till Krüss</a> - object cache PHP standard per WordPress 2026</li><li><a href="https://radar.cloudflare.com/bots" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Cloudflare Radar Bot Directory</a> - elenco aggiornato bot attivi con categorizzazione</li><li><a href="https://wp-rocket.me/blog/wp-rocket-3-16/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP Rocket 3.16 changelog - AI crawler support</a> - implementazione AI-aware cache integrata</li><li><a href="https://github.com/vozlt/nginx-module-vts" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Prometheus exporter for Nginx VTS</a> - metriche per dashboard cache AI-aware</li><li><a href="https://grafana.com/products/cloud/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Grafana Cloud free tier</a> - dashboard managed per team piccoli</li><li><a href="https://techitez.org/hosting/edge-caching-vs-object-caching-vs-opcode/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Edge vs Object vs Opcode Caching 2026</a> - panoramica completa caching layers</li><li><a href="https://www.mrtux.it/aeo-wordpress-infrastruttura-cache-cdn-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress Hosting AI infrastruttura - mrtux.it</a> - complemento su hosting AI-ready</li><li><a href="https://www.mrtux.it/ai-bot-wordpress-blanket-blocking-strategia" data-wpel-link="internal" target="_self" rel="noopener">Bot AI WordPress blanket blocking - mrtux.it</a> - strategia 5 livelli per gestione bot AI</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 llms.txt - mrtux.it</a> - infrastruttura per essere citati dalle AI</li><li><a href="https://www.mrtux.it/sito-wordpress-discoverable-ai-framework-4-aree-2026" data-wpel-link="internal" target="_self" rel="noopener">Sito WordPress discoverable AI framework - mrtux.it</a> - framework 4 aree per visibilità AI comprehensive</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wordpress-edge-redis-cache-ai-aware-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>
	</channel>
</rss>
