429 Too Many Requests

What an HTTP 429 status means, how Google treats rate limiting and backs off from crawling, how it affects crawl budget, and how to configure your server to send 429s without causing deindexing.

First published: Jun 27, 2026 · Last updated: Jul 17, 2026 · Advanced
demand #6 in HTTP Errors#8 in HTTP Status Codes#29 in Technical SEO#37 on the site
2 evidence signals on this page

429 Too Many Requests is the one 4xx code Google doesn't treat like a client error. Once it sees enough of them, it reads that as a server-overload signal — the same bucket as 5xx — and throttles Googlebot's crawl rate across your whole hostname instead of dropping your content. That makes it the correct, Google-endorsed way to slow a crawler down (never 403 or 404). But it's a short-term tool: keep it to a couple of hours or 1–2 days, send a Retry-After header as best practice, and scope it to the right traffic. Sustained 429s on the same URLs for days can still get them dropped from the index.

TL;DR — 429 is the single 4xx code Google treats like a 5xx: once it encounters a significant number of 500/503/429 responses, it reads that as a server-overload signal and throttles Googlebot’s crawl rate hostname-wide instead of removing content. It’s the one code Google endorses for slowing a crawler down — never 403 or 404. Google’s docs give emergency-use guidance of “a couple of hours, or 1–2 days” — not a guaranteed safe window; sustained 429s on the same URLs risk those URLs eventually being dropped from the index, and the throttle starts increasing again (not necessarily instantly or fully) once error volume falls. RFC 6585 says a 429 SHOULD explain the condition and MAY include Retry-After — sending it is recommended practice, not a compliance requirement. Scope the limit to the right traffic and verify crawler identity before writing exceptions.

What 429 is at the protocol level

Straight from the spec, as MDN puts it: “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.’” 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

RFC 6585 §4 is more precise than most summaries of it get. A 429 representation SHOULD explain the condition and MAY include a Retry-After header giving the client a concrete number of seconds (RFC 9110 also allows an HTTP date) to wait before retrying — Retry-After is a recommended practice, not a compliance requirement. The spec also doesn’t define how a client is identified or how requests are counted; that’s left entirely to whatever issued the response (per IP, per session, per API key, per resource — implementation policy, not protocol). One more rule that’s easy to miss: RFC 6585 says a 429 response must not be stored by a cache. If you see a 429 that looks cached or replayed on a healthy origin, that’s an intermediary (CDN, proxy) misbehaving, not the origin re-deciding to limit you.

I’ve always framed it plainly in my HTTP Status Codes & Their SEO Impact guide: 429 is “a form of rate-limiting to protect the server because the client sent too many requests to the server too fast.” Nominally it’s a client error — the client did something wrong by asking too much. But that framing is exactly where the SEO story diverges from the spec.

The one exception among 4xx codes

The single most important fact on this page: Google does not treat 429 like the rest of the 4xx family. Gary Illyes wrote a whole Google Search Central blog post about this in February 2023, because enough sites and CDNs were misusing 404s to throttle Googlebot that Google had to tell them to stop.

His rule: “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.” And the flip side, in Google’s status-code reference: “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.”

So in the same breath where 403 and 404 will get your content removed from Search, 429 gets you a temporary slowdown. Google literally buckets it with server errors: “Google’s crawlers treat the 429 status code as a signal that the server is overloaded, and it’s considered a server error.” 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

This is what makes 429 the useful sibling of 503 Service Unavailable (the traditional maintenance/temporary-unavailable signal) — and the exact opposite of 403 Forbidden, which is the wrong tool for rate limiting despite how many firewalls default to it.

Crawl-rate impact is hostname-wide — with a threshold

Two different scopes get conflated here, and it’s worth separating them. How you count and key a rate limit — per IP, per session, per API key, per resource, per server — is your own policy; the HTTP spec doesn’t define it. What Google does with the errors it observes is a separate, documented behavior, and it’s conditioned on volume, not a single response: “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.” Once that threshold is met, “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.”

In other words, if you 429 a subset of pages (say, a heavy API path) at real volume, Googlebot slows its crawling of the entire hostname — including the pages still returning 200. That’s usually the intended effect when your goal is to reduce total load. But one isolated 429 on one path, on its own, doesn’t establish that hostname-wide effect — Google’s own wording is scoped to “a significant number” of error responses, not any single one.

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

The 1–2 day guidance — when 429 turns risky

429 is a short-term signal, and Google gives concrete emergency-use guidance for it — not a guaranteed safe window or a hard cliff. From the “reduce crawl rate” docs: “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.”

