Bulk HTTP Status Code Checker

Paste up to 100 URLs and get the code each one returns right now, plus whether Google can actually use the page. Free, no signup, no credit card.

0 / 100 URLsUp to 100 URLs per run. Free, no signup, no credit card.

A 200 does not mean Google can use the page. This checker reports both.

What each column means

Status
The code returned by the final response, after any redirects were followed.
Verdict
Our reading of that code in context. OK, Check, Fix, Broken or Blocked. The table below explains each.
Redirects
How many hops it took to get there. If you need the hops themselves, use the bulk redirect checker. bulk redirect checker.
Indexable?
Whether anything in the final response stops Google indexing the page: a noindex in the X-Robots-Tag header or the meta robots tag, or a canonical pointing at a different URL.
In Google?
Whether Google actually has the page in its index right now. Opt-in, and only run on URLs that returned a success code.
ms
Round-trip time for the final response. A rough signal, measured from our servers, not a Core Web Vitals measurement.

The five verdicts

VerdictWhat it meansWhat to do
OKA success code, and nothing stopping Google using the pageNothing
CheckIt works, but something may not be what you intended: a canonical pointing elsewhere, a redirect you did not expect, a 401, or a success code other than 200Confirm it is deliberate
FixIt works today but is costing you something. Usually a success code carrying noindex, or a chain still redirecting at Google’s 10-hop limitChange it
BrokenIt does not work: 404, 410, another 4xx, a 5xx, a hostname that does not resolve, a refused connection, or an invalid certificateFix before you ship
BlockedWe could not get a reliable reading. A 403 of unknown cause, a 429, a bot-protection challenge, or a timeoutTreat it as unknown, not as a pass and not as a failure. Re-run, or check from your own network

Why a 200 does not mean the page is fine

A status code answers one question: did the server respond. It says nothing about whether Google will keep the page in its index. A URL can return a clean 200 and still be excluded, and the four ways that happens are all invisible to a checker that only reads the status line.

SignalWhat it looks likeEffect on indexing
meta robots noindex<meta name="robots" content="noindex"> in the page bodyGoogle drops the page from its index, or never adds it
X-Robots-Tag noindexAn X-Robots-Tag response header carrying noindex or noneSame as above, and invisible unless the tool reads response headers
Canonical pointing elsewhereA rel=canonical naming a different URLGoogle is asked to index that other URL instead of this one
Soft 404A 200 on a page that says nothing was foundGoogle may treat it as missing anyway. This checker does not detect soft 404s, and says so rather than guessing

The first three are read from the final response and shown in the Indexable? column on every run. For a single URL and a full five-signal verdict including robots.txt, use the indexability checker.

Checking index status alongside the status code

Indexable and indexed are different claims. The first is what the page permits. The second is what Google has actually done, and it is the one that decides whether the page can earn traffic. After a run, you can check index status live on the URLs that returned a success code. That restriction is deliberate: asking whether a 404 is indexed tells you nothing. It is capped at five URLs per run because each one is a live query against Google rather than a fetch of your own page.

For a longer list, the bulk Google index checker does the same job as its main task.

When a status code is not the server's real answer

We request your URLs from a datacentre IP address. Firewalls, CDNs and bot-protection layers treat that differently from your laptop, so sometimes the code we receive comes from the edge rather than from your server. When we cannot tell the difference, we say so instead of scoring the row. A tool that reports a bot challenge as a broken page is confidently wrong, which is worse than being unsure.

SymptomLikely causeWhat we report
403 in this tool, 200 in your browserA firewall or CDN refusing our datacentre IP address, rather than the page refusing everyoneBlocked, with the ambiguity stated. Never Broken
429 Too Many RequestsRate limiting, sometimes triggered by checking many URLs on one host at onceBlocked. Re-run with fewer URLs
503 with a challenge pageBot protection serving an interstitial instead of passing the request to the originBlocked, and the row says the origin did not answer

Every request carries an X-SearchOptimo-Tool header, so you can find it in your own access logs. If you need to establish whether a crawler specifically is being treated differently, the Googlebot block tester requests each URL twice, changing only the user-agent, and diffs the two responses.

What each status code means

The codes a site audit actually turns up, and what each one means for search. Class definitions follow RFC 9110; the indexing behaviour follows Google's own documentation on HTTP status codes.

