My Tool Studio
SEO Tools·4 min read

Checking Status Codes for SEO: What URLs Really Return

Checking status codes is the SEO audit habit that pays back the most for the least effort, because the number a server returns decides what search engines do with a page before its content matters. A 200 gets crawled and considered, a 301 forwards its signals, a 404 gets dropped, a 503 asks the crawler to come back later. The catch is that what a URL returns and what you believe it returns drift apart constantly, especially after deploys. This guide shows how to check what's really coming back, and how to read the answers the way a crawler would.

HTTP headersFoundStatus200 OKServernginxTypetext/htmlCachemax-age

The deploy that turned twelve 200s into 302s

Nothing looked broken.

A team ships a routing refactor on Thursday. Every page still loads fine in the browser, so QA signs off. What nobody notices: twelve category pages now pass through a 302 before rendering, because a fallback route catches them first. Browsers hide the hop completely. Weeks later those pages start slipping, since a 302 tells Google the move is temporary and it may keep the old URL indexed.

Eyes can't catch this class of bug; the rendered page looks identical either way. Only the status line gives it away, which is why a status check belongs in the post-deploy routine next to the visual smoke test.

Checking status codes for SEO, not just uptime

What each result row tells you.

Paste one URL or up to 100, one per line, into the HTTP Status Code Checker and click Check status. Requests go from our server using the HEAD method, with a GET retry when a server refuses HEAD, so there's no browser cache, no session cookie and no extension in the way. The answer is the logged-out view a crawler gets. URLs are checked four at a time, and each row shows the first status code, how many redirects followed, the code the chain ends on, and the time taken.

Click a row and it opens to show every hop with its code and meaning. Check a single URL and you also get the full list of response headers from the final page. That's where quiet problems hide, such as an x-robots-tag: noindex header that removes a page from search without any visible change to its HTML. Download CSV or Excel saves all the rows with their redirect chains for a spreadsheet or a ticket.

A worked status check: /pricing wasn't what it seemed

Ten seconds, one finding.

Check https://example.com/pricing and the row reads 301, then 1 redirect, ends in 200. Open it and the hops are #1 301 Moved Permanently for https://example.com/pricing and #2 200 for https://example.com/pricing/. The server enforces trailing slashes, and every internal link written without one spends a redirect on every click and every crawl.

Because this was a single URL, the headers from the final page appear below: content-type: text/html; charset=utf-8 and no x-robots-tag anywhere. That's a clean bill of health for the page itself. The action item from a minute of checking: update internal links to the slashed form so the 301 stops taxing them.

The codes crawlers care about, in order of urgency

Not all numbers are equal.

A 200 is the goal. A 301 is healthy at a migration boundary and wasteful inside your own navigation. A 302 is fine for a temporary situation and quietly harmful when it's doing a 301's permanent job. Result badges are colored by class, green for 2xx, the accent color for 3xx, amber for 4xx and red for 5xx, so a long list sorts itself visually.

Among errors, 404 is honest and Google handles it well, though every 404 with backlinks is value leaking away. A 410 says gone on purpose and may be dropped slightly faster. The dangerous ones are 5xx and 429: repeated 500s, 503s or rate limits tell Google the server is struggling, and it slows crawling to compensate. A 503 is the right code for planned maintenance; one that lasts for days starts costing rankings.

Soft 404s: the 200 that behaves like an error

The code and the content disagree.

A soft 404 is a page where the server says 200 but the content says nothing: an empty search result, a category with no items, or an error template sent with a success code. Google looks at the content, recognizes the emptiness, and reports it as a soft 404 in Search Console.

A status checker shows the 200, so this is the one failure it can't catch on its own. When a page you expected to be thin returns 200, that's the cue to look at what's actually rendered, then either fill the page or return an honest 404.

Habits that make a status audit trustworthy

Four rules of thumb.

First, test from outside your own browser. Logged-in sessions hide the 401s and 403s that anonymous crawlers hit, and browser caches replay old redirects. Second, keep a short list of the ten or twenty pages that earn the traffic, and paste it in after every release; regressions cluster around deploys. After a migration, paste the old URLs from the redirect sheet and confirm each ends in 200 on the right address.

Third, read past the code. A perfect 200 can carry an x-robots-tag header that noindexes the page. Fourth, know the method's limits. A few servers answer HEAD differently from GET, with 405 or 403; the checker retries those with GET, but bot protection can still challenge its fixed user agent. If a page loads in a browser but fails here, look at the firewall rules before assuming it's broken, since rules that strict can block real crawlers too.

HTTP Status Code Checker or one of its neighbors

Close relatives, different questions.

The HTTP Status Code Checker answers what a list of URLs returns right now, with every hop and, for a single URL, the headers. When one chain needs judging rather than listing, the Redirect Checker traces it and gives verdicts on loops, long chains, 302s and extra HTTPS or www hops. When you've found a wrong answer on an Apache server, the Htaccess Redirect Generator writes the corrected rules. And when a code number itself is the mystery, the HTTP Status Codes List explains what each one means.

Try it now

Open HTTP Status Code Checker

The tool is one click away. No sign up, no upload, no payment.

Open HTTP Status Code Checker