HTTP Status Checker

A bulk URL checker for status codes: paste up to 100 URLs and see each one's first and final status, every redirect hop, and what Google does with the answer.

Up to 100 URLs · GET or HEAD · every redirect hop · RFC 9110 + Google's own docs

The list goes to our server only to be checked: nothing is kept, and only a single URL ever appears in the address bar.

HTTP Status Checker: 17 example.com URLs with their status codes, redirect hops and what Google does with eachHTTP Status Checker: 17 example.com URLs with their status codes, redirect hops and what Google does with eachPaste any listURLs, bare host names, a CSV or a sitemap's XML. Repeats are merged, up to 100 a run.Every outcome counted2xx, redirects to a 2xx, 4xx, 5xx, blocked and couldn't check, with the run's time.One row per URLThe first status, the hops, the final status and URL, the time, and one note that matters.What Google does with theseEach answer in the group Googlebot puts it in, from Google's own documentation.
A run of 17 made-up example.com URLs: direct 200s, permanent and temporary moves, 404 and 410, a 500, a 503 with Retry-After, two bot walls and two addresses we couldn't check.

What is an HTTP status code?

An HTTP status code is the three-digit number at the start of every answer a web server sends. It's the first thing an HTTP status code checker reads: 200 means the request worked, 301 that the page moved, 404 that nothing is there.

The answer's first line holds three parts: the protocol version, the code and a reason phrase. Every valid code is between 100 and 599, and its first digit is its class.

The reason phrase is only a suggestion. A server can write "Not Found", "Nope" or nothing at all after a 404, and it's still a 404: software reads the number, never the words.

  • HTTP/1.1 404 Page missing= 404 · Same code, same meaning
  • HTTP/1.1 404 = 404 · Same code, same meaning
The first line of an answer, taken apart. The two lines under it carry the same code with different words, and mean the same thing.

S1S2S5

HTTP status codes list: the five classes

Status codes fall into five classes by their first digit: 1xx informational, 2xx success, 3xx redirection, 4xx client error and 5xx server error. To read an HTTP status code, take the class first, then the exact code.

A client that meets a code it doesn't know reads it as its class's x00: an unknown 471 counts as a 400. A number outside 100–599 isn't a valid code at all, and is read as a server error.

The bar is the example run in the product shot above, 17 made-up URLs, each counted by where it ended. The table lists every code this checker explains, with what it means, what Google does with it and its source.

  • 2xx Success 8
  • 3xx Redirection 1
  • 4xx Client error 2
  • 5xx Server error 2
  • Blocked our check 2
  • No answer / not asked 2
