HTTP Status Code Checker

Every status code and what it means for crawling, indexing and links — plus a decoder for response headers you have already captured.

This page cannot fetch a URL for you. A browser is not allowed to read another site's response headers — that restriction is the whole point of CORS. Any tool that appears to do it is running the request on a server, which means the URL you typed is in somebody else's log. Capture the headers yourself with curl -I https://example.com/ or your browser's network panel, paste them here, and nothing leaves your machine.
Type a number or a word — 410, redirect, maintenance.
Paste a curl -I dump, or right-click a request in DevTools and copy the response headers. A whole curl -IL redirect chain works — every hop gets decoded.

CodeWhat it meansIndexablePasses links
100 ContinueInterim: the server is happy for the client to send the rest of the request. Never a final response and never seen by a crawler as one.
101 Switching ProtocolsThe handshake into WebSocket or another protocol. Not a page.
102 ProcessingWebDAV. The server is still working on it.
103 Early HintsSent ahead of the real response so the browser can start preloading. A speed feature, not a result.
200 OKThe normal success response. The page exists and this is it. Everything else on this list is a deviation from this one.YesFull
201 CreatedSomething was created. An API response, not a page.No
202 AcceptedAccepted for processing but not finished. Nothing to index.No
203 Non-Authoritative InformationA proxy modified the response on the way through. Treated like a 200, and a sign that something between you and the visitor is rewriting your pages.YesFull
204 No ContentSuccess with an empty body. Google has nothing to index and will treat the URL as an error.NoNone
205 Reset ContentTells the client to clear the form it just submitted. Not a page.No
206 Partial ContentA range request — video seeking, resumable downloads. Normal and not an error.
207 Multi-StatusWebDAV, several results in one body.No
208 Already ReportedWebDAV, avoiding repetition inside a 207.No
226 IM UsedDelta encoding. You will not see this one.No
300 Multiple ChoicesSeveral options and no preferred one. Without a Location header Google has nothing to follow and treats the URL as a soft 404.NoNone
301 Moved PermanentlyThe permanent move. Google consolidates the old URL into the new one and passes ranking signals in full, usually within a few weeks. Browsers cache it aggressively, so test in a fresh profile.TargetFull
302 FoundTemporary. Google keeps the old URL indexed and expects it to come back. Left in place for months, Google concludes you meant 301 and treats it as one — so the cost of getting this wrong is the months in between.SourceTo target
303 See OtherRedirect after a form post, always converting to a GET. Treated as a temporary redirect for indexing.TargetTo target
304 Not ModifiedNothing has changed since the crawler's last visit, so no body is sent. This is a good thing — it saves crawl budget. It is not an error and it does not deindex anything.Unchanged
305 Use ProxyDeprecated and ignored by every client for security reasons.NoNone
307 Temporary RedirectA 302 that is not allowed to change the request method. A POST stays a POST. Also what a browser does internally for an HSTS-preloaded host.SourceTo target
308 Permanent RedirectA 301 that is not allowed to change the request method. Passes signals identically. Use it for form endpoints and APIs; use 301 for pages, which every client understands.TargetFull
400 Bad RequestThe request was malformed. Seeing this on a normal URL means something in your stack is rejecting a legitimate request — usually an over-long query string or a character a WAF does not like.NoNone
401 UnauthorizedAuthentication required. Google drops the URL and does not keep retrying for long. Correct for a genuinely private area, catastrophic if a plugin starts serving it site-wide.NoNone
402 Payment RequiredReserved. Occasionally used by APIs for a hit quota.NoNone
403 ForbiddenThe server understood and is refusing. This is the most common cause of a page that vanishes from Google while looking perfectly fine in your browser: a WAF or bot-protection rule serving 403 to Googlebot only. Confirm with URL Inspection, never with your own browser.NoNone
404 Not FoundThe page does not exist. Not a penalty, and a site with thousands of them is not being punished for it. Google retries for a while and drops the URL. Links pointing at a 404 pass nothing at all, which is the only reason to care.NoNone
405 Method Not AllowedThe URL exists but not for that method. Usually something issuing a GET against a POST-only endpoint.NoNone
406 Not AcceptableContent negotiation failed. Security plugins sometimes serve it to crawlers by accident, which looks identical to a 403 in its effects.NoNone
407 Proxy Authentication RequiredA proxy wants credentials. If a crawler sees this, something is intercepting the request.NoNone
408 Request TimeoutThe client took too long to send the request. Persistent 408s to a crawler suggest a network or load-balancer problem.NoNone
409 ConflictThe request conflicts with the current state. API territory.NoNone
410 GoneDeleted deliberately and not coming back. Google removes a 410 faster than a 404 and stops retrying sooner. The honest answer for content you have genuinely retired with no replacement.NoNone
411 Length RequiredThe server wants a Content-Length header.NoNone
412 Precondition FailedA conditional request's condition did not hold.NoNone
413 Content Too LargeThe request body is too big. Upload endpoints.NoNone
414 URI Too LongAlmost always a redirect loop appending a parameter each time, or faceted navigation that has run away with itself.NoNone
415 Unsupported Media TypeThe server will not accept that content type.NoNone
416 Range Not SatisfiableThe requested byte range does not exist.NoNone
417 Expectation FailedThe server will not meet the Expect header.NoNone
418 I'm a TeapotAn April Fools' joke from 1998 that is still in the registry. Some bot-protection services genuinely return it for traffic they do not like, which is how it ends up in a crawl report.NoNone
421 Misdirected RequestThe connection reached a server that cannot answer for that host. A shared-certificate or HTTP/2 connection-coalescing problem, and a real cause of intermittent, unreproducible crawl errors.NoNone
422 Unprocessable ContentUnderstood but semantically wrong. Form and API validation.NoNone
423 LockedWebDAV resource lock.NoNone
424 Failed DependencyAn earlier request in the same operation failed.NoNone
425 Too EarlyThe server will not risk replaying an early-data request.NoNone
426 Upgrade RequiredThe client must switch protocol, usually to TLS.NoNone
428 Precondition RequiredThe server insists on a conditional request to avoid lost updates.NoNone
429 Too Many RequestsRate limited. Googlebot reads this as "you are struggling" and cuts its crawl rate, and a sustained 429 eventually costs you indexed pages. The most damaging 4xx a large site can serve.NoNone
431 Request Header Fields Too LargeUsually an oversized cookie.NoNone
451 Unavailable For Legal ReasonsBlocked by legal demand or regional law. For indexing purposes it behaves like a 404.NoNone
500 Internal Server ErrorSomething broke. Google retries, slows its crawl of the whole site, and after a sustained period starts dropping pages. Worse than a 404 because it suppresses crawling of everything else too.NoNone
501 Not ImplementedThe server does not support that method at all.NoNone
502 Bad GatewayA proxy got an invalid response from upstream. Normally the application behind the proxy has fallen over.NoNone
503 Service UnavailableTemporarily down. This is the correct code for planned maintenance: serve 503 with a Retry-After header and Google comes back without dropping anything. Serving a 200 maintenance page instead is how you get "We'll be back soon" indexed as your homepage.NoHeld
504 Gateway TimeoutUpstream took too long. Persistent 504s reduce your crawl rate exactly like a 500.NoNone
505 HTTP Version Not SupportedThe server refuses that HTTP version.NoNone
506 Variant Also NegotiatesA content-negotiation misconfiguration.NoNone
507 Insufficient StorageThe server is out of space.NoNone
508 Loop DetectedAn infinite loop while processing the request.NoNone
510 Not ExtendedThe request needs an extension the server wants declared.NoNone
511 Network Authentication RequiredA captive portal. If a crawler gets this, something on the network is intercepting the request.NoNone
520 Unknown Error (Cloudflare)Not a standard code. Cloudflare got an empty or invalid response from your origin. Crawlers treat the 52x family as ordinary 5xx errors.NoNone
521 Web Server Is Down (Cloudflare)Not standard. Your origin refused the connection.NoNone
522 Connection Timed Out (Cloudflare)Not standard. Cloudflare could not reach your origin in time.NoNone
523 Origin Is Unreachable (Cloudflare)Not standard. Usually a DNS problem at the origin.NoNone
524 A Timeout Occurred (Cloudflare)Not standard. The origin accepted the connection but never finished responding.NoNone
525 SSL Handshake Failed (Cloudflare)Not standard. TLS between Cloudflare and your origin failed.NoNone
526 Invalid SSL Certificate (Cloudflare)Not standard. Your origin's certificate could not be validated.NoNone

