Have you ever opened Google Search Console, seen “Server error (5xx)” or “Soft 404” next to dozens of your pages, and wondered whether your site was in trouble?
You’re not alone. HTTP status codes are the three-digit replies your server sends every time a browser or Googlebot asks for a page. Most of the time they’re invisible. But when they go wrong, they decide whether a visitor sees your page, whether Google keeps it in the index, and whether years of SEO work quietly disappear.
I’m writing this from experience. In September 2026, a server move left a single bad line in our own robots.txt file, and our search visibility dropped from about 26% to 4.3% in one day. Fixing it meant reading status codes, cache headers and crawl reports line by line. This guide is everything I wish every business owner knew before that kind of day.
You’ll learn:
- What HTTP status codes are and how the five classes work
- A plain-English table of every code you’re likely to see
- How Google treats each type of response, according to Google’s own documentation
- Which HTTP error codes actually hurt SEO, and which don’t
- How to check your status codes and a monthly checklist to stay safe
Quick answer: what are HTTP status codes?
HTTP status codes are three-digit numbers a web server returns with every response to say what happened to the request. The first digit sets the class: 1xx informational, 2xx success, 3xx redirection, 4xx client error and 5xx server error. They’re defined in RFC 9110, the current HTTP standard.
How a status code is created (in 5 seconds)
Every time someone opens a page on your website, a short conversation happens:
- The request: a browser or crawler asks your server for a URL, for example GET /services/.
- The server decides: it looks for the page, checks permissions, runs WordPress or your app, and talks to the database.
- The response: it sends back the page (or an error) with a status line such as HTTP/1.1 200 OK.
- The client reacts: a browser shows the page, follows a redirect or displays an error; Googlebot decides whether to index, follow, retry or drop the URL.
The status code is the server’s one-line summary of how that conversation went. Visitors rarely see it. Google always does.
The rules for these codes live in RFC 9110, “HTTP Semantics”, published in June 2022, which replaced the older RFC 7231 (RFC Editor).
The five classes of HTTP response codes
The first digit tells you almost everything.
| Class | Meaning | What it usually means for you | Example |
| 1xx Informational | The request was received; processing continues | Nothing to do; browsers and servers handle these | 103 Early Hints |
| 2xx Success | The request worked | The page loaded; Google can consider it for indexing | 200 OK |
| 3xx Redirection | The content is somewhere else | A redirect is in place; check it’s the right type | 301 Moved Permanently |
| 4xx Client error | The request can’t be fulfilled as sent | Missing pages, blocked pages or bad requests | 404 Not Found |
| 5xx Server error | The server failed on a valid request | Your hosting or application has a problem | 503 Service Unavailable |
A useful way to remember it: 2xx = here you go, 3xx = go over there, 4xx = you made a mistake, 5xx = we made a mistake.
The master table: HTTP codes you’ll actually see
These are the HTTP codes that show up in browsers, server logs, APIs, Search Console and SEO tools. Codes marked with a link have their own detailed guide in this series.
1xx: Informational
| Code | Name | Plain-English meaning |
| 100 | Continue | Keep sending the request; the server is listening |
| 101 | Switching Protocols | The server is switching protocols, for example to WebSockets |
| 103 | Early Hints | The server tells the browser which files to start loading early, to speed up the page |
2xx: Success
| Code | Name | Plain-English meaning |
| 200 | OK | The request worked and the content is returned. This is what every live page should send |
| 201 | Created | Something new was created, usually after a form or API POST (a new account, order or record) |
| 202 | Accepted | The request was received but will be processed later (for example, a queued export) |
| 204 | No Content | Success, with nothing to send back (common for “save” actions in apps) |
| 206 | Partial Content | Only part of a file was sent, for example while streaming a video |
3xx: Redirection
| Code | Name | Plain-English meaning |
| 301 | Moved Permanently | The page has moved for good. See 301 vs 302 redirects |
| 302 | Found | The page is temporarily somewhere else |
| 303 | See Other | Go get the result with a GET request, often used after a form is submitted |
| 304 | Not Modified | The copy you already have is still current, so nothing is resent |
| 307 | Temporary Redirect | Like 302, but the request method must not change |
| 308 | Permanent Redirect | Like 301, but the request method must not change |
4xx: Client errors
| Code | Name | Plain-English meaning |
| 400 | Bad Request | The request is malformed. See 400 vs 422 errors |
| 401 | Unauthorized | You need to log in (it really means “unauthenticated”) |
| 402 | Payment Required | Reserved for payments; rarely used and has no standard convention |
| 403 | Forbidden | The server knows who you are, but you don’t have access |
| 404 | Not Found | The page doesn’t exist at this URL. See 404 error guide |
| 405 | Method Not Allowed | The page exists, but not for this kind of request |
| 408 | Request Timeout | The server gave up waiting for the request |
| 409 | Conflict | The request clashes with the current state of the data. See 409 Conflict guide |
| 410 | Gone | The page was deleted on purpose and isn’t coming back |
| 413 | Content Too Large | The upload or request body is bigger than the server allows |
| 414 | URI Too Long | The URL is longer than the server accepts |
| 415 | Unsupported Media Type | The server doesn’t accept that file or data format |
| 418 | I’m a Teapot | A joke code from an April Fools’ RFC; not used in practice |
| 422 | Unprocessable Content | The request is well-formed, but the data fails validation. See 400 vs 422 |
| 429 | Too Many Requests | The client hit a rate limit |
| 431 | Request Header Fields Too Large | Headers (often cookies) are too big |
| 451 | Unavailable For Legal Reasons | The content can’t be shown for legal reasons |
5xx: Server errors
| Code | Name | Plain-English meaning |
| 500 | Internal Server Error | A generic failure on the server (often a plugin, theme or code error) |
| 501 | Not Implemented | The server doesn’t support this request method |
| 502 | Bad Gateway | A server in the middle got a bad response from the server behind it |
| 503 | Service Unavailable | The server is overloaded or in maintenance. See 503 Service Unavailable |
| 504 | Gateway Timeout | A server in the middle didn’t get a response in time |
Sources: MDN HTTP status reference and RFC 9110.
How Google treats each class of status code
This is the part most guides skip, and the part that matters most for your rankings. Here’s what Google’s own documentation says about how its crawlers react (Google Search Central).
2xx: eligible, not guaranteed
- A 200 or 201 passes the content on for indexing, but a 2xx doesn’t guarantee indexing. Quality and duplication still decide.
- A 202 makes Google wait a limited time before using whatever it received.
- A 204 gives Google nothing to index.
- If a 2xx page looks like an error page (empty, or saying “not found”), Search Console reports it as a soft 404.
3xx: follows up to 10 hops
- Google’s crawlers follow up to 10 redirect hops, then stop.
- 301 and 308 are a strong signal that the new URL should be the one shown in search.
- 302, 303 and 307 are a weak signal; Google often keeps showing the original URL.
- 304 tells Google the content hasn’t changed since it last crawled.
4xx: treated as “doesn’t exist”
- 400, 401, 403, 404, 410 and 411 are all treated the same: the content doesn’t exist. Indexed URLs that return them are removed over time, and Google crawls them less often.
- Google specifically says not to use 401 or 403 to slow Googlebot down.
- 429 is the exception: Google treats it as a sign of server overload, like a 5xx.
5xx: slows crawling, then drops pages
- 500, 502 and 503 make Google slow down crawling.
- Pages that keep returning server errors are eventually dropped from the index.
- Google says returning 500, 503 or 429 to slow crawling is fine for a couple of hours or one to two days, but if it sees these on the same URL for multiple days, the URL may be dropped (Google).
One rule worth memorizing: never let robots.txt return a 503. Google says it blocks all crawling of your site (Google). Google’s robots.txt specification spells out the timeline: for the first 12 hours it stops crawling entirely, then falls back on the last good copy of the file for up to 30 days. A 4xx on robots.txt does the opposite: Google treats it as if no robots.txt exists at all (Google).
Which HTTP error codes hurt SEO (and which don’t)
Not every red line in a crawl report is an emergency. Here’s how we prioritize errors when auditing a site, from most to least urgent.
| Priority | Status< | Why it matters | What to do |
| 🔴 Critical | 5xx on many pages | Google slows crawling and eventually drops pages | Fix hosting, plugins or code immediately |
| 🔴 Critical | 5xx on robots.txt | Google stops crawling the whole site | Make robots.txt return 200 |
| 🟠 High | 4xx on robots.txt | Google acts as if you have no rules, so anything you meant to block becomes crawlable | Make robots.txt return 200 |
| 🟠 High | 404 on pages you link to or list in your sitemap | Wasted crawl, broken user journeys, lost link value | Redirect or fix the links |
| 🟠 High | Redirect chains and loops | Google stops after 10 hops; users wait longer | Point every redirect straight to the final URL |
| 🟠 High | Soft 404s | Thin or empty pages that look like errors | Return a real 404/410, or improve the content |
| 🟡 Medium | 302s left in place for months | The old URL may stay in search instead of the new one | Switch to 301 if the move is permanent |
| 🟡 Medium | 403 on public pages | Google can’t index them | Allow access for unauthenticated visitors |
| 🟢 Low | 404 on URLs nobody links to | Normal; Google says this isn’t necessarily a problem | Usually leave alone |
| 🟢 Low | 410 on content you deliberately removed | Exactly what 410 is for | Nothing |
Google’s own Search Console help is clear: “404 responses are not necessarily a problem, if the page has been removed without any replacement” (Search Console Help). The 404s to fix are the ones you created: pages you still link to, list in your sitemap or that have backlinks.
And broken links are more common than most people think. Pew Research Center found that 38% of webpages that existed in 2013 were no longer accessible a decade later (Pew Research Center). Every site accumulates dead URLs over time; the job is to manage them.
Where you’ll see status codes in Google Search Console
The Page indexing report in Google Search Console groups pages by the reason they aren’t indexed. These are the status-code-related ones (Search Console Help):
| Search Console label | What it means | Related code |
| Not found (404) | Google got a 404 for this URL | 404 |
| Soft 404 | The page returns 200 but looks like a “not found” page | 200 that should be 404/410 |
| Server error (5xx) | The server failed, timed out or was busy | 500, 502, 503, 504 |
| Redirect error | A redirect chain was too long, looped, or pointed to a bad URL | 3xx problems |
| Page with redirect | A URL that redirects elsewhere; the target may be indexed instead | 301, 302, 307, 308 |
| Blocked due to access forbidden (403) | Google got a 403; Googlebot never logs in | 403 |
| Blocked due to other 4xx issue | Any other 4xx | 400, 405, 409, 422, 429 and others |
[IMAGE: Search Console Page indexing report, sensitive data blurred]
Learn how to connect your site in our guide to setting up Google Search Console for your Canadian business.
How to check the HTTP status code of any page
You don’t need to be a developer. Pick whichever method suits you:
- Browser developer tools: open the page in Chrome, press F12, click the Network tab, reload, and look at the Status column for the first row.
- Google Search Console URL Inspection: paste any URL from your site to see whether Google could fetch it and what it found.
- Command line: curl -I https://yourdomain.ca/page/ shows just the status line and headers. Add -L to follow redirects and see every hop.
- SEO crawlers: tools like Ahrefs Site Audit or Screaming Frog crawl your whole site and list every status code. On shared hosting, slow them down (we use about 5 requests per second) so the audit doesn’t overload your server and create the 5xx errors you’re looking for.
- WordPress plugins: Rank Math’s 404 Monitor logs missing URLs that real visitors and bots hit.
What our own site taught us about status codes
Status codes stop being theory the moment they cost you traffic. Three lessons from our own site in 2026: [CONFIRM 1 and 2]
1. One line can hide your whole site. After a server move, a robots.txt file on the new server contained Disallow: */wp-content/. That blocked Google from loading our theme files, scripts and every uploaded image, so pages couldn’t be rendered properly. Our Semrush visibility fell from about 26% to 4.3% in a single day. The status codes were all “200 OK”; the damage came from what we told Google not to fetch.
2. Caches can show Google an old version of the truth. Even after we fixed robots.txt, Google’s first refetch still pulled the blocking version. Our page cache was serving the old file to anonymous visitors (including Googlebot) while logged-in admins saw the fixed one. Only after purging every cache layer did Google see the clean file. Now /robots.txt is excluded from caching.
3. Your own tools can create 5xx errors. A full-speed site audit crawl on shared hosting made the server time out, and one cache script started returning a 504. The “errors” we were auditing for were being caused by the audit itself. Throttling crawlers to about 5 requests per second fixed it.
The common thread: always check what Google actually receives, not what you see when you’re logged in.
Your monthly status code checklist
Run this once a month, or after any migration, redesign or hosting change.
- Search Console Page indexing: any jump in “Server error (5xx)”, “Not found (404)” or “Soft 404”?
- Search Console Crawl stats: rising server errors or a sudden drop in crawl requests?
- robots.txt returns 200 and doesn’t block CSS, JS or images
- Your XML sitemap lists only URLs that return 200 (no redirects, no 404s)
- No redirect chains (A → B → C) or loops
- Temporary 302s that have become permanent are switched to 301
- Internal links point to final URLs, not redirects or 404s
- Rank Math (or your plugin) 404 log reviewed for URLs with real traffic
- Maintenance pages return 503 with a Retry-After header, never 200
- Hosting resource usage checked after traffic spikes or audits
For a broader review, use our technical SEO audit checklist, and before any redesign, our website redesign SEO checklist.
Go deeper: the HTTP status code series
Each guide covers causes, fixes and the SEO impact of one problem in detail:







