在优化网站的时候,301 重定向是站长们必不可缺的一项优化,而 301 重定向主要用于将内容从一个位置移动到另外一个位置。其实,在理解上也是非常简单的,比如我在 http://www.abc.com/a.html 上有一些内容,接着我想重构网站,于是我想把此页面上的内容移动到 http://www.abc.com/b.html 上。所以,我可以实施 301 重定向将这个页面的所有指标全部转移到另一个页面上。

可能有人会问,为什么非要给重构的网站做 301 重定向? 首先做 301 重定向之前要明白一点,重定向不仅对用户很重要,而且对于搜索引擎也是很重要的,当网站改版后并通过实施 301 重定向, 可以让用户或搜索引擎访问旧版页面不是 404 错误页面,而是成功访问新版本的页面,还可以让搜索引擎知道你是何时移动内容的,所以才会给需要重构的网站做 301 重定向。

301配图.jpg

为什么今天谈 301 重定向的问题呢? 之所以谈这个问题也是因为之前在分析诊断企业网站时,发现了各种各样的 301 重定向问题:比如企业网站重构后没用对旧版本的页面重定向到新版本,导致重构后的网站出现大量的 404 错误页面,而且网站也因为这些 404 页面导致权重流失、降权。

另外,在设置 301 重定向的时出现设置错误或不知道该怎么去设置等情况。笔者发现很多企业的站长对 301 重定向认识不够、操作错误等。下面针对这个问题做一些整理,希望可以帮助到中小型企业站长正确、有效的设置 301 重定向。

 一、 301 重定向的作用

301 重定向的作用有很多,平时站长在做 301 重定向的时候,一是为了 URL 规范化并集中权重不让权重分散、二是为了网站改版,将旧版本的页面的所有指标全部转移到新版本的页面上。而实施 301 重定向可以做到这些,在作用上也是非常的强大,也建议中小企业的站长有效的利用 301 重定向给网站带来的作用。

 二、在什么情况下必须做 301 重定向

以下五种情况是必须要做 301 重定向的,当然如果这五种情况都没有发生的话可以选择不做,下面详细的介绍一下。

①:网站的旧内容过期并被删除掉

网站的一些内容过期了,所以要被删掉了,如果还想留着可以通过 301 重定向实现。

②:网站有一些具有链接和流量的无效 URL

如果你发现这些无效的 URL 还有流量权重,可以通过 301 重定向重新生成页面。

③:网站更换了主机托管公司

如果网站更换了主机托管公司,不影响用户查找网站内容的任何 URL 的情况下,可以不需要做 301 重定向。

④:网站更换程序

网站进行较大的改版,网站程序需要更换,此时会影响很多 URL,可以通过 301 重定向来解决。

⑤:网站实施 URL 规范化

网站默认的 URL 分:

1 、 abc.com

2 、 www.abc.com

3 、 abc.com/index.html

4 、 www.abc.com/index.html

为了进行网址规范化和不分散权重,通常只出现一个标准的 URL,我们可以通过 301 重定向来实现。例如:我的网站网址只出现 http://www.abc.com/的 URL,我可以将其他三个 URL 通过 301 重定向到这个 URL 上,这样以来就不会分散权重了,可能带 index.html 后缀的 URL 做 301 重定向容易出现死循环,为了避免这样的情况也是有解决办法的,下面会详细讲解的。

⑥:网站因为各种原因而改变现有内容的 URL

可能企业网站因为各种各样的原因而改变了现有内容的 URL,这种情况的发生是站长没法预测到的,如果这种情况发生了而改变了 URL,建议通过 301 重定向来解决,尽力避免死链接的出现。

总结上述需要注意:并不是所有的情况都是需要做 301 重定向的; 但是,任何 URL 的更改都是需要做 301 重定向的。原因很简单,为了避免出现 404 错误页面而导致不该发生的情况发生。

  三、做 301 重定向的注意事项

当 301 重定向实施完之后,旧版本页面跳转到了新版本页面,或网址规范化了再或者其他的,大部分的站长都不会注意到 301 的 HTTP 状态是否返回成功。就在此时,可能有些网站的 301 重定向不传递状态或者出现 404 错误的状态码,这样容易造成任何情况下做的 301 重定向无法达到效果。笔者认为,想要正确的、有效果的做 301 重定向,一些细节还是需要注意的。

例如:404 错误 (页面未找到) 或者 200 OK(页面成功加载);301(返回 301 状态码成功)

正确的 HTTP 状态码:

错误的 HTTP 状态码:

总结上述需要注意:如果遇到这种情况也是一个被重视的问题,所以要避免这样的问题发生,如果站长在做 301 永久重定向后,一定要确保 HTTP 状态是返回 301,如果 HTTP 状态码不是返回的 301 状态码而是 200 或 404 再或者是其他的状态码,那么 301 重定向应该未操作成功,建议站长检查是哪点出的问题然后解决。

四、 301 永久重定向后权重会不会叠加