Nothing you type here is uploaded, stored or sent anywhere. It all runs in your browser.

Why no browser tool can check a live URL, and what that tells you

A page running in your browser is not allowed to read the response headers of a request to another origin. That is not an oversight, it is the same-origin policy, and it is the reason a malicious page cannot quietly read your webmail. Without a Access-Control-Allow-Origin header granting permission — which no normal website sends — the headers are invisible to JavaScript.

So every status-code checker that takes a URL and shows you a result is running that request on a server. That is a legitimate way to build the tool. It also means the URL you typed, the time you typed it and your IP are in a log somewhere, and on a staging domain or an unannounced launch page that is a genuine leak. This page decodes what you paste and never makes a request. It is a smaller tool and it is one you can use on anything.

The codes that actually change what Google does

  • 200 with nothing useful on it. A "no results" page, an empty category, a soft error page — all 200s, and Google calls them soft 404s and drops them anyway. The code and the content have to agree.
  • 403 served only to crawlers. Your browser gets the page, Googlebot gets refused, and the page disappears with no error you can reproduce. Bot-protection defaults are the usual culprit. This is the single most under-diagnosed technical SEO problem there is.
  • 503 for maintenance. The one 5xx you can use on purpose. With a Retry-After header it tells Google to come back rather than to reassess. The mistake is deploying a maintenance page that returns 200.
  • 429 under load. Googlebot interprets it as a signal to back off and keeps backing off. A rate limiter that does not exempt verified crawlers can cost a large site a meaningful share of its index.
  • 410 instead of 404. Slightly faster removal and fewer retries. Worth using when you are deliberately retiring a section, not worth retrofitting across a site.

