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.
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
| Verdict | What it means | What to do |
|---|---|---|
| OK | A success code, and nothing stopping Google using the page | Nothing |
| Check | It 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 200 | Confirm it is deliberate |
| Fix | It works today but is costing you something. Usually a success code carrying noindex, or a chain still redirecting at Google’s 10-hop limit | Change it |
| Broken | It does not work: 404, 410, another 4xx, a 5xx, a hostname that does not resolve, a refused connection, or an invalid certificate | Fix before you ship |
| Blocked | We could not get a reliable reading. A 403 of unknown cause, a 429, a bot-protection challenge, or a timeout | Treat 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.
| Signal | What it looks like | Effect on indexing |
|---|---|---|
| meta robots noindex | <meta name="robots" content="noindex"> in the page body | Google drops the page from its index, or never adds it |
| X-Robots-Tag noindex | An X-Robots-Tag response header carrying noindex or none | Same as above, and invisible unless the tool reads response headers |
| Canonical pointing elsewhere | A rel=canonical naming a different URL | Google is asked to index that other URL instead of this one |
| Soft 404 | A 200 on a page that says nothing was found | Google 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.
| Symptom | Likely cause | What we report |
|---|---|---|
| 403 in this tool, 200 in your browser | A firewall or CDN refusing our datacentre IP address, rather than the page refusing everyone | Blocked, with the ambiguity stated. Never Broken |
| 429 Too Many Requests | Rate limiting, sometimes triggered by checking many URLs on one host at once | Blocked. Re-run with fewer URLs |
| 503 with a challenge page | Bot protection serving an interstitial instead of passing the request to the origin | Blocked, 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.
| Code | Name | What it means for Google | What to do |
|---|---|---|---|
| 200 | OK | Indexable, if nothing else blocks it | Nothing |
| 301 / 308 | Moved Permanently / Permanent Redirect | Strong signal to treat the target as canonical | Correct for a permanent move |
| 302 / 307 | Found / Temporary Redirect | Weak signal. The original URL stays canonical | Switch to 301 if the move is permanent |
| 304 | Not Modified | Content unchanged since the last crawl | Nothing. A caching response, not an error |
| 401 | Unauthorized | Cannot be crawled or indexed | Expected on staging. A problem on a public page |
| 403 | Forbidden | Cannot be crawled | Check whether your CDN or firewall is refusing crawlers |
| 404 | Not Found | Dropped from the index after repeated crawls | Redirect to the closest equivalent, or leave it if the removal is intended |
| 410 | Gone | Same as 404, and states the removal is deliberate | Use when you want the URL gone for good |
| 429 | Too Many Requests | Google slows its crawl rate | Check your rate limiting is not throttling Googlebot |
| 500 / 502 / 504 | Server errors | Crawling stops, and the page can be dropped if it persists | Fix these first: nothing else on the list matters until they are resolved |
| 503 | Service Unavailable | Treated as temporary, so the page is retained for a while | Correct 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
noindexor 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.