Skip to content

HTTP status codes

Also called HTTP response codes, status codes

What are HTTP status codes?

HTTP status codes are three-digit numbers a web server sends with every response to say what happened to the request. 2xx means success, 3xx means the content is elsewhere (a redirect), 4xx means a problem with the request, such as a missing page, and 5xx means the server failed. Search engines use them to decide what to crawl and index.

The ones that matter most for SEO: 200 OK, the page loaded. 301 and 308, permanent redirects. 302, 303 and 307, temporary redirects. 304 Not Modified, the page has not changed since the crawler last saw it. 404 Not Found and 410 Gone, the page does not exist. 429 Too Many Requests, the server is rate-limiting. 500, 502, 503 and 504, server errors.

Why HTTP status codes matter for SEO

Status codes are instructions to crawlers. Google indexes content from 2xx responses, follows 3xx redirects, drops URLs that return 4xx from the index over time, and slows crawling when it sees 5xx or 429. Google treats all 4xx codes other than 429 the same way, so 404 and 410 both remove a page.

Wrong codes cause real problems. A missing page that returns 200 becomes a soft 404. A permanent move done with a 302 keeps the old URL indexed. A server that returns 500 during busy periods gets crawled less. Checking codes across the whole site is the backbone of any technical SEO audit.

How to check HTTP status codes

  1. For one URL, open your browser’s developer tools (Network tab) and reload, or run `curl -I https://example.com/page`.
  2. For a whole site, crawl it and group pages by status code.
  3. In Google Search Console, the page indexing report lists URLs Google saw as 404, soft 404, redirect or server error, and the Crawl stats report breaks requests down by response.
  4. Fix in order: 5xx first, then broken internal links to 4xx pages, then redirect chains and wrong redirect types.

HTTP status codes example

Common codes
200 OK                   page served, can be indexed
301 Moved Permanently    permanent redirect (308 is equivalent)
302 Found                temporary redirect (307 is equivalent)
304 Not Modified         unchanged since last crawl
404 Not Found            page missing
410 Gone                 page removed on purpose
429 Too Many Requests    rate-limited; Google slows down
500 Internal Server Error
503 Service Unavailable  temporary; use with Retry-After

HTTP status codes FAQ

Which HTTP status codes matter for SEO?

200, 301, 302, 404, 410, 429 and 503 are the ones you will deal with most. They decide whether Google indexes a page, follows it elsewhere, drops it or slows down.

Is 404 or 410 better for removed pages?

Google treats them the same: both lead to the URL being dropped from the index. Use 410 if you want to say the removal is deliberate.

Related SEO terms

  • 301 redirect

    A 301 redirect permanently sends visitors and search engines from one URL to another and tells Google the new URL should be indexed.

  • 302 redirect

    A 302 redirect temporarily sends visitors to another URL while telling search engines to keep the original URL indexed.

  • 404 error

    A 404 error is the HTTP status a server returns when a requested page does not exist. It is normal, but broken links to 404s are worth fixing.

  • Soft 404

    A soft 404 is a page that returns a 200 success code but looks like an error or empty page, so Google treats it as not found.

  • 5xx server errors

    5xx server errors are HTTP status codes meaning the server failed to handle a request. Persistent ones make Google crawl less and drop pages.

  • Redirect chain

    A redirect chain is when a URL redirects to another URL that redirects again, so it takes two or more hops to reach the final page.

  • Crawling

    Crawling is how search engines discover pages: automated bots fetch URLs and follow the links on them to find more pages.

Back to the SEO glossary

Put the terms to work

Every term here is something OpenSEO measures. It is open source: start online in a minute, or run it on your own server.