HTTP status codes and SEO
Every HTTP response starts with a three-digit status code that tells the client what happened. Browsers often hide it, because a page can look fine to a person while the server reports an error. Search engine crawlers read the status code first and decide what to do with the page based on it.
| Range | Meaning | Examples |
|---|---|---|
| 2xx | Success | 200 OK |
| 3xx | Redirect | 301 Moved Permanently, 302 Found, 308, 307 |
| 4xx | Client error | 403 Forbidden, 404 Not Found, 410 Gone |
| 5xx | Server error | 500 Internal Server Error, 503 Service Unavailable |
Why it matters
Search engines only index pages that load successfully. A page that answers with a 4xx code is treated as missing and is eventually dropped from search results, no matter what its content says. A 5xx code tells crawlers your server has a problem: Google slows down crawling, and pages that keep returning server errors can drop out of the index.
The reverse is a problem too. An error page that returns 200 OK (a “soft 404”) wastes crawl time and
can show up in search results as an empty or useless page.
What we check
We request the URL you entered, follow its redirects, and look at the status of the final response:
| Result | Final status |
|---|---|
| Pass | any 2xx code (normally 200 OK) |
| Fail | anything else: 4xx, 5xx, or a 3xx that does not lead to a final page |
We follow at most five redirects. A redirect loop, a longer chain, or a redirect without a Location
header ends on a 3xx response and fails this check. The chain itself is covered in the
redirect chains guide.
How to fix
Find out what the server actually returns. Check with curl, which shows the status and every redirect:
curl -sIL https://example.com/page
404 Not Found on a page that should exist. Check that the URL is spelled correctly, including trailing slashes and letter case. CMS permalinks, rewrite rules and deployments that dropped a route are common causes.
404 on a page that moved. Add a permanent redirect from the old URL to the new one. In Nginx:
location = /old-page {
return 301 /new-page;
}
In Apache:
Redirect 301 /old-page /new-page
403 Forbidden. File permissions, an .htaccess rule, or a firewall or bot-protection service
blocking automated requests. If you block bots, make sure you are not also blocking search engine
crawlers. Our scanner identifies itself as PerfoMetrixBot; a 403 for us can be a sign that other
legitimate clients are blocked too.
5xx server errors. Check your application and server logs for the failing request. Typical causes
are crashed application processes, exhausted database connections, timeouts to upstream services,
or a misconfigured proxy (502 Bad Gateway, 504 Gateway Timeout).
Planned maintenance. Return 503 Service Unavailable with a Retry-After header, not 200 with a
maintenance message and not a 404. Crawlers treat 503 as temporary and come back later:
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Do not keep a page on 503 for long: if it lasts more than a few days, search engines may start treating it as a lasting error.
Pages that are really gone
For content you removed on purpose with no replacement, 404 Not Found or 410 Gone is correct.
Both tell search engines to drop the URL; 410 states that the removal is intentional. Do not
redirect every removed page to the home page: search engines may treat such redirects as soft 404s
anyway, and visitors land somewhere they did not expect.