CodeNameWhat it means for GoogleWhat to do
200OKIndexable, if nothing else blocks itNothing
301 / 308Moved Permanently / Permanent RedirectStrong signal to treat the target as canonicalCorrect for a permanent move
302 / 307Found / Temporary RedirectWeak signal. The original URL stays canonicalSwitch to 301 if the move is permanent
304Not ModifiedContent unchanged since the last crawlNothing. A caching response, not an error
401UnauthorizedCannot be crawled or indexedExpected on staging. A problem on a public page
403ForbiddenCannot be crawledCheck whether your CDN or firewall is refusing crawlers
404Not FoundDropped from the index after repeated crawlsRedirect to the closest equivalent, or leave it if the removal is intended
410GoneSame as 404, and states the removal is deliberateUse when you want the URL gone for good
429Too Many RequestsGoogle slows its crawl rateCheck your rate limiting is not throttling Googlebot
500 / 502 / 504Server errorsCrawling stops, and the page can be dropped if it persistsFix these first: nothing else on the list matters until they are resolved
503Service UnavailableTreated as temporary, so the page is retained for a whileCorrect for planned maintenance. A problem if it persists

What this checker cannot see

  • Anything added by JavaScript. We read the response the server sends. A noindex or canonical injected by a client-side script is invisible to this tool, and to every other status checker we tested.
  • Whether real Googlebot is treated differently. Choosing Googlebot sends its user-agent string from our IP address, which is not a verified Googlebot IP. Google verifies its crawlers by reverse DNS and published ranges, so a firewall doing the same will not treat us as Googlebot.
  • More than one vantage point. One request, from one network, at one moment. A CDN that varies by region can legitimately return a different code elsewhere.
  • Soft 404s. A 200 on a page that reports nothing was found needs content analysis to identify. We do not attempt it rather than guess.

Frequently asked questions

Is there a free bulk HTTP status code checker with no signup?
Yes, this one. Up to 100 URLs per run, no account, no credit card, and no daily limit on the number of runs. Results export to CSV and JSON.
How many URLs can I check at once?
Up to 100 per run. There is a fair-use ceiling of 600 URLs per day per IP address, which a normal migration check will never reach. If your list is longer, split it: every run exports to CSV, so the parts recombine in a spreadsheet.
Does a 200 status code mean my page is fine?
No, and this is the most common mistake a status checker encourages. A 200 only means the server answered. The same page can carry a noindex in its meta robots tag or its X-Robots-Tag header, or a canonical tag pointing at a different URL, and Google will not rank it. This checker reads all three from the final response and reports them next to the status code.
Why does this tool show 403 when the URL works in my browser?
Because the request comes from our servers, on a datacentre IP address, and a firewall or CDN can refuse that while allowing your browser. A status code is a response, not a fixed property of a URL. We report this as Blocked rather than Broken, because we genuinely cannot tell from one request whether the page refused access or the edge refused us. Check your CDN or WAF logs for the request, which carries an X-SearchOptimo-Tool header.
Can I check status codes as Googlebot?
Yes, pick Googlebot from the "Check as" list. Be aware of the limit: we send Googlebot’s user-agent string from a SearchOptimo IP address, not from a verified Googlebot IP. A firewall that allowlists Googlebot by verified IP will still block us, and one that blocks on IP reputation rather than user-agent will not fire for us at all. If you specifically need to know whether a crawler is being treated differently, use the Googlebot block tester, which requests each URL twice and diffs the two responses.
What is the difference between this and the redirect checker?
This tool gives you a flat table of many URLs and the code each one finally returns. The bulk redirect checker gives you the chain: every hop, its status, its destination, and whether the old URL landed on the new URL you intended. Use this one to audit a list, and that one to verify a migration mapping.
What is the difference between a 404 and a 410?
A 404 means the server cannot find anything at that URL, and it may be temporary. A 410 states the resource was removed deliberately and will not come back. Both are defined in RFC 9110. Google drops both from its index, and treats 410 as a slightly stronger signal, but the practical difference is small: use 410 when you are certain the URL is gone for good.
Does this tool detect soft 404s?
No. A soft 404 is a page that returns 200 while telling the user nothing was found, and identifying one reliably needs content analysis rather than a status check. We would rather say so than guess. Google Search Console reports soft 404s it has found on your site.
Why does the status code differ from what Search Console shows?
Search Console reports what Googlebot saw when it last crawled the URL, which can be days or weeks ago. This checker fetches the URL right now. A disagreement usually means the page changed since Google last looked, which is exactly the gap that makes status codes worth checking live.
Do you store the URLs I check?
We keep a count of how many URLs each IP address has checked today, so the fair-use cap can be enforced. The URLs themselves are not stored, and no results are saved or made public.

Check the whole list on a schedule

This page tells you what your URLs return right now. Status codes change without warning: a deploy breaks a route, a plugin adds a noindex, a CDN rule starts refusing crawlers. SearchOptimo checks your URLs against Google's live index on a schedule and tells you the hour a page drops out, rather than weeks later in Search Console.

How this page is maintained. The status-code behaviour described here was checked against RFC 9110 and Google Search Central on 30 July 2026. The checker sends a GET request, follows up to 10 redirects, and reads the final response only. We do not make claims about ranking impact that we cannot source, which is why this page describes crawling and indexing effects rather than promising rank changes.

Related tools: bulk redirect checker, bulk index checker, indexability checker, sitemap checker.