在开始接触网站 SEO 的时候,经常会听到有人说 301 重定向好,可以传递权重,302 没用。

之前一直都是只听别人这么说,但是从来都没有深入的了解过301和302的区别,以及为什么会有这种说法?这种说法到底对不对?

维基百科上的定义

301 永久重定向

301 Move Permanently 是HTTP协议中的一个状态码。可以简单地理解为该资源已经被永久改变了位置,通常会发送HTTP Location来重定向到正确的新位置。

举个例子来看:sample.com/a 301 到 sample.com/b

因为是 301 永久重定向,这个意思就是 a 链接已经没有存在的意义了,他所有的价值都会导向给 b。

所以对于搜索引擎来说 b 链接就是 a 链接了现在。所以 a 链接的权重会直接传递给 b 链接。这也就是常说的 301 对 SEO 有好处的原因。

而且 301 也是谷歌官方认为是将网站地址由 HTTP 迁移到 HTTPS 的最佳方法

302 Found

302 Found,原始描述短语为 Moved Temporarily,是HTTP协议中的一个状态码(Status Code)。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;换而言之,就是请求的资源暂时驻留在不同的 URI 下,故而除非特别指定了缓存头部指示,该状态码不可缓存。

302 是最常见的一种重定向方法,但同时也是现实与标准相矛盾的典型案例。

规范中规定 302 重定向不允许修改请求方式。也就是当一个 POST 请求返回了 302 时,按照规范仍然应该使用 POST 请求打开响应头中 Location 中的 URl。

但各家浏览器厂商在实现的时候并没有遵守这个规范,而是使用 GET 方式访问服务端响应头中的 Location 中的 URI。

各家浏览器厂商的这种操作间接的推动 HTTP 1.1 标准规范中推出了 303 和 307,来解决这个问题。事实上,现在大家再说的 302 其实就是标准规范中的 303。

303 See Other

303 See Other ,自 RFC 2616 (HTTP 1.1)起,用于在收到 HTTP POST 请求之后,进行 URL 重定向的操作。

即无论原请求是 GET 还是 POST,客户端收到服务端的响应后,必须使用 GET 方法重定向到新地址。

307 Temporary Redirect

307 Temporary Redirect 可以理解为一个临时的重定向。

307 和 302 重定向区别在于,307 约定客户端重定向之后不能改变原先的请求方法。

302 并不是临时重定向

当了解了 301、302、303、307 这些概念之后,你可能会发现之前自己的理解根本就不对。

302 其实并不是重定向,实际上 302 的响应状态码只是代表了“内容已经被移走”,除非响应头中包含了一个新的 URL,客户端才会进行重定向。

303 才是绝大部分 SEO 人员嘴里的 302。而且 303/302 的意思只是 “See Other”,也就是你找的东西被移走了,诺,但是我给你找到了。并没有 redirect 的意思在其中。307 才是正宗的”临时重定向“。

知道了这些概念没有用,重要的应该是在我们建站过程中,将这些知识应用起来。否则懂了也没有太大作用,对吧?除非你要用这个跟别人撕逼用=。=

301 重定向有什么缺点?

如果有人跟你说网站 SEO 重定向必须只能用 301 的话,那么我负责任的告诉你,他的技术不靠谱。

301 重定向有一个很重要的特性就是缓存,也就是为什么 301 叫永久重定向的原因。

举个例子,假设您本来是将 me.com 301 到 you.com。一段时间之后又决定要将 me.com 301 重定向到 us.com。那么后来的这个操作可能要花很长时间才能生效,因为搜索引擎会缓存原始重定向相当长的一段时间。

所以,当你要创建重定向的时候,要从长远的角度考虑,未来是否会修改这个重定向。如果不会修改,那么直接使用 301 就行。如果有可能需要修改的话,那么使用 301 重定向时,请禁止对其进行缓存。

下面是两种禁用缓存的方法:

  1. 在服务端响应头中添加 “Cache-Control:no-cache”(推荐这种方法
  2. 在重定向页面的 Header 中使用 “ Pragma:no-cache”

301和302的区别

相信看到这里,你已经知道 301 和 302 的区别了!

其实我们所说的 301 和 302 的区别,其实更多的是 301 和 307 的区别,也就是永久和临时重定向的区别。

301 是永久的重定向,搜索引擎会缓存这个重定向,也是 301 传递权重的一个原因。

307 就是临时重定向,意味着当前这个链接随时有可能取消重定向或者重定向到其他地方去,搜索引擎并不会缓存这个重定向。

而人们常说的 302 其实就是 303 或者 307。

以上~