Server Error (5xx)

What the "Server error (5xx)" status in Google Search Console's Page Indexing report means — why a 500-level response slows crawling and eventually drops pages, how to diagnose and fix it, and the right way to take a site down on purpose with a 503 and Retry-After.

First published: Jun 23, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #12 in Indexing#38 in How Search Works#184 in Technical SEO#249 on the site
1 evidence signal on this page

"Server error (5xx)" in Search Console's Page Indexing report means Googlebot requested a URL and the server returned a 500-level error (500, 502, 503, 504) instead of a 200, so the page can't be indexed. Two harms follow: Google slows crawling — proportionate to how many URLs are erroring — and any content from a 5xx is ignored; persistent 5xx eventually drops already-indexed URLs. Recovery is automatic once the server returns 2xx, but the crawl rate ramps back gradually. Common causes are an overloaded or misconfigured host, app/DB errors, upstream/CDN failures, and a CDN/WAF (or rate limiting → 429, which Google buckets with 5xx) blocking Googlebot — verify with reverse DNS/IP ranges before changing security rules, since a Googlebot user-agent is spoofable. Diagnose via Crawl Stats host availability, server logs, and the URL Inspection live test (a page working now doesn't prove what Googlebot saw earlier). The one nuance: Google's default advice is to stay online with limited functionality during a closure; if you must fully disable, 503 + Retry-After is correct for a day or two at most (weeks of downtime harms indexing with no fixed recovery time), and your robots.txt must keep returning 200 throughout, because a 503 on robots.txt can pause crawling site-wide.

TL;DR — “Server error (5xx)” means the server returned a 500-level code when GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. requested the URL, so the page can’t be indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.. Two distinct harms: Google slows the crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor. (proportionate to how many URLs are erroring) and ignores any content a 5xx returns; if the errors persist, already-indexed URLs are preserved at first, then dropped. Recovery is automatic once you return 2xx, but the crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor. ramps back up gradually. Google buckets 429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content. (rate limiting / “server overloaded”) with 5xx. Causes: overloaded/misconfigured host, app/DB errors, upstream or CDN failures, a CDN/WAF blocking GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. (verify with reverse DNS/IP ranges before changing security rules — a Googlebot user-agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. is spoofable). Diagnose with Crawl StatsA Google Search Console report (under Settings) that shows how Google has crawled your site over the last 90 days — total requests, download size, and average response time, broken down by response code, file type, Googlebot type, and purpose. It's only available for root-level properties (a Domain property or a URL-prefix property verified at the site's root). host availability → server logsLog file analysis is reading a web server's raw access logs to see exactly which URLs search engine crawlers actually requested, when, how often, and what status code they got. Unlike crawl tools or Search Console, logs are the unsampled, ground-truth record of what really happened.URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. live test. Google’s default recommendation for planned closures is to stay online with limited functionality; if you must fully disable, the correct response is 503 + Retry-After for a day or two (“a few days at most” — weeks of it harms indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. with no fixed recovery time) — and robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. must keep returning 200, because a 503 on robots.txt can pause crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. site-wide. Then run Validate Fix (optional — it just tracks the fix).

What the status actually reports

The label reports the response Google observed, not the specific origin, proxy, database, or CDN failure that caused it. Evidence for this claim Google reports Server error 5xx when the server returned a 500-level response for the requested page. Scope: Google Search Console report terminology and documented Search behavior; the label alone may not prove the underlying root cause. Confidence: high · Verified: Google: Page indexing report Google’s HTTP guidance defines the separate crawl and indexing effects. Evidence for this claim Google slows crawling for 5xx responses and may eventually remove persistently failing URLs from the index. Scope: Google Search Console report terminology and documented Search behavior; the label alone may not prove the underlying root cause. Confidence: high · Verified: Google: HTTP status codes

Google’s own definition is one line: your server returned a 500-level error when the page was requested. That’s it. Googlebot made a request, and instead of a 200 with content it got a 500, 502, 503, 504, or similar. The URL lands under Not indexed because there was no usable content to index.

Keep one thing straight: this is about the response code, not the page’s content, markup, or SEO setup. A 5xx is a server-and-infrastructure problem. No amount of editing the page’s HTML fixes a 502 coming from an overloaded backend.

How Google treats 5xx — the crawl economics

