500 Internal Server Error

What a 500 Internal Server Error is, how Googlebot treats server errors while crawling, why persistent 500s cause deindexing, and how to diagnose and fix them.

First published: Jun 28, 2026 · Last updated: Jul 17, 2026 · Advanced
demand #3 in HTTP Errors#3 in HTTP Status Codes#12 in Technical SEO#18 on the site

A 500 Internal Server Error is a generic, server-side failure code — RFC 9110 defines it as an unexpected condition that stopped the server from fulfilling the request, and nothing more; it doesn't say what failed, for how long, or whether a retry will work. An isolated 500 is typically retried by Google, but persistent, site-wide 500s get Google's documented response: slower crawling, and eventual removal from the index if the errors don't clear. John Mueller has offered a rough, personal rule of thumb — an error rate above roughly 1% is probably a real problem — but Google itself publishes no hard threshold. Diagnose from server logs first, then check GSC's Server error (5xx) report; causes like plugin conflicts and resource exhaustion are common on specific stacks (WordPress especially), not a universal list.

TL;DR — RFC 9110 defines 500 as an unexpected condition that stopped the server from fulfilling the request — that’s the entire boundary of the status code itself; cause, duration, and retry-worthiness are diagnosis, not semantics. Google’s documented reaction is graduated: isolated 500s are typically retried; persistent, site-wide 500s get slower 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. and, if unresolved, eventual removal from the indexStoring 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.. Mueller has offered a rough, personal rule of thumb — error rates above roughly 1% probably mean something’s broken — but that’s not a documented Google threshold, and the retry → slow-crawl → drop sequence describes documented behaviors, not a fixed lockstep timer. Diagnose from 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. first, then GSCA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.’s Server error (5xx) report and 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). “by response.” The 500-vs-503503 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. distinction matters: 503 is the sanctioned “come back later” code with a ~2-day grace window; an uncontrolled 500 gets no such grace.

What a 500 actually is

Start with the spec, not the practitioner shorthand. RFC 9110 — the HTTP semantics standard — defines a 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. as an unexpected condition that prevented the server from fulfilling the request. That’s the entire boundary of what the status code itself tells you. It does not identify the root cause, the failing component, how long the problem will last, whether the same request would succeed on retry, or whether recovery is likely. Everything past “the server hit something it couldn’t handle” is diagnosis, not status-code semantics — and diagnosis lives in your server error logs, not in the spec or in the browser.

Evidence for this claim A 500 response means the server encountered an unexpected condition that prevented it from fulfilling the request. Scope: RFC 9110 defines the generic response semantics; it does not diagnose the underlying server fault. Confidence: high · Verified: IETF: RFC 9110 §15.6.1 — 500 Internal Server Error

In the Ahrefs HTTP status codesAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index. guide I keep the practitioner-facing definition deliberately blunt: the server “encounters some kind of issue and doesn’t have a better or more specific error code.” That’s a plain-language gloss of the same RFC boundary — still a catch-all, still a symptom rather than a diagnosis.

It sits in the 5xx family alongside 502 (bad gateway), 503 (service unavailable), and 504A 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. (gateway timeout) — all server-side, but the 500 is the one that means “no better code applies.” Because the status code itself carries none of the diagnostic detail, a browser reload tells you nothing about why it happened; your server error logs are the ground truth.

How Googlebot treats a 500

Google’s crawlerA 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. is polite by design — it throttles to your server’s health, and 5xx responses are one of the signals it reads as “slow down.” Google’s current documentation confirms the shape of that response: 5xx and 429 responses cause a temporary crawl-rate reduction (scaled to how many URLs are affected), and URLs that keep failing can eventually be removed from the index, while already-indexed content is preserved in the meantime pending a successful refresh. Evidence for this claim Google reduces crawling in response to 5xx errors and eventually removes persistently failing URLs from its index. Scope: Google documents the general 5xx progression; it does not provide a guaranteed retry or recovery timeline for an individual URL. Confidence: high · Verified: Google: How HTTP status codes affect Google's crawlers John Mueller has described that same progression in his own words, in a Google SEO Office Hours session relayed via Search Engine Journal:

“We don’t have any strong thresholds on that. But essentially what happens with 500 errors is we’ll try to retry them. And if we continue to see …the 500 errors then we will …slow down 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.. And if we continue to see that there are 500 errors then we will drop those URLs from the index.”