What the headers around the status code are telling you

The code is the headline, not the story. An X-Robots-Tag: noindex on a 200 means the page is fine and still will not be indexed — and because it is a header rather than a tag, it is invisible in view-source and invisible to most browser extensions. A Link: <…>; rel="canonical" header does the same job as the HTML tag and wins arguments you did not know you were having. Vary: User-Agent announces that you serve different content to different clients, which is legitimate for mobile dynamic serving and a red flag anywhere else. All of these are in the header dump and none of them are in the page.

Capturing headers properly

curl -I https://example.com/ gives you one response. curl -IL follows the redirects and prints every hop, which is how you find a chain. Add -A "Googlebot" and compare — if the two differ, you have found your problem, though bear in mind a good bot-protection service checks the reverse DNS and will not be fooled by the user-agent string alone. In DevTools, the Network panel's response headers give you the same thing for a page you are already looking at, cookies and all.

Questions people ask

Why will this tool not just check my URL?

Because it cannot, and neither can any other page running in your browser. Reading another site's response headers from JavaScript is blocked by the same-origin policy. Tools that appear to do it proxy the request through their own server, which works fine but puts your URL in their logs. Paste the headers instead and nothing leaves your machine.

Is a lot of 404s bad for SEO?

No. 404s are a normal part of the web and Google has said repeatedly that having them is not a ranking problem. What matters is which URLs are 404ing: a 404 on a page that has external links pointing at it is throwing away those links, and a 404 on a page that is still linked from your own navigation is a bad experience you control. Fix those two categories and ignore the rest of the report.

Should I use 404 or 410?

410 says "deleted on purpose, stop asking". Google removes it a little faster and retries less. 404 says "not here", which could be temporary. If you are deliberately retiring content with nothing to redirect it to, 410 is more accurate. The difference is small and neither one is worth a migration project.

What is a soft 404?

A URL that returns 200 but has nothing on it worth indexing — an empty search result, a "product not found" page, a category with no items. Google detects the mismatch and treats it as an error anyway, so the 200 buys you nothing. Either put real content on the page or return a real 404.

Does a redirect chain lose link equity?

Not in the way the old advice claims. Google follows several hops and passes signals through them. The real costs are practical: each hop is a round trip for the visitor, each one is a rule that can get dropped in the next migration, and past about ten hops Google stops following. Flatten chains because they are fragile, not because of a percentage.

Do these headers get sent anywhere?

No. The decoder is plain JavaScript in your browser and this page makes no network requests at all. That is the trade-off for not being able to fetch the URL itself.

Clean status codes, still no rankings?

Every URL returning the right code is table stakes. What separates two technically perfect sites is which one people link to.

Book a Call More free tools