The example run's 17 URLs by the class of their final answer. 2 turned our check away (bot walls), and 2 got no answer or weren't asked (a name that doesn't exist, a private address).

S2S3S4

HTTP status codes this checker explains
CodeNameWhat it meansWhat Google doesSource
200OKThe request succeeded.Google can index the page. A 2xx doesn't promise it will.S6S41
201CreatedThe request created a new resource.Google can index the page. A 2xx doesn't promise it will.S7S41
202AcceptedAccepted for processing, not finished. The answer is noncommittal on purpose.Google can index the page. A 2xx doesn't promise it will.S8S77S41
204No ContentSuccess with nothing to send: a 204 can't carry content.Google has nothing to process.S9S44
206Partial ContentPart of a resource, sent for a range request.Google can index the page. A 2xx doesn't promise it will.S10S41
301Moved PermanentlyThe resource has a new permanent URL.A strong signal: Google follows it and treats the target as the canonical URL.S14S46S47
302FoundThe resource is temporarily at another URL; keep using the original.A weak signal: Google follows it but may keep the old URL in its results.S15S46S47
303See OtherGo to another resource for the answer, usually after a form is sent. The new URL isn't the same page.A weak signal: Google follows it but may keep the old URL in its results.S16S47S46
304Not ModifiedOnly for a conditional request: the copy the client has is still current. It carries no content.Tells Google the content hasn't changed since the last crawl; otherwise no effect on indexing.S17S48
307Temporary RedirectTemporary, and the client must keep the method (a POST stays a POST).A weak signal: Google follows it but may keep the old URL in its results.S18S46S47
308Permanent RedirectPermanent like 301, keeping the method. It dates from 2014, so very old clients may not know it.A strong signal: Google follows it and treats the target as the canonical URL.S19S46S47
400Bad RequestThe server won't process the request because of what it sees as a client error.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S20S49S50
401UnauthorizedValid credentials are missing; the server must say how to send them (WWW-Authenticate).To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S21S51S49S50
403ForbiddenUnderstood and refused. A server may answer 404 instead, to hide that the page exists.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S22S50S52S70S76S78S49
404Not FoundNo current page at this URL, or the server won't say. It doesn't say whether that's for good.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S23S49S50
405Method Not AllowedThe method is known but this resource doesn't support it; the server must list the methods it allows.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S24S37S77S49S50
408Request TimeoutThe server didn't receive the whole request in time. The client may send it again.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S25S49S50
410GoneNo longer available, and likely for good.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S26S50S49
418(Unused)From an April Fools' RFC; reserved so nothing else can take the number.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S27S50S49
421Misdirected RequestThis server can't answer for this URL on this connection.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S28S49S50
429Too Many RequestsToo many requests in a given time. It may say when to try again (Retry-After).Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S38S53S75S54S55
431Request Header Fields Too LargeThe request's headers are too large, often oversized cookies.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S39S49S50
451Unavailable For Legal ReasonsBlocked by a legal demand. It says nothing about whether the page exists, and the sender may be your ISP.To Google the content doesn't exist: an indexed URL is removed, and crawling of it slows.S40S49S50
500Internal Server ErrorSomething unexpected stopped the server.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S29S53S54S55
501Not ImplementedThe server doesn't support what was asked, such as the method.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S30S37S53S54S55
502Bad GatewayA gateway or proxy got an invalid answer from the server behind it.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S31S68S53S54S55
503Service UnavailableOverloaded or down for maintenance, for now. It may say when to come back (Retry-After).Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S32S34S55S53S54
504Gateway TimeoutA gateway or proxy got no answer in time from the server behind it.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S33S68S53S54S55
520Web server returned an unknown errorCloudflareCloudflare got an empty, unknown or unexpected answer from the origin.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S59S53S54S55
521Web server is downCloudflareThe origin refused Cloudflare's connection.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S60S53S54S55
522Connection timed outCloudflareCloudflare couldn't reach the origin: no handshake in 19 s, or no answer to the request in 90 s.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S61S53S54S55
523Origin is unreachableCloudflareCloudflare has no route to the origin's address.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S62S53S54S55
524A timeout occurredCloudflareCloudflare connected, but the origin sent no answer within 125 seconds.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S63S53S54S55
525SSL handshake failedCloudflareThe TLS handshake between Cloudflare and the origin failed.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S64S53S54S55
526Invalid SSL certificateCloudflareCloudflare couldn't validate the origin's certificate (Full (strict) mode).Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S65S53S54S55
530Origin DNS errorCloudflareCloudflare couldn't resolve the origin. The page's body names a 1xxx error, such as 1016.Google slows its crawling of the whole host; a URL that keeps failing for days is dropped.S66S67S53S54S55

Which HTTP status codes matter for SEO?

Five answers decide what Google does with a URL: 200 (it can be indexed), 301 or 308 (moved for good), 302 or 307 (moved for now), 404 or 410 (gone) and 429 or 503 (slow down). A status code checker that shows them side by side tells you which URLs Google will keep.

Google treats every 4xx except 429 the same way: the content doesn't exist, so 403 and 410 are no different from 404. A 429 or a 5xx is different: Google slows its crawling of the whole host, keeps the URLs for a while, and drops the ones that keep failing.

Bing gives the same advice in its own words: 301 for a permanent move, 302 only for a change of a couple of days, and 404 for content that's gone.

AnswerIn Google's indexOld URL's signalsCrawling
200S41Can be indexed (not guaranteed)Stays hereNormal
301308S46S47The target is indexedPass to the target (strong signal)Normal
302307S46S47The old URL may stayWeak signalNormal
404410S49S50RemovedLostSlows for that URL
429503S53S54S55Kept a while, then droppedUnchangedSlows for the whole host
What Google does with each answer, from its own documentation.

S41S46S47S49S50S53S54S55S58

First status vs final status: why a URL status checker follows redirects

A URL's first status is what that exact address answers; the final status is what you land on after every redirect. A URL status checker needs both: http://example.com/ answers 301, but the page people see answers 200.

Each Location header is read against the URL that sent it, so every hop is a new request to a new address. The checker records each one's status and time, and stops at loops.

Googlebot follows up to 10 redirect hops; past that it stops, and Search Console reports a "Redirect error". Each extra hop also costs your visitors a round trip, so link to the final URL.

First status 301Final status 200
  1. 301http://example.com/hop 1 · 238 ms
  2. 301https://example.com/hop 2 · 138 ms
  3. 200https://www.example.com/431 ms
Two rows of the example run of one domain's moves: http → https → www in 2 hops and 807 ms, and a chain of 11 redirects that runs past Googlebot's 10.

S11S12S13S45S57

Blocked isn't down: when a status code checker meets a bot wall

A 403, 429 or even a 202 to an automated check often comes from a bot wall in front of the site, not from the site itself. This status code checker names the wall and counts the row as "couldn't check", never as down or broken.

The walls say who they are. Cloudflare's challenge pages carry the header cf-mitigated: challenge, AWS WAF's carry x-amzn-waf-action (with a 202 for a challenge and a 405 for a captcha), and Akamai's deny page answers 403. A browser usually gets through by running the challenge's script; a checker that doesn't run JavaScript sees only the challenge.

So a blocked row means the site is up and turned automated requests away. Try the Googlebot user agent, and check your logs: some walls let verified crawlers through, some don't.

URLOur check gotThe signWall
https://www.example.org/403cf-mitigated: challengeCloudflare challenge
https://www.example.org/robots.txt200the page itselfNo wall
https://store.example.net/202x-amzn-waf-action: challengeAWS WAF challenge
https://news.example.net/403Server: AkamaiGHost, 403Akamai deny
https://api.example.net/v1/429429 + Retry-AfterRate limit
https://www.example.com/200the page itselfNo wall
The example run of bot walls: what our check got from each, and the header that names the wall.

S70S71S72S73S76S77S78

HEAD or GET: which should a bulk URL checker send?

GET, unless you know your servers answer HEAD properly. A bulk URL checker that sends HEAD is faster, but some servers refuse it (405 or 501) or drop the connection, and HEAD answers may leave out headers a GET would carry.

The standard says every general-purpose server must support GET and HEAD, and that a HEAD answer should carry the same headers as GET. In practice frameworks and old servers break that, so a HEAD check can show a 405 for a page that works.

This checker sends GET by default, as browsers and Googlebot do. With HEAD picked, a row whose server refuses HEAD or drops it is asked again with GET, and the row says what HEAD got.

  • https://example.com/HEAD200HEAD answered
  • https://nohead.example.com/HEAD405GET200shown
  • https://legacy.example.net/HEAD501GET200shown
  • https://cdn.example.org/files/manual.pdfHEAD200HEAD answered
  • https://dropper.example.com/HEADdroppedGET200shown
The example HEAD run: what HEAD got, and the GET answer each row shows instead.

S24S35S36S37

Soft 404s: a 200 that says "not found"

A soft 404 is a page that answers 200 but tells the visitor the page doesn't exist. Google reports it as a soft 404 in Search Console and treats it like a 404, so a status code alone can look healthy while the page is gone.

This checker reads the final page's title and flags a 200 whose title says "not found", "404" or "doesn't exist" as a hint. It's never counted as a 4xx: only the page's own content can tell.

The fix is to send a real 404 (or 410) for a missing page, or a 301 to the page that replaced it.

Looks like a not-found page404410Send 404 or 410 instead301or 301 to its new URL
A row of the example run: the status says 200, the title says the page isn't there.

S42S43

HTTP status checker FAQ

What's HTTP status 404?

404 Not Found means the server has no page at that URL, or won't say whether it has one. It doesn't say whether the page is gone for good: 410 Gone says that. Google treats both the same way and removes the URL from its index. If the content moved, redirect the old URL with a 301.

What is an HTTP status?

It's the three-digit number at the start of every answer a web server sends, such as 200, 301 or 404. The first digit is the class: 1xx informational, 2xx success, 3xx redirection, 4xx client error and 5xx server error. Every valid code is between 100 and 599.

How do I read an HTTP status code?

Read the first digit for the class, then look up the exact code. The words after the number, like "Not Found", are only a suggestion and a server can change them, so the number is what counts. A client that doesn't know a code treats it as its class's x00: an unknown 471 is read as 400. The [full code table](#codes) is below.

What's HTTP status 400?

400 Bad Request means the server won't process the request because it sees a client error, such as a malformed URL or query string. To Google it's like any other 4xx: the content doesn't exist. Check the URL for odd characters or a broken parameter.

How do I check the HTTP status of a URL?

Paste it in the box above and press Check status. You'll get the first status, every redirect hop and the final status. In a terminal, curl -I https://example.com/ prints the first answer's status line (add -L to follow redirects), but it sends HEAD, which some servers answer differently.

How do I check the status of many URLs at once?

Paste up to 100 URLs, one per line or as any text, or drop a .txt, .csv or a sitemap's XML file. Repeats are merged. Rows appear as each URL finishes; export the result as CSV or JSON, or copy only the failing URLs.

Why does a URL show "Blocked" here but open in my browser?

A bot wall or firewall turned our check away: Cloudflare's challenge, AWS WAF, Akamai or a plain 403. The site is up; it answers browsers and refuses automated requests. Try the Googlebot user agent, and check your server logs for what Googlebot really got.

Does Google index every page that returns 200?

No. A 200 means Google can index the page, not that it will. A 200 page that says "not found" is reported as a soft 404 in Search Console, and a noindex tag keeps it out.

Is my site down?

A status code from one place can't say that. The Website Down Checker asks your site from 11 places and your own connection, and shows a live screenshot.

How do I check every link on a page?

Use the Link Analyzer: it reads a page, lists every link with its follow status, and checks each link's HTTP status. This page checks the list of URLs you give it.

Missing something?Suggest a feature or a new tool