Read that as a description of documented behaviors — retry, slower crawling, possible removal — not a fixed three-step timer with guaranteed transitions or timing; Google doesn’t publish exact thresholds for when one stage becomes the next. An isolated 500 on one URL is typically retried, and the next successful fetch is usually the end of it — but that’s a description of the common case, not a guarantee that a one-off failure carries zero cost. The real, documented risk lives in errors that don’t clear.

Why site-wide 500s are worse than isolated ones

There’s a nastier dynamic when a large share of your site 500s at once. Google’s current documentation confirms the crawl-rate cut scales with how many URLs are affected — the more of your site that’s failing, the more crawling slows. Mueller has put the reasoning behind that in more specific terms, framing it as Google suspecting its own crawling might be part of the overload:

“But if a large part of a site consistently has 500 errors and we might assume that maybe we’re causing the problem and we’ll slow down crawling of the whole site and at some point we’ll say well, it looks like these pages are really gone, we’re going to drop them.”

Treat that specific “we assume we’re causing it” causal framing as Mueller’s own characterization rather than wording pulled verbatim from Google’s current official docs — the underlying mechanism is documented (more failing URLs, more crawl-rate reduction), even though the exact causal reasoning is easier to verify from his own statement than from the docs themselves. Either way, the practical feedback loop is worth internalizing: aggressive crawling under resource exhaustion can trigger more 500s → Google backs off crawling of the whole site → and if the errors persist anyway, pages drop. It also means a 500 problem isn’t always a code bug — sometimes it’s your server buckling under concurrent load that only bites under crawler or traffic spikes.

How much is “too much”?

There’s no hard line — Google’s own troubleshooting documentation doesn’t publish an error-rate threshold at all. Mueller has offered a rough, personal rule of thumb in SEO Office Hours (again, relayed via Search Engine Journal, not an official Google publication):

“My feeling is if you’re seeing something more than one percent then that sounds like something is kind of broken.”

Treat ~1% as an unofficial smell test attributed to Mueller, not a documented or enforced Google limit. Below it you’re probably fine; above it, it’s worth investigating — but don’t treat crossing 1% as an automatic trigger, and don’t treat staying under it as a guarantee either. The one number Google commits to publicly is the absence of one: “we don’t have any strong thresholds.”

500 vs. 503: the distinction that matters

This is where a lot of people get it wrong. A 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. is the sanctioned way to tell a crawler “I’m temporarily down, come back later.” Google treats it as intentional and gives it a grace window. Google’s own crawling troubleshooting doc is explicit:

“Return 503 or 429 HTTP response status codes temporarily for 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. requests when your server is overloaded. Googlebot will retry these URLs for about 2 days. Note that returning ‘no availability’ codes for more than a few days will cause Google to permanently slow or stop crawling URLs on your site.”

The contrast: 503 is intentional and gets a ~2-day retry grace; an uncontrolled 500 is unintentional and gets no such grace — it’s simply retried until Google gives up. Practical upshot: for planned maintenance or a deliberate overload defense, return a 503 (ideally with a Retry-After header), not a 500 and not a 200 error page. Never dress a real outage up as a 200.

How to diagnose a 500

Work through this in layers — application/code, platform/CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms., infrastructure and resources, then configuration — cheapest and most-likely-to-pay-off first. Steps marked (WordPress-specific) are common WordPress practice, not universal fixes; adapt them to whatever your actual stack is.

  1. Server error logs. error.log / access.log (or your platform’s log viewer). Match timestamps to the failing requests. This is where the actual stack trace, PHP fatal error, or DB connection failure shows up. Everything downstream is guessing until you’ve read these.
  2. GSC — Server error (5xx) report. Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.’s Page 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. report flags the URLs Google itself is seeing 500s on. Then open Crawl Stats and read the “by response” breakdown over time — that’s how you tell a transient blip from a real, sustained availability problem.
  3. Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility.. Its crawl error alerts group Server Errors (5xx) and point you at the specific URLs and the Crawl Information tool.
  4. Reproduce as a bot, not just a browser. A page can 500 for Googlebot while loading fine for you — under crawl-triggered load, bot-detection/firewall misconfiguration, or capacity limits that only bite under concurrent bot traffic. Use URL Inspection (GSC), Fetch as BingbotBingbot is Microsoft Bing's primary web crawler — the bot that discovers, fetches, and renders pages to build the Bing index. That index also powers Yahoo, DuckDuckGo, Ecosia, and Microsoft Copilot, so Bingbot's reach is far wider than Bing's own search-market share., or curl with a bot user-agent to catch bot-only failures. “It works in my browser” is not the all-clear.
  5. Plugin / theme / module conflicts (WordPress-specific pattern; adapt elsewhere). Take a backup first — always have a way back before you start disabling things. Then disable extensions and re-enable one at a time to isolate the offender, checking file permissions/ownership on anything you touch. Hosting vendors’ own WordPress troubleshooting guides report this pattern often, but that’s a stack-specific observation, not evidence it’s the leading cause everywhere — on a different CMS or a custom app, the equivalent is a third-party module, package, or middleware conflict.
  6. Resource exhaustion. PHP memory limits, database connection limits, shared hosting capacity, traffic or crawl spikes. Your host can often confirm this from their side.
  7. Configuration & recent changes. A broken .htaccess, a bad server-config edit, a recent deploy, or wrong database credentials. Recent changes are the highest-yield place to look.

How to fix it (match the fix to the cause)

Match the fix to whichever layer the diagnosis pointed at. These are common patterns reported across practitioner write-ups, not a ranked or universal list of what’s most likely on your specific stack:

  • Config/deploy caused it → roll back the change; fix the .htaccess, config, or credentials.
  • Resource exhaustion → raise limits (PHP memory, DB connections) or upgrade the hosting tier; if crawling is triggering the overload, that’s also a crawl-rate conversation.
  • Plugin/module conflict → remove or replace the offending extension.
  • Code bug → fix the code, add the missing error handling.
  • You can’t tell → escalate to your host with the exact timestamps and the log lines. Don’t guess in production.

Preventing recurrence

Monitoring and alerting on 5xx rates, staging changes before they hit production, load testing ahead of known traffic spikes, and — if Googlebot’s crawling is itself the trigger — managing crawl load (and returning 503/429 deliberately during real overload, rather than letting the server emit uncontrolled 500s).

FAQ

Does a 500 error hurt SEO? The documented risk is mainly about persistence at scale. Isolated 500s are typically retried, with no documented penalty for a one-off blip; sustained, site-wide 500s slow crawling and can lead to 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..

How long before Google deindexes a page with a 500? There’s no fixed timeline. Google retries first and slows crawling; dropping from the index comes only if the errors continue. Fix it and pages generally come back once crawls succeed again.

Why does my site 500 for Googlebot but load fine in my browser? Bot-only 500s usually mean capacity/bot-handling issues — crawl-triggered load, firewall/bot rules, or limits that only bite under concurrent bot traffic. Trust the logs, not a manual browser check.

Can 500s slow crawling of my whole site, not just the affected pages? Yes — Google’s documentation confirms the crawl-rate cut scales with how many URLs are failing, so a large share of the site returning 500s slows crawling site-wide. Mueller has additionally framed the reasoning as Google suspecting its own crawling might be part of the overload — his own characterization, not wording pulled verbatim from the current official docs.

What causes a 500 in WordPress? On WordPress specifically, hosting vendors and the WordPress community most often report plugin/theme conflicts, a corrupt .htaccess, or hitting the PHP memory limit — that’s what gets reported for that platform, not a claim that these are the universal leading causes of every 500. The diagnosis order above (logs first, then what changed) is the same regardless of CMS.

Is it safe to automatically retry a request after a 500? Only if you’ve checked the method and the request’s idempotency first — the 500 status itself doesn’t authorize a retry policy. GET, HEAD, PUT, and DELETE are generally safe to retry because they’re idempotent (repeating them shouldn’t cause extra side effects); a bare POST usually isn’t, unless your API explicitly guarantees idempotency (for example, via an idempotency key) — retrying it blindly risks a duplicate order, a duplicate email, or a double-charged payment. When you do retry, use exponential backoff with jitter, cap the number of attempts, and set a retry budget so a struggling server doesn’t get hit by a retry storm on top of whatever’s already failing.

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.