This is the part most explainers skip, and it’s the whole reason 5xx matters more than, say, a 404. Google’s HTTP-errors documentation spells out the behavior:

  • Crawling slows down. 5xx (and 429) errors prompt Google’s crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. to temporarily slow down. The decrease in crawl rate is proportionate to the number of individual URLs returning a server error — a handful of erroring URLs is a nudge; a site-wide 5xx is a hard brake.
  • The content is ignored. Anything Google receives from a URL returning a 5xx is thrown away. There’s no “partial credit” for an error body — Google does not index a “site down” message you served with a 500.
  • Indexed URLs are preserved, then eventually dropped. Already-indexed URLs stay in the index at first. But Google’s indexing pipeline removes URLs that persistently return a server error. So a short outage costs you nothing in the index; a prolonged one costs you the pages.
  • Recovery is automatic — but gradual. Once the server starts responding with 2xx again, Google gradually increases the crawl rate back up. You don’t file a ticket; you fix the server and the crawl ramps back cautiously on its own.

That sequence — slow down → ignore content → preserve → eventually drop → recover on 2xx — is the accuracy spine of this whole topic.

429 counts as a server error. Worth flagging because most competitor content misses it: Google treats a 429 Too Many Requests as a signal that the server is overloaded, and buckets it with 5xx. If your rate limiting or bot protection is firing 429s at Googlebot, you’re getting the same crawl slowdown as a 500.

The common 5xx codes, by likely root cause

Knowing which 5xx you’re getting is a starting point for where to look — not proof of what’s broken. RFC 9110 (the HTTP specification) defines each code by what the responding component was doing, and any of these can be emitted by an origin server, an application server, a load balancer, a CDN, or a proxy sitting in front of the real origin. Treat the code as the first clue, then correlate it against edge, origin, application, and database/dependency logs for the same request before you conclude which layer actually failed:

  • 500 Internal Server ErrorA 500 Internal Server Error is a generic HTTP status code — RFC 9110 defines it as an unexpected condition that stopped the server from fulfilling the request, and nothing more. The request may have been fine — something broke server-side while generating the response. For SEO, an isolated 500 is typically retried, but persistent, site-wide 500s get Google's documented response: slower crawling and, if the errors don't clear, eventual removal from the index. — per the spec, “the server encountered an unexpected condition that prevented it from fulfilling the request.” That’s deliberately generic: it’s often application code or a runtime/config error, but the status code alone doesn’t prove that — check app logs to confirm.
  • 502 Bad GatewayA 502 Bad Gateway is an HTTP server error a gateway or reverse proxy (a CDN, load balancer, or proxy like Nginx) returns when it gets an invalid or no response from the upstream origin server it was trying to reach. It signals a communication failure *between* servers, not necessarily that the origin itself is down. For SEO, Google treats 502 exactly like 500 and 503: crawling slows, and persistent errors eventually get pages dropped from the index. — “the server, while acting as a gateway or proxy, received an invalid response from an inbound server.” This points at an upstream interaction, not a single vendor: check the chain of load balancer, reverse proxy, CDN, and the origin behind them.
  • 503 Service Unavailable503 Service Unavailable is the HTTP status code a server returns when it's temporarily unable to handle a request — usually because of overload or planned maintenance. It tells crawlers 'come back later' instead of 'this page is gone,' which is why Google recommends it (paired with a Retry-After header) for short, planned downtime. — “the server is currently unable to handle the request due to a temporary overload or scheduled maintenance.” Look at capacity, traffic spikes, and whether something is in a maintenance state. (This is also the code you want to send on purpose during planned downtime — see below.) Note the spec’s own caveat: an overloaded server isn’t required to return 503 at all — “some servers might simply refuse the connection,” which can show up as a timeout or connection error instead of a clean status code.
  • 504 Gateway TimeoutA 504 Gateway Timeout is an HTTP 5xx server error a gateway or proxy (a CDN, load balancer, or reverse proxy) returns when it doesn't get a timely response from the upstream server behind it. Unlike a 502 (a bad/garbled response) or a 503 (server explicitly unavailable), a 504 means no response arrived in time. For SEO, isolated 504s are retried and tolerated, but sustained 504s and timeouts make Googlebot slow its crawl and eventually drop pages from the index. — “the server, while acting as a gateway or proxy, did not receive a timely response from an upstream server.” It marks a timeout boundary, not which upstream component was slow: check long database queries, slow third-party calls, and an origin struggling under load.

