429 Too Many Requests: guida al rate limiting

Che cosa significa lo stato HTTP 429, come Google tratta il rate limiting e rallenta la scansione, come influisce sul crawl budget e come configurare il server per inviare 429 senza causare deindicizzazione.

Prima pubblicazione: 27 giu 2026 · Ultimo aggiornamento: 22 ago 2026 · Advanced
Lingue
2 segnali di evidenza in questa pagina

429 Too Many Requests è l’unico codice 4xx che Google non tratta come un normale errore del client. Quando ne vede un numero sufficiente, lo interpreta come un segnale di sovraccarico del server — nella stessa categoria dei 5xx — e limita il crawl rate di Googlebot sull’intero hostname invece di rimuovere i contenuti. È quindi il modo corretto e approvato da Google per rallentare un crawler (mai 403 o 404). Ma è uno strumento temporaneo: usalo per alcune ore o 1–2 giorni, invia Retry-After come buona pratica e applicalo al traffico giusto. 429 persistenti sugli stessi URL per giorni possono comunque farli uscire dall’indice.

TL;DR — 429 è l’unico codice 4xx che Google tratta come un 5xx: quando incontra un numero significativo di risposte 500/503/429, lo interpreta come un segnale di sovraccarico del server e limita il crawl rate di Googlebot a livello dell’intero hostname, invece di rimuovere i contenuti. È l’unico codice che Google approva per rallentare un crawler: mai 403 o 404. La documentazione di Google suggerisce per le emergenze “a couple of hours, or 1–2 days.” (traduzione) «un paio d’ore o 1–2 giorni.», non una finestra garantita come sicura; 429 persistenti sugli stessi URL possono farli rimuovere dall’indice e la limitazione ricomincia ad aumentare (non necessariamente subito o fino al livello precedente) quando il volume di errori diminuisce. RFC 6585 dice che un 429 DOVREBBE spiegare la condizione e PUÒ includere Retry-After: inviarlo è una buona pratica raccomandata, non un requisito di conformità. Limita il traffico giusto e verifica l’identità dei crawler prima di scrivere eccezioni.

Che cos’è 429 a livello di protocollo

Direttamente dalla specifica, nelle parole di MDN: “The HTTP 429 Too Many Requests client error response status code indicates the client has sent too many requests in a given amount of time. This mechanism of asking the client to slow down the rate of requests is commonly called ‘rate limiting.’” (traduzione) «Il codice di stato di errore client HTTP 429 Too Many Requests indica che il client ha inviato troppe richieste in un certo intervallo di tempo. Questo meccanismo per chiedere al client di rallentare si chiama comunemente rate limiting.» Evidence for this claim A 429 response means the user sent too many requests in a given time, and the response may include Retry-After. Scope: RFC 9110 defines the status and optional Retry-After field; it does not define a universal rate threshold. Confidence: high · Verified: IETF: RFC 9110 §15.5.20 — 429 Too Many Requests Gloss italiano: Il codice 429 indica che il client ha inviato troppe richieste in un determinato intervallo; chiedere al client di rallentare si chiama comunemente rate limiting.

RFC 6585 §4 è più precisa di quanto lo siano molte sintesi. Una rappresentazione 429 DOVREBBE spiegare la condizione e PUÒ includere un’intestazione Retry-After con il numero concreto di secondi (RFC 9110 ammette anche una data HTTP) da attendere prima di riprovare: Retry-After è una pratica raccomandata, non un requisito di conformità. La specifica non definisce neppure come identificare un client o come contare le richieste; lo lascia a chi emette la risposta (per IP, sessione, chiave API, risorsa: è una policy di implementazione, non di protocollo). Un’ultima regola facile da perdere: RFC 6585 dice che una risposta 429 non deve essere memorizzata da una cache. Se vedi un 429 apparentemente memorizzato o riprodotto mentre l’origine è sana, il problema è un intermediario (CDN, proxy), non una nuova decisione dell’origine.