301 永久重定向后权重会不会叠加呢? 很多站长都在考虑这个问题,部分站长想通过这种途径来投机取巧。 301 永久重定向后权重是可以叠加的,但权重不会相加。那么,什么样的网站做 301 重定向权重是可以叠加的,什么样的网站做 301 重定向权重是不能叠加的? 下面详细的说明一下。

①:两个相同的网站做 301 重定向是可以叠加权重的,但权重不是全部转移过来,而且要看站点符不符规则,一般来说权重再转移的时候会损失一部分。

②:两个不相同的网站做 301 重定向是不可以叠加权重的,为什么呢? 如果两个网站一点也不相同,权重不仅不会转移过来,而且百度也不愿意这么做,所以两个不相同的网站没法传递权重和叠加权重。

 五、 301 重定向和 302 重定向的区别

重定向的方法其实是有很多的,但不同的方法会出现不同的结果,而且区别也是非常大的。目前,根据 WEB 服务器返回给浏览器的 HTTP 状态码,重定向主要分为 301 永久重定向、 302 临时重定向,两种重定向是根据不同情况来做的,下面就详细的对两种重定向详细的说明一下。

①:301 永久重定向

首先,301 永久重定向。这个状态码告诉用户、搜索引擎、浏览器,该资源已经永久性的移动到另一个位置 (旧版本页面永久重定向到新版本页面),而且没有恢复原位的打算。 301 永久重定向最适合目录转移,推荐使用 301 重定向!

②:302 临时重定向

然后,302 临时重定向。这个状态码告诉用户、搜索引擎、浏览器,该资源已经暂时性的移动到另外一个位置 (旧版本页面临时重定向到新版本页面),这种移动不会当作永久性,而且会恢复原来的位置,但一些情况下适合使用 302 重定向。

302 重定向对手机站优化是有一定的好处,百度官方给的建议:比如减少内容死链,如果没有内容,最好通过 HTTP 状态码指定,如 404 、 403 等; 如果内容死链希望重定向到首页,最好通过 302 跳转,不要使用 javascript 跳转。此时可以发现 302 重定向对手机站优化是有好处的。

注意:两种形式的重定向都会将用户、搜索引擎发送到新的位置 (页面),但搜索引擎对待这两个 HTTP 状态码却不同。当搜索引擎看到 301 状态码的时候,会判断旧版本页面将权重或任何其他的指标永久转移到新页面。当搜索引擎看到 302HTTP 状态码的时候,会假设它不应该将旧页面的历史链接跟权重转移到新的页面,意思是转移后还是会转移回来的。另外,如果做 301 永久重定向,会导致搜索引擎从索引上 (百度、谷歌) 删除旧页面并用新页面代替。

六、 301 永久重定向首页索引文件,如何避免出现循环

做优化的站长都应该知道,绝大部分网站的首页 URL 都是以 http://www.abc.com/index.html 的形式表现,但一般都是输入 http://www.admin5.cn/访问首页。而此时首页出现了两个的版本的 URL,给网站带来的影响则是分散链接权重。可能有站长会想到网址规范化。是的,没错,通过网址规范化即可实现一个标准的 URL 表现形式。

大部分的站长看到这种情况都会通过 301 永久重定向将 http://www.abc.com/index.html 重定向到 http://www.admin5.cn/上,然后通过 301 永久重定向修复 URL 。但是,如果站长没有正确的实施 301 重定向,通常 301 重定向的问题会扩大,比如出现死循环现象。

默认文档重定向解决方案:

①:将 index.php 的内容复制到另外一个文件,比如 a.php 文件。

②:为文档目录创建一个 Apache DirectoryIndex 指令,将该质量的目标设置为 a.php,不要在全服务器级别上设置该指令; 否则,它可能造成其他仍然需要使用 index.php 作为目录索引的文件夹的问题。

③:在文档根目录下的.htdaccess 文件中放入:DirectoryIndex a.php 或者,如果不使用各个目录中单独的上下文文件,可以在.htdaccess 中放入以下内容:DirectoryIndex a.php

④:清除原始 index.php 文件内的内容,插入如下代码:

总结上述需要注意:这样的设置让 index.php 不再是目录索引文件,也就是默认文件名。它在用户输入规范 URLhttp://www.abc.com/时会强制读取 a.php,那么任何从旧链接到 index.php 的请求现在都进行了 301 重定向然后避免无限循环。

 七、如何实施 301 重定向

①:虚拟主机

Linux 虚拟主机设置 301 跳转方法:

在本地新建一个文本文件,最好用的专业的编辑器软件如 EditPlus 将代码粘入

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www.abc.com$ [NC]

RewriteRule ^(.*)$ http://www.abc.com/$1 [R=301,L]

说明:上述规则是将站点所以访问域名都重定向到 www.abc.com(规则中的域名请修改为自己的域名),如果仅想将绑定在站点上某个域名 (如:www.123.com) 重定向到 www.abc.com,规则如下:

RewriteCond %{HTTP_HOST} ^www.123.com$ [NC]