A practical thread runs through these: 5xx often traces back to an overloaded or slow backend, so server performance work — faster queries, lighter server-side renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., more capacity — is frequently part of the fix, not a side quest. But because the same status code can come from any layer in the chain, the code narrows your search; the logs tell you where the failure actually happened.

Common causes

  • Overloaded host. Traffic spikes (including aggressive crawling) outrun your server’s capacity and it starts shedding requests as 5xx.
  • Application or database errors. Unhandled exceptions, a downed DB, a bad deploy, exhausted connection pools.
  • Misconfiguration. A broken config after a change, an expired dependency, a full disk.
  • Upstream / CDN failures. Your origin is fine but a proxy, load balancer, or CDN in front of it is returning 502/504 — or the CDN itself had an outage.
  • A CDN/WAF or rate limiter blocking Googlebot. Bot protection, security rules, or rate limiting that mistakes Googlebot for an attacker can return 5xx or 429 only to Googlebot while real users see the site fine. This one is under-covered and a frequent real-world cause — which is why you have to reproduce as Googlebot, not just check the page in your browser.

How to diagnose it

Work from the whole-site view down to the single URL:

  1. Crawl Stats → Host availability. In Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance., Settings → Crawl stats. The host statusThe at-a-glance availability indicator at the top of Google Search Console's Crawl Stats report. It shows whether Googlebot hit significant problems reaching your site in the last 90 days across three checks — robots.txt fetching, DNS resolution, and server connectivity. section and the by-response-code breakdown show whether 5xx is a persistent, large-scale issue or an isolated blip, and roughly when it started.
  2. Server and access logs. The ground truth. Filter your logs to Googlebot (verified — see the Scripts tab) and look at the status codes it actually received and when. Logs will show you a CDN/WAF blocking Googlebot that a browser test never would.
  3. URL Inspection → Live Test. Run a flagged URL through URL Inspection and use Test Live URL. This confirms whether Google-InspectionTool can access the page right now — useful, but it’s a current-state check, not proof of what happened at the earlier time Google logged the 5xx. A page that loads fine for you (in a browser, or via Live Test) minutes or hours later doesn’t rule out a real error at the moment Googlebot actually hit it — time, IP, geoGenerative Engine Optimization — visibility inside AI answer engines., cache state, and bot-detection rules can all differ between the two requests.
  4. Reproduce as Googlebot. Request the URL with Googlebot’s user-agent (and, if you can, from outside your network) to catch WAF/rate-limit rules that only fire for the bot. Treat this as a differential test, not verified proof of what Googlebot itself saw — a Googlebot user-agent string is trivial to spoof in either direction. Before you loosen a WAF, CDN, or rate-limit rule because “it’s only blocking Googlebot,” confirm the traffic in your logs is real Googlebot via reverse DNS or Google’s published IP ranges (see the Scripts tab) — don’t change a security control based on the user-agent header alone.
TIP Separate an isolated 5xx from a crawl-wide failure pattern

A spot check tells you what a URL returns now; access logs show which responses verified crawlers actually received over time. Use both before calling the incident fixed.

Check the affected URLs with my HTTP Status Checker, then quantify the historical 5xx requests in my Log File Analyzer. Log File Analyzer Free

  1. Test the exact URLs with the browser and Googlebot user-agent options.
  2. Filter access logs to verified Googlebot and inspect the 5xx count, paths, and timing.
  3. Retest after the server or edge fix and confirm the 5xx share falls.
The report separates 5xx requests from redirects and missing URLs so the server-error portion can be investigated directly.

How to fix it

Once you know the cause, the fixes follow Google’s own “fixing server errors” guidance:

  • Confirm the scale in Crawl Stats before you change anything — is this persistent and large, or a one-off?
  • Reduce excessive page loading for dynamic requests. Cache expensive pages, optimize slow queries, and stop generating heavy responses on every hit.
  • Make sure the host isn’t down, overloaded, or misconfigured. Add capacity, fix the config, restart the broken service, check the database.
  • Make sure you’re not inadvertently blocking Google. Audit CDN/WAF/bot rules and rate limits for anything firing 5xx or 429 at Googlebot.
  • Control crawling wisely. If aggressive crawling is overloading you, the answer is a temporary 503/429 to ease the bot off — not a permanent block.

The right way to take a site down on purpose — 503 + Retry-After

Sometimes you want the site unavailable: a migration, scheduled maintenance, pausing an online business. Doing it wrong turns a planned event into a deindexingDeindexing means getting a URL to stop appearing in Google's search results. There's no single delete button — the right method depends on whether you own the page, whether removal is temporary or permanent, and whether the content should still exist. event. Google’s Pause your online business in Google Search doc is explicit about the correct approach.