Nella mia guida Codici di stato HTTP e relativo impatto SEO l’ho sempre formulato in modo semplice: 429 è “a form of rate-limiting to protect the server because the client sent too many requests to the server too fast.” (traduzione) «una forma di rate limiting per proteggere il server perché il client gli ha inviato troppe richieste troppo rapidamente.» Tecnicamente è un errore del client: il client ha sbagliato chiedendo troppo. Ma è proprio qui che la storia SEO diverge dalla specifica. Gloss italiano: 429 è una forma di rate limiting per proteggere il server quando il client invia richieste troppo velocemente.

L’unica eccezione tra i codici 4xx

Il fatto più importante di questa pagina è: Google non tratta 429 come il resto della famiglia 4xx. Gary Illyes ha scritto un intero post sul blog Google Search Central nel febbraio 2023, perché abbastanza siti e CDN stavano usando male i 404 per limitare Googlebot e Google ha dovuto dire loro di smettere.

La sua regola è: “The one exception is 429, which stands for ‘too many requests’. This error is a clear signal to any well-behaved robot, including our beloved Googlebot, that it needs to slow down because it’s overloading the server.” (traduzione) «L’unica eccezione è 429, che sta per “troppe richieste”. Questo errore segnala chiaramente a qualsiasi robot corretto, compreso Googlebot, che deve rallentare perché sta sovraccaricando il server.» E, sul rovescio della medaglia, il riferimento di Google sui codici di stato dice: “Don’t use 401 and 403 status codes for limiting the crawl rate. The 4xx status codes, except 429, have no effect on crawl rate.” (traduzione) «Non usare i codici di stato 401 e 403 per limitare il crawl rate. I codici 4xx, tranne 429, non hanno effetto sul crawl rate.» Gloss italiano: 429 è l’eccezione: segnala a un bot corretto, compreso Googlebot, di rallentare perché sta sovraccaricando il server; 401 e 403 non limitano il crawl rate.

Quindi, nello stesso momento in cui 403 e 404 fanno rimuovere i contenuti da Search, 429 produce un rallentamento temporaneo. Google lo raggruppa letteralmente con gli errori server: “Google’s crawlers treat the 429 status code as a signal that the server is overloaded, and it’s considered a server error.” (traduzione) «I crawler di Google trattano il codice di stato 429 come un segnale che il server è sovraccarico e lo considerano un errore server.» Evidence for this claim Google treats 429 as a server-overload signal that reduces crawl rate and recommends 429, 500, or 503 for temporary crawl reduction instead of other 4xx codes. Scope: Google's guidance covers Google crawler behavior and short-term overload; it does not promise indexing preservation during prolonged unavailability. Confidence: high · Verified: Google: Reduce Google crawl rate Gloss italiano: 429 segnala un sovraccarico e viene trattato come errore server per la scansione, mentre 403 e 404 rimuovono il contenuto.

Questo rende 429 il parente utile di 503 Service Unavailable (il segnale tradizionale di manutenzione o indisponibilità temporanea) e l’opposto esatto di 403 Forbidden, che è lo strumento sbagliato per il rate limiting, nonostante molti firewall lo usino come valore predefinito.

L’impatto sul crawl rate riguarda l’intero hostname, oltre una soglia

Qui vengono confusi due ambiti diversi, che conviene separare. Il modo in cui tu conti e applichi un rate limit — per IP, sessione, chiave API, risorsa o server — è una tua policy: la specifica HTTP non lo definisce. Ciò che Google fa con gli errori che osserva è un comportamento documentato distinto, condizionato dal volume, non da una singola risposta: “Google’s crawling infrastructure reduces your site’s crawling rate when it encounters a significant number of URLs with 500, 503, or 429 HTTP response status codes.” (traduzione) «L’infrastruttura di scansione di Google riduce il crawl rate del sito quando incontra un numero significativo di URL con codici di stato HTTP 500, 503 o 429.» Quando la soglia viene raggiunta, “the reduced crawl rate affects the whole hostname of your site (for example, subdomain.example.com), both the crawling of the URLs that return errors, as well as the URLs that return content.” (traduzione) «il crawl rate ridotto riguarda l’intero hostname del sito, sia gli URL che restituiscono errori sia quelli che restituiscono contenuti.»

In altre parole, se restituisci 429 a un sottoinsieme di pagine (per esempio un percorso API pesante) con un volume reale, Googlebot rallenta il crawl dell’intero hostname, comprese le pagine che continuano a restituire 200. Di solito è l’effetto voluto quando vuoi ridurre il carico totale. Ma un solo 429 isolato su un percorso non dimostra da sé un effetto a livello hostname: la formulazione di Google parla di “a significant number” di risposte d’errore, non di una singola risposta. Evidence for this claim When Google encounters a significant number of 500, 503, or 429 responses, its documented crawl-rate reduction affects the whole hostname, including error URLs and URLs still returning content; one isolated 429 does not establish that site-wide effect. Scope: hostname crawl-load incidents Confidence: high · Verified: Reduce Google crawl rate

L’indicazione di 1–2 giorni: quando 429 diventa rischioso

429 è un segnale a breve termine e Google offre un’indicazione concreta per le emergenze, non una finestra garantita come sicura né un limite rigido: “If you need to urgently reduce the crawl rate for short period of time (for example, a couple of hours, or 1-2 days), then return 500, 503, or 429 HTTP response status code instead of 200 to the crawl requests.” (traduzione) «Se devi ridurre urgentemente il crawl rate per un breve periodo (per esempio alcune ore o 1–2 giorni), restituisci agli accessi dei crawler un codice di risposta HTTP 500, 503 o 429 invece di 200.» Gloss italiano: Per ridurre urgentemente il crawl rate, Google indica un periodo breve, per esempio qualche ora o 1–2 giorni, usando 500, 503 o 429 invece di 200.

Oltre quel periodo entri in una zona più rischiosa, anche se Google lo presenta come possibilità, non come certezza: “We don’t recommend that you do this for a long period of time (meaning, longer than 1-2 days) as it may have a negative effect on how your site appears in Google products… if Googlebot observes these status codes on the same URL for multiple days, the URL may be dropped from Google’s index.” (traduzione) «Non raccomandiamo di farlo per un periodo lungo, cioè oltre 1–2 giorni, perché potrebbe avere un effetto negativo sulla presenza del sito nei prodotti Google… se Googlebot osserva questi codici sullo stesso URL per più giorni, l’URL potrebbe essere rimosso dall’indice di Google.» Il riferimento sui codici di stato dice lo stesso per 5xx e 429: “already indexed URLs are preserved in the index, but eventually dropped.” (traduzione) «gli URL già indicizzati vengono conservati nell’indice, ma alla fine rimossi.»

Il modello di rischio, espresso onestamente: un 429 a breve termine rientra nella finestra che Google raccomanda per le emergenze; un 429 persistente sugli stessi URL per più giorni è il caso in cui Google passa a “may” ed “eventually dropped”: un rischio documentato, non un esito garantito in un senso o nell’altro. È la stessa dinamica di un 503 prolungato.

Il crawl rate si riprende automaticamente

Il lato rassicurante è che non esiste un contrassegno di penalizzazione che segue il sito. Quando gli errori diminuiscono, Google dice: “the crawl rate will automatically start increasing again.” (traduzione) «il crawl rate inizierà automaticamente ad aumentare di nuovo.» Non devi inviare nulla né chiedere nuovamente la scansione. Nota però la formulazione esatta: Google dice «inizia ad aumentare», non “instantly returns to your prior rate.” (traduzione) «torna immediatamente al ritmo precedente.» Considera il recupero una direzione documentata senza tempi fissi o punto finale garantito, non uno SLA. Evidence for this claim Google says crawl rate automatically starts increasing after the number of overload responses falls; this describes direction, not an immediate return, fixed recovery time, or guaranteed prior crawl rate. Scope: hostname crawl-load incidents Confidence: high · Verified: Reduce Google crawl rate

(A confronto, l’altro problema è voler fare in modo che Google ti scansioni permanentemente meno. Se servire errori non è praticabile, Google dice di “file a special request to report a problem with unusually high crawl rate” (traduzione) «inviare una richiesta speciale per segnalare un problema di crawl rate insolitamente elevato»: un percorso manuale che può richiedere giorni e non è garantito. Per il recupero non c’è questo attrito.)

Come gestisce Bing i 429

