<?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>PHP-FPM tuning - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/php-fpm-tuning/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Tue, 16 Jun 2026 15:21:30 +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>PHP-FPM tuning - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>