Google’s default recommendation is to keep the site up, just limited. If the closure is temporary and you plan to reopen, Google’s own preference is that you “keep your site online and limit the functionality” rather than take it fully offline. Full disable-and-503 is the urgent option, not the default one.

When you do need the whole site down, use 503 (Service Unavailable) with a Retry-After header. Google: “If you need to urgently disable the site for 1-2 days, then return an informational error page with a 503 HTTP response status code.” And pair it with the header: “Use the retry-after HTTP header with a best effort date or duration.” The 503 says “temporarily down,” and Retry-After tells the bot roughly when to come back — but treat that header as advisory, not a guarantee: it’s a best-effort signal, not a promise Google will recrawl at that exact time.

It’s a short-term measure only. Google calls it “an extreme measure that should only be taken for a very short period of time (a few days at most).” And the warning that competitors leave out: “Completely closing a site even for just a few weeks can have negative consequences on Google’s indexing of your site.” Google is explicit that there’s no way to shortcut your way back from that either — “there’s no fixed time for a recovery from a complete removal, and there’s no mechanism to speed that up.” In other words, a correct 503 protects you for a day or two — but no status code, and no amount of validating in Search Console, saves you from the indexing damage of being down for weeks, or gives you a guaranteed comeback date. If you need a long outage, that’s a different conversation (and probably a redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. or a real plan).

Why not a 200 or a 404

  • Don’t serve a 200 “under maintenance” page. Google will treat that page’s content as the real page and may index your “we’ll be back soon” message. The content from a proper 503, by contrast, is ignored — which is what you want.
  • Don’t return a 404 (or 403/410). Google’s guidance is explicit: don’t block the site by returning 403, 404, or 410 during downtime. A 404 signals gone, not temporarily down; you want the page preserved, and a 503 does that.

The robots.txt trap — keep it crawlable

This is the single most-missed detail, and it can pause crawling for your entire site. During a 503 maintenance window, your robots.txt file must keep returning 200 and stay crawlable. Google is blunt: “Don’t return a 503 HTTP response status code for the robots.txt file because this blocks all crawling.” Carve robots.txt out of the maintenance handler so it always answers 200 — don’t rely on what happens if you don’t.

For context, Google’s robots.txt spec doc lays out what actually happens if robots.txt itself starts erroring, and it’s staged rather than an instant, permanent lockout: for the first 12 hours Google stops crawling the site while still retrying robots.txt; for the next 30 days it falls back to the last known good version of robots.txt while still trying to fetch a fresh one; and after 30 days, if the site is otherwise reachable, Google drops the cached version and behaves as if there’s no robots.txt file at all (i.e., no crawl restrictions from it) rather than continuing to block. If there’s no cached version to fall back on in the first place, Google likewise assumes there’s no crawl restriction. None of that is a reason to risk it on purpose — a multi-day crawl pause at the start of the window is still real damage — it just means “robots.txt 503’d” isn’t a permanent, unrecoverable state if it happens by accident and gets fixed.

Validating the fix in GSC

After the server is healthy again:

  1. Open the Server error (5xx) issue in the Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason..
  2. Click Validate Fix. Google re-crawls the affected URLs in batches.
  3. Watch the validation state. As URLs come back 200, they clear; if some still error, the validation flags them and you diagnose those specifically.

You don’t have to wait for validation to re-crawl naturally — but Validate Fix prioritizes the affected set and gives you a status to track. Remember the crawl rate itself ramps back gradually once you’re returning 2xx, so don’t expect an instant snap-back to your old crawl volume.

Where this sits

A 5xx is a crawl-and-serve problem, so it touches the neighbors: persistent 5xx hammers your crawl rate (the lever Googlebot pulls when your server struggles), and the host-level view of it lives in the Crawl Stats reportA Google Search Console report (under Settings) that shows how Google has crawled your site over the last 90 days — total requests, download size, and average response time, broken down by response code, file type, Googlebot type, and purpose. It's only available for root-level properties (a Domain property or a URL-prefix property verified at the site's root). and its host status. It’s distinct from a 404 (not found), which signals gone rather than broken and is handled far more gently. For the bigger picture of how discovery and fetching work, see the crawling hub; for the rest of the Page Indexing statuses, see the GSC Page Indexing hub.

Add an expert note

Pin an expert quote

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