È ampiamente riportato che Bingbot si comporti in modo simile — segnali di sovraccarico 429/500/503 e rallentamento di Bingbot — ma in questa fase non ho potuto confermare autonomamente la formulazione corrente sulle pagine di assistenza di Bing (sono SPA renderizzate in JavaScript che non hanno fornito testo statico recuperabile). Considera quindi la parità una notizia riportata dal settore, non qualcosa che ho verificato sulla documentazione Bing attuale. Ciò che Bing conferma nelle sue indicazioni storiche sono due controlli proattivi che Google non offre nella stessa forma:

  • Crawl Control in Bing Webmaster Tools, una griglia di richieste al secondo in cui imposti la velocità di Bingbot per ora del giorno.
  • La direttiva crawl-delay di robots.txt. Le indicazioni correnti di Bing Webmaster documentano valori da 1 a 20 secondi. È specifica di Bing e non limita Googlebot.

Su Bing puoi quindi limitare proattivamente con crawl-delay o Crawl Control invece di reagire con i codici di stato. (Google ha ritirato il proprio cursore manuale del crawl rate nel 2024 e ora si affida interamente alle risposte del server.)

Nota: le pagine correnti di Bing su Crawl Control e sugli errori di scansione sono renderizzate in JavaScript; la formulazione di crawl-delay qui sopra proviene dal post del blog Bing del 2009, una guida ancora rispettata e non uno screenshot dell’interfaccia attuale. Sia la parità dei 429 sia lo stato corrente di crawl-delay/Crawl Control richiedono una verifica rispetto alla documentazione primaria Bing attuale: conferma il testo esatto in Bing Webmaster Tools prima di citarlo come aggiornato.

Quando invieresti deliberatamente un 429

Motivi legittimi per restituire 429 intenzionalmente:

  • Carico d’emergenza sul server — un picco di traffico, una migrazione riuscita male o un’interruzione per cui hai bisogno che Googlebot rallenti subito per qualche ora.
  • Protezione di API ed endpoint non HTML dall’abuso di crawler e bot — crawler dei motori, crawler SEO di terze parti (Ahrefs, Screaming Frog) e scraper possono tutti raggiungere limiti pensati per fermare gli abusi.

A che cosa non serve 429: bloccare per sempre i bot che non vuoi affatto. Se non vuoi mai che qualcosa venga scansionato, è un compito di disallow in robots.txt, non di 429. Se vuoi mantenere una pagina ma escluderla dall’indice, usa noindex. 429 significa solo “più tardi”, non “mai”.

429 involontari: le cause più comuni

Quando i 429 compaiono nel report Indicizzazione delle pagine o Crawl Stats di GSC senza che tu li abbia configurati, la causa è in genere una di queste. Non conosco prove solide per ordinare universalmente le frequenze, quindi considerale candidate da confermare o escludere, non una diagnosi:

  • Regole WAF/firewall che scattano erroneamente sugli intervalli IP dei crawler legittimi.
  • Limiti predefiniti di hosting condiviso o CDN troppo stretti per un crawl reale.
  • Strumenti di bot management che classificano Googlebot o Bingbot come traffico abusivo.
  • Middleware di rate limiting aggressivo pensato per l’abuso delle API che intercetta i tuoi crawler.

Prima di modificare una soglia o scrivere una regola che esenti i motori di ricerca reali, stabilisci la provenienza: non indovinare quale livello possieda la risposta. Recupera le intestazioni raw, le righe esatte dei log di accesso (non un riepilogo della dashboard), l’identificatore della regola o della zona di rate limit scattata, la chiave client usata per il conteggio (IP, sessione, chiave API), la route, il POP o edge CDN e la finestra temporale. Questa combinazione ti dice quale livello ha emesso davvero il 429 e che cosa stava contando: solo dopo ha senso allentare il limite o aggiungere un’eccezione. Verifica l’identità del crawler con DNS inverso e diretto (il metodo ufficiale di Google), non con la sola stringa user agent: gli user agent “Googlebot” falsificati sono comuni. La scheda Scripts contiene i comandi esatti.

La versione breve del playbook

  1. Usa 429 o 503 con Retry-After per rallentare un crawler: mai 403 o 404.
  2. Limita il periodo a ore o 1–2 giorni: oltre, gli URL possono essere rimossi.
  3. Ricorda che il limite è a livello hostname e il recupero è automatico quando gli errori finiscono.
  4. Limita il traffico giusto e verifica l’identità del crawler prima di esentare i bot.

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.