All guides · SEO

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.

Learn more

Last updated October 24, 2026