Push past that and you’re in riskier territory, though Google frames it as a possibility, not a promise: “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.” The status-code reference says the same thing for 5xx and 429 together: “already indexed URLs are preserved in the index, but eventually dropped.”

The risk model, stated honestly: short-term 429 fits the window Google recommends for emergency use; sustained 429 on the same URLs over multiple days is where Google’s own language turns to “may” and “eventually dropped” — a documented risk, not a guaranteed outcome either way. It’s the same dynamic as a prolonged 503.

Crawl rate recovers automatically

The reassuring flip side: there’s no penalty flag that follows your site around. Once the errors subside, Google says “the crawl rate will automatically start increasing again.” You don’t file anything, you don’t re-request anything. Note the exact wording, though — Google says “starts increasing,” not “instantly returns to your prior rate.” Treat recovery as a documented direction with no fixed timeline or guaranteed endpoint, not an 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

(Contrast that with the opposite problem — wanting Google to permanently crawl you less. If serving errors isn’t feasible, Google says to “file a special request to report a problem with unusually high crawl rate” — a manual path that can take days and isn’t guaranteed. There’s no such friction for recovery.)

How Bing handles 429

Bingbot is widely reported to behave similarly — 429/500/503 signaling overload and Bingbot backing off — though I couldn’t independently confirm current wording to that effect on Bing’s own help pages in this research pass (they’re JS-rendered SPAs that didn’t yield fetchable static text). Treat the parity claim as industry-reported, not something I’ve verified against current Bing documentation. What Bing does confirm, in its own historical guidance, are two proactive controls Google doesn’t offer in the same form:

  • Crawl Control in Bing Webmaster Tools, a requests-per-second grid where you set Bingbot’s speed by hour of day.
  • The crawl-delay robots.txt directive. Current Bing Webmaster guidance documents values from 1–20 seconds. This is Bing-specific; it does not throttle Googlebot.

So on Bing you can throttle proactively with crawl-delay or Crawl Control instead of reactively with status codes. (Google retired its own manual crawl-rate slider in 2024 and now leans entirely on your server’s responses.)

Note: Bing’s current Crawl Control and crawl-error help pages are JavaScript-rendered; the crawl-delay wording above is from Bing’s own 2009 blog post, still-honored guidance rather than a current UI screenshot. The 429-parity claim above and the current state of crawl-delay/Crawl Control are both needs-review against current primary Bing documentation — confirm exact present-day wording in Bing Webmaster Tools before quoting any of this as current.

When you’d deliberately send a 429

Legitimate reasons to return 429 on purpose:

  • Emergency server load — a traffic spike, a botched migration, or an outage where you need Googlebot to ease off right now for a few hours.
  • Protecting APIs and non-HTML endpoints from crawler/bot abuse — search-engine crawlers, third-party SEO crawlers (Ahrefs, Screaming Frog), and scrapers all hit rate limits meant to stop abuse.

What 429 is not for: permanently blocking bots you don’t want at all. If you never want something crawled, that’s a robots.txt disallow job, not a 429. And if you want to keep a page but out of the index, that’s noindex. 429 only means “later,” not “never.”

Unintentional 429s — the usual culprits

When 429s show up in GSC’s Page Indexing or Crawl Stats report and you didn’t put them there, the source is typically one of these — I’m not aware of good evidence for a universal ranking of which is most common, so treat this as a list of candidates to rule in or out, not a diagnosis:

  • WAF / firewall rules misfiring on legitimate crawler IP ranges.
  • Shared hosting or CDN default rate limits that are too tight for a real crawl.
  • Bot-management tools misclassifying Googlebot or Bingbot as abusive traffic.
  • Aggressive rate-limiting middleware meant for API abuse catching your own crawlers.

Before you touch a threshold or write a rule that exempts real search bots, establish provenance first — don’t guess which layer owns the response. Pull the raw response headers, the exact request log lines (not a dashboard summary), the rule or rate-limit-zone identifier that fired, the client key it counted against (IP, session, API key), the route, the CDN POP or edge location, and the time window. That combination tells you which layer actually issued the 429 and what it was counting — only then does it make sense to loosen a limit or add an exception. Verify crawler identity with reverse-plus-forward DNS (Google’s official method), not the user-agent string alone — spoofed “Googlebot” user-agents are common. The Scripts tab has the exact commands.

The short version of the playbook

  1. Use 429 or 503 with Retry-After to slow a crawler — never 403 or 404.
  2. Keep it to hours, or 1–2 days — beyond that, URLs can be dropped.
  3. Remember the throttle is hostname-wide, and auto-recovers when errors stop.
  4. Scope the limit to the right traffic and verify crawler identity before exempting bots.

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 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 an expert quote first.