RewriteRule ^(.*)$ http://www.abc.com/$1 [R=301,L]

如果有多种需求,如 abc.com 跳转到 www.abc.com qwe.com 跳转到 www.qwe.com,规则如下:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^abc.com$ [NC]

RewriteRule ^(.*)$ http://www.abc.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^qwe.com$ [NC]

RewriteRule ^(.*)$ http://www.qwe.com/$1 [R=301,L]

根据自己的需要进行添加修改,然后上传到服务器 wwwroot 目录,改名为.htaccess 即可

win 虚拟主机设置 301 跳转方法:

手动设置的 (没有自动生成)

1 、进入主机控制面板,进入 ISAPI 筛选器设置,点击"开启自定义 URL 静态化支持"按钮。

2 、待开启伪静态功能后,进入 FTP 文件管理,找到 othersdiscuzhttpd.conf 修改这里面的规则。

3 、示例代码:

RewriteCond %{HTTP:Host} ^abc.com$

RewriteRule (.*) http://www.abc.com$1 [NC,R=301]

#第一条表示要做跳转的域名,第二条表示要跳转到的域名

#如果有很多域名要做跳转,那么可以将第一条规则改为

RewriteCond %{HTTP:Host} !^www.abc.com$

这样,就表示非 www.abc.com 的域名访问都会跳转到 www.abc.com #多个域名做跳转的第二种方法是,首先复制多个 RewriteCond 项,将域名改好 除了最后一项,其余的 RewriteCond 项最后都要加个参数 [OR] 即可。

注意:现在很多虚拟主机都自带 301 的配置,可以在主机控制面板上生成代码信息,然后按照上面的提示进行 301 重定向。

②:window 独立服务

Win 独立服务 301 设置 (win2003 、 win2008):

1 、 IIS 服务器实现 301 重定向

打开 IIS,右键-属性-网站-IP 地址那里点编辑增加一个站点,然后绑定一下主机头,也可以绑定更多的闲置域名。如图所示:

iis1.jpg

打开 IIS,首先新建立一个站点,随便对应一个目录 E:wwwroot301web 。该目录下只需要 2 个文件,一个 default.html,一个 404.htm 。在欲重定向的网页或目录上按右键; 选中“ 重定向到 URL”; 在对话框中输入目标页面的地址; 切记,记得选 中“ 资源的永久重定向”; 当然,最后要点击“ 应用”,完成。如下图所示:

iis2.jpg

注意:win2003 跟 win2008 都是使用 IIS 服务器,所以 301 重定向的步骤方法是一样的。

③:Linux 独立服务器

Linux 独立服务器 301 设置 (红帽企业版、 centos):

我用的是红帽企业版,用的是源码包装的 Web 环境。然后我进入 Linux 服务器,找到 apache 的主配置文件 httpd.conf , 我的 apache 服务器下有多个虚拟主机,我找到我要做 301 重定向的虚拟主机,然后添加如何的代码 (代码是完整的):

1 、进入 Linux 服务器,然后找到 httpd.conf 的 Apache 主配置文件,下图红色框是我所在的完整位置,蓝色框是内容,也就是命令 pwd 现实所在位置,ls 查询当前位置的内容。

既然找到主配置文件了,我们通过命令 vi httpd.conf 编辑一下,在最后添加如下完整的代码。要找到配置的那个虚拟主机然后添加代码, 不要乱添加。

ServerName www.abc.com

ServerAdmin webmaster@dummy-host.example.com

LogLevel warn

ErrorLog logs/dummy-host.example.com-error_log

CustomLog logs/dummy-host.example.com-access_log common

ServerName abc.com

ServerAdmin webmaster@dummy-host.example.com

RewriteEngine on

RewriteRule ^(.*)$ http://www.abc.com$1 [R=301,L]

LogLevel warn

ErrorLog logs/dummy-host.example.com-error_log

CustomLog logs/dummy-host.example.com-access_log common

注意:不同形式安装的 apache 其路径是不同的,有源码包、有 YUM 等安装方式,两种马路是不一样的,建议新手联系空间商并实施 301 重定向。

④:绑定/本地 DNS

如果具有对本地 DNS 记录进行编辑修改的权限,则只要添加一个记录就可以解决此问题。若无此权限,则可要求网站托管服务商对 DNS 服务器进行相应设置。

⑤:DNS 服务器的设置

若要将 blog.abc.com 指向 www.abc.com,则只需在 DNS 服务中应增加一个别名记录,可写成:blog IN CNAME www.abc.com 。

如需配置大量的虚拟域名,则可写成:* IN CNAME www.abc.com.

这样就可将所有未设置的以 abc.com 结尾的记录全部重定向到 www.abc.com 上。

  写在最后:

上述则是笔者整理的 301 重定向。总的来说,网站改版可以通过 301 重定向将旧版本页面的所有全部传递到新版本页面上,另外则是对 URL 做规范化。实施的过程中要注意为什么要做 301 重定向、方法的操作、操作的正确度等,为了更好的设置 301 重定向,建议参考以上整理的内容。