301 和 302 的选择

在 web 开发的世界中,我们常用的两种 redirect status code301302,先来看看他们简单的区别。

301

tells the search engine that the page has moved permanently to the new URL

302

tells the search engine that the move is only temporary, and you may decide to show content at the original location in the future without a redirect

根据上面的解释我们可以发现,其实当我们进行页面转跳的时候使用 301 和 302 都是可以工作的,它们的区别更多的是在语意方面的。但是对于搜索引擎来说,使用这两种转跳方式,却会对收录的结果造成很大的影响。

301 redirects

主流的搜索引擎对于 301 的处理方式是相同的,即忽略掉原始的 URL 然后对目标 URL 进行索引。因此当一个网站的域名进行更换的时候,我们都会选择 301 跳转。

301 redirects

对于 302 跳转来说就会更多样化一些,以 Google 为例,处理 302 转跳会分为两种模式。

  1. on-domain redirect 加入对页面 http://www.example.com 使用 302 转跳到 http://abc.example.com/index.jsp?c_id=oak。我们 Google 中搜索 abc example 的时候,结果的链接会是 http://www.example.com。这正是我们需要的 302 工作的方式。

  2. off-domain redirect 但是当转跳的页面的域名发生了变化的时候,在大多数情况下,Google 会以 301 转跳的方式来处理它。也就是说,最后收录的页面的 URL 是目标地址,这可能会和我们的预期有一定的偏差。前面提到说是大多数情况下,因为 Google 有时会去验证 302 的合法性,然后收录原始的 URL。

也就是说使用 302 的时候搜索引擎收录的结果会有不确定性,这是我们在写代码的时候要注意的,合适的 status code 对于搜索引擎的收录也是有影响的。

redirect_to in Rails

我们在 Rails 中常用到的 redirect_tostatus code 是多少呢,答案是 302。之所以将 302 设置为默认的值是因为通常我们的转跳都是 on-domain redirect。而当我们的页面需要做永久的重定向的时候,记得声明 status code 为 301