You restructure a site, set up redirects, and traffic drops. The pages all load, the redirects all work, and a visitor would notice nothing. A crawler noticed a digit.
The redirects
301 Moved Permanently. This URL is gone and this other one replaces it, forever. Search engines transfer the accumulated ranking signals to the target and eventually drop the old URL from the index. This is what you want for a restructure, a domain change, or consolidating duplicate pages.
302 Found and 307 Temporary Redirect. This URL is fine, go here for now. The original stays indexed and keeps its signals, because you have said it is coming back.
Using a 302 for a permanent move is the mistake, and it is easy to make because many frameworks and hosting panels default to it. The redirect works, the visitor arrives, and the ranking never transfers.
308 is to 307 what 301 is to 302: permanent, and it additionally guarantees the request method is preserved, which matters for POST.
The missing pages
404 Not Found. There is nothing here. A crawler will retry occasionally before dropping it.
410 Gone. There is nothing here and that is deliberate. Crawlers treat this as more final and drop the URL faster. Worth using when you have retired content rather than lost it.
The soft 404 is the one that causes real trouble. A page that does not exist returns a friendly "sorry, we could not find that" message with a 200 OK status. To a visitor it reads as a missing page. To a crawler it is a page that exists and contains that text, so it stays indexed, and a site can accumulate thousands of near-identical thin pages that way.
If it is missing, the status must say so. The visible message is separate from the code.
The ones that mean something is wrong
403 Forbidden. The server understood and refuses. If a crawler sees this on pages that should be public, check whether a firewall or bot rule is blocking it by user agent, which is worth confirming with a user agent parser against your access logs.
500 Internal Server Error. Something broke. Persistent 500s on indexed URLs will eventually cost you those URLs.
503 Service Unavailable. Temporarily down, and the correct code for planned maintenance. Paired with a Retry-After header it tells crawlers to come back rather than to conclude the page is broken.
429 Too Many Requests. Rate limited. Returning this to a crawler slows crawling, which is sometimes intentional and often not.
The quieter ones
304 Not Modified is a success. The client asked whether its cached copy is still current, the server said yes, and no body was sent. A lot of 304s in your logs means caching is working.
204 No Content succeeded with nothing to return, which is the right answer to a delete.
206 Partial Content is a range request, which is what makes resumable downloads and video seeking work.
The content type matters too
A correct status with the wrong Content-Type still fails. A JSON endpoint serving text/html will be parsed as a page; a PDF served as application/octet-stream downloads instead of opening.
And the header can be wrong about the file itself. As covered in three kinds of escaping, the real type is determined by the magic bytes rather than by the header or the extension, so a MIME checker is what settles an argument about what a server actually sent.
Checking a URL before you debug it
Before assuming a status code is wrong, confirm you are requesting what you think you are. Trailing slashes, query parameters, protocol and subdomain all produce different URLs that redirect differently, and a URL parser showing the components separately resolves that faster than reading the string.
For the codes this page does not cover, the HTTP status code reference is searchable by number or name and explains each one in the same plain terms.
Two habits that prevent most of this:
- When moving a page, use 301 and point it at the final destination, not at another redirect.
- When retiring a page, return 404 or 410, and make sure the friendly message is not returning 200.
Both are one-line changes that are invisible if you get them wrong and expensive for months afterwards.