As an SEO, I spend a lot of my time discussing redirects, specifically 301 redirects and 302 redirects. Talking about redirects with marketing managers and e-commerce directors can be a complete powerdown for all parties involved. There have been times where I have actually seen someone’s eye go crossed while I was babbling on about temporary this and permanent that.
It’s not easy explaining redirects without losing your audience, as header status codes and redirects are not the most compelling subjects. To avoid those terrible scenarios, most SEOs simply tell their clients, “301 redirects are good, and 302 redirects are bad.” 99.99% of the time, that’s all that anyone needs to know. And regardless of whether or not anyone really knows the reasoning behind that claim, the fact is that everything almost always works better for SEO by using 301 redirects.
But I say we can’t stop there. Why restrict the boring nature of a redirects to verbal conversations only? I say we must take this exhausting topic to the blog! We need to have it down in writing! We must dive deeper into the topic of redirects! That’s what I say. So without any further ado, I’d like to get started on this long-awaited, long-winded topic: HTTP Status Codes, specifically the 3xx series. Here is a brief summary of the 8 HTTP status codes from the 3xx series:
- 300 Multiple Choices
Indicates multiple options for the resource that the client may follow. It, for instance, could be used to present different format options for video, list files with different extensions, or word sense disambiguation.
- 301 Moved Permanently
This and all future requests should be directed to the given URI.
- 302 Found (aka Object Moved aka Moved Temporarily)
This is the most popular redirect code, but also an example of industrial practice contradicting the standard. HTTP/1.0 specification (RFC 1945 ) required the client to perform a temporary redirect (the original describing phrase was “Moved Temporarily”), but popular browsers implemented it as a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307 to disambiguate between the two behaviors. However, the majority of Web applications and frameworks still use the 302 status code as if it were the 303.
- 303 See Other
The response to the request can be found under another URI using a GET method. When received in response to a PUT, it should be assumed that the server has received the data and the redirect should be issued with a separate GET message.
- 304 Not Modified
Indicates the resource has not been modified since last requested. Typically, the HTTP client provides a header like the If-Modified-Since header to provide a time against which to compare. Utilizing this saves bandwidth and reprocessing on both the server and client, as only the header data must be sent and received in comparison to the entirety of the page being re-processed by the server, then resent using more bandwidth of the server and client.
- 305 Use Proxy
Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons.
- 306 Switch Proxy
No longer used.
- 307 Temporary Redirect
In this occasion, the request should be repeated with another URI, but future requests can still use the original URI. In contrast to 303, the request method should not be changed when reissuing the original request. For instance, a POST request must be repeated using another POST request.
How about that? I bet you didn’t know that there were actually eight unique status codes for redirects. If you read through that list, you may have noticed that, technically, the 307 is the Temporary Redirect. The 302 is actually listed as Found or Moved. Furthermore, they had to create the 303 and 307 responses after various browsers were interpreting the 302 differently. Fascinating, right? I wonder how many SEO’s actually know about the subtle differences between a 302 and a 307.
But let’s not stop there. Apparently, it looks like the 303 is actually what most SEOs talk about when they speak of a 302 temporary redirect. Ian McAnerin describes it very well on his blog, so I borrowed this next part from him:
In reality, a 302 just means “Object Moved”, or “Found”, which, if accompanied by a target URL, browsers and servers interpret as a redirect. But with no target URL, they will happily stay there, and it’s not an error.
In reality, a 303 is what most SEO’s think a 302 is. A 303 means “See Other”. A 307 is the actual Temporary Redirect. It really means temporary, as in the very next request should also be made to the old URL, and the new one should not even be cached. This is usually only used for emergency redirects (like when a primary server is down) and the like.
A 302 doesn’t dictate a redirect, it just says that what you were looking for moved, and it’s been found there. You are usually redirected only as a courtesy and for usability purposes. Technically, you should use a 303, which really does the job properly.
How about that? Can you believe it? Have you even heard of a 303 redirect? It’s crazy, huh?
If you’re still with me, I know this information is probably news to you. Or your eyes have glazed over with the inspirational information in this post. I mean, this stuff is obviously rocket science. At any rate, the good news is that you don’t really need to have an in-depth knowledge of these redirects (well, unless you run into someone who might dismiss you because you don’t know this stuff) because it’s true that 301 redirects do take care of everything 99.99% of the time. The other good news is that now you know about all of the redirect status codes. Now go forth and 303. Er, uh, I mean 301. Or was it 307? 🙂