301 永久重定向:这是 SEO 中的一个基础名词,在 URL 规范化中会用到,也许大家都知道这个名词,但是由于应用的不是非常频繁,导致很多专业做 SEO 的朋友都不是很熟悉 301 永久重定向的具体操作方法,今天我就讲解下 301 永久重定向的理论,以及实际的操作方法。
301 永久重定向的概念:
网址重定向最为可行的一种办法。当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的 HTTP 数据流中头信息 (header) 中的状态码的一种,表示本网页永久性转移到另一个地址。
上面那段话是简述了 301 永久重定向的概念,那为什么要如此重视 301 永久重定向呢?
原因:301 永久重定向是所有的重定向方法中唯一符合搜索引擎规则的重定向方法,其他的重定向还包括 302 暂时重定向和 JS 跳转等,这些方式都容易导致 URL 不规范问题的产生。所以说如果你有多个域名都希望可以让他们访问同一个网站,那就只能将其中一个做为主域名,剩下的其他域名做 301 永久重定向到这个主域名,只有这样才可以完美的让多个域名都访问一个站点,不会产生重复收录,导致网站被惩罚的现象。
301 永久重定向的执行方法:
301 永久重定向有几种不同的做法,在 windows 主机上和 Unix/Linux 主机是不同的。
一、在 windows 主机上设置的方法:可以在 IIS 服务器上设置也可以在代码中设置。
1、在 IIS 服务器上设置 301 的方法:
这种设置方法需要有一个先天条件,那就是你有服务器的管理权,你可以直接操作 IIS 服务器,并且可以随意开通新的虚拟主机,否则你只能用修改网站代码的方法。
首先开通一个新的虚拟主机,将你需要做 301 永久重定向的域名正常与该空间绑定,这个绑定的方法你可以咨询服务器托管商。
然后打开 “ 控制面板 ”→ 找到 “ 管理工具 ”→ 打开 “Internet 信息服务 ”。打开后,可以在管理器左侧树形菜单中找到你的网站,然后右击选择 “ 属性 ”,打开网站的属性管理面板(如下图),并且选择到 “ 主目录 ” 选项卡,选择 “ 重定向到 URL”,然后在地址框中输入 “ 主域名 ”,然后将选项卡中的 “ 资源的永久重定向 ” 选择上,点击确定即可设置完毕。
2、在网站代码中设置 301 的方法:
只需要将以下代码加在网页的开头即可,不过只能用在 ASP 和 PHP 文件中,HTML 目前无法通过代码设置 301。
ASP 代码:
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently" Response.AddHeader "Location" , " http://www.liwubao.com"
>
PHP:
<?
Header(“HTTP/1.1 301 Moved Permanently”);
Header(“Location:
http://www.liwubao.com
” );
?>
注:将我的网址替换成你自己的定向后的目标网址即可,所有的标点必须用英文半角。
二、如果你用的是 Unix/Linux 主机:可以用.htaccess 文件。
比如把 /old.htm 转到 /new.htm,可以用这个指令:redirect 301 /old.htm /new.htm。如果要把所有http://liwubao.com
形式的 URL 用 301 重定向转到http://www.liwubao.com
。包括所有的目录和内页也转向到新域名的相应位置,那就要用到 mod_rewrite,书写格式如下:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^xueseo.com.cn [NC]
RewriteRule ^(.*)$
http://www.liwubao.com/$1
[L,R=301]
二:
重定向说白了就是通过各种的方法将各种网络请求重新定个方向转到其它位置。
如:网页中的重定向
域名的重定向
路由选择的变化也是对数据报文经由路径的一种重定向
在我们的网站淘星建设中,时常会遇到需要网页重定向的情况:象网站调整,如改变网页目录结构,网页被移到一个新地址,再或者,网页扩展名改变,如因应用需要把.php 改成.Html 或.shtml,在这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户还会得到一个 404 页面错误信息,访问流量白白丧失;再如某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点,等等。
常用的重定向方式有: 301 redirect, 302 redirect 与 meta fresh:
301 redirect: 301 代表永久性转移(Permanently Moved),301 重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况, 都建议使用 301 来做转址。
302 redirect: 302 代表暂时性转移(Temporarily Moved),在前些年,不少 Black Hat SEO 曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度,象 Google 前些年对 Business.com 以及近来对 BMW 德国网站的惩罚。即使网站客观上不是 spam,也很容易被搜寻引擎容易误判为 spam 而遭到惩罚。
meta fresh: 这在 2000 年前比较流行,不过现在已很少见。其具体是通过网页中的 meta 指令,在特定时间后重定向到新的网页,如果延迟的时间太短(约 5 秒之内),会被判断为 spam。
301 Redirect 实现网页重定向
IIS 服务器实现 301 重定向
* 打开 internet 信息服务管理器,在欲重定向的网页或目录上按右键
* 选择 “ 重定向到 URL”
* 在 “ 重定向到 ” 输入框中输入要跳转到的目标网页的 URL 地址
* 选中 “ 资源的永久重定向 ”(切记)
* 最后点击 “ 应用 ”
Apache 服务器实现 301 重定向
相比较来说,Apache 实现起来要比 IIS 简单多了。在 Apache 中,有个很重要的文件.htaccess,通过对它的设置,可以实现很多强大的功能,301 重定向只是其中之一。
Redirect permanent / http://www.bloghuman.com/ (将目录下内容重定向到 http://www.bloghuman.com/)
redirect permanent /index.php http://www.bloghuman.com/index.php?go=category_6(将网页 index.php 重定向到 http://www.bloghuman.com/index.php?go=category_6)
通过合理地配置重定向参数中的正则表达式,可以实现更复杂的匹配。有兴趣的朋友可参考本站 Apache 手册。
PHP 下的 301 重定向
<?
Header("HTTP/1.1 301 Moved Permanently") ;
Header("Location: http://www.48pp.com");
?
ASP 下的 301 重定向
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.48pp.com"
%>
ASP .NET 下的 301 重定向
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader ("Location","http://www.48pp.com");
}
</script>
ColdFusion 下的 301 重定向
<.cfheader statuscode="301" statustext="Moved permanently">
<.cfheader name="Location" value="http://www.2008sili.com"> 旧域名重定向到新域名
创建一个.htaccess 文件,并将下面提供的代码写入文件内,它可以确保旧域名所有的目录或者网页正确的跳转到新域名内。
记住.htaccess 文件一定要放在旧网站的根目录下,并且新网站要和旧网站保持相同的目录结构及网页文件
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
请将上面的 www.domain.com 修改成你想要跳转到的域名。
此外,我建议大家归总旧网站的外部链接,并联系相应的站点修改导入链链的 URL,以指向新站点。
注意:.htaccess 文件只有在使用安装有 Mod Rewrite 模块的 Apache 作为 WEB 服务器的 Linux 主机上才能起作用
域名 301 重定向到 www 的二级域名
在以前的文章中我反复提及过:www.domain.com 是 domain.com 域下的一个二级域名,并对二级域名和一级目录之间如何选择以及网站结构优化做了一个详细的分析,有兴趣的可以读一下两篇文章,网站结构优化是 SEO 中最重要。
OK,继续域 301 跳转到 www 二级域的实现方式:
创建一个.htaccess 文件,并将下面提供的代码写入文件内,它可以确保所有来自对 domain.com 的请求都转向到对 www.domain.com 进行请求。记住.htaccess 文件一定要放在旧网站的根目录下,并且新网站要和旧网站保持相同的目录结构及网页文件
Options +FollowSymlinks
RewriteEngine on
rewritecond % ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
请将上面的 domain.com 和 www.domain.com 修改成你想要跳转到的域名。
注意:.htaccess 文件只有在使用安装有 Mod Rewrite 模块的 Apache 作为 WEB 服务器的 Linux 主机上才能起作用
301 重定向检测工具
配置完成后,一定认真检查一下是否正确。Internet 有很多类似的 Server Header 检查工具,如 Check Server Headers Tool – HTTP Status Codes Checker
网站 302 重定向使用不当导致被 GOOGLE 惩罚
Business.com 是网上最大的商业搜索引擎和分类目录,以专业提供商业信息而享负盛名,包括近 19 万网页。若以 “business” 为关键词在 Google 中进行搜索,该网站名列第一。不过在 9 月 5 日,Business.com 遇到一件蹊跷之事:它的首页由 PR8 变成了 PR0,而且 Google 搜索结果中找不到首页。好在被 “ 蒸发 ” 的只是首页,不过庆幸的是第二天首页又回到了 Google 的搜索结果,但 PR 仍旧为 0。
Business.com 的问题出在它的重定向命令上。该网站让 business.com 跳转到 www.business.com,这种重定向本该是永久性的。我们知道,301 属于永久性重定向,而 302 则属于临时性重定向,只有当一个网站或网页在 24 到 48 小时之内临时移到其它位置的情况下才能使用该命令。但 Business.com 却错误地使用了 “HTTP/1.1302 Object Moved” 状态码。
其实网站重定向极为普遍,譬如不满意原来的域名而申请了一个新域名;买下容易被人错拼的域名,防止客户因为拼错 URL 而找不到网站,等等。可是,很多人却会由于使用了错误的重定向状态码而遭 “ 灭站之灾 ”,就象 Business.com。尽管他们的重定向理由充分合理,然而若使用不当,则可能被 Google 误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是 “ 利用重复的内容来干扰 Google 搜索结果的网站排名 ”。Business.com 就是最好的前车之鉴。只不过大多数使用错误重定向参数的网站没 Business.com 这么幸运,一个小小的重定向就可能使网站前功尽弃,只能从头来过:重新申请新域名,重新发布新网站,等等。记住:Google 绝不会同情任何人即使无心犯下的错误。
网站服务器响应网页浏览请求的运作流程
让我们先来了解一下用户 / 搜索引擎和网站一开始的交互流程。当用户或搜索引擎向一个网站服务器发出网页浏览请求时,该服务器将:
1. 通过域名服务器 (DNS) 将域名转换为网站的 IP 地址,然后返回给客户
2. 打开一个该 IP 套接口连接
3. 记下通过该套接口的一个 HTTP 数据流
4. 从 WEB 服务器接收一个响应请求的 HTTP 数据流。该数据流包含状态码,状态码的值由 HTTP 协议所决定。这里所说的 “HTTP 数据流 ” 信息也叫 “ 头信息(Header)”。头信息中包括了日期,服务器类型,通常还会有一条 “200 OK” 信息。如果一切良好,那么网络服务器就会将 “200 OK” 信息以及请求页面发送出去。如果网站在这时候已经建立了重定向,那么服务器就会在头信息中包含一个 “302 Moved Temporarily” 或 “301 Moved Permanent” 之类的响应信息。搜索引擎会根据服务器头信息中的内容作出决定。
网站重定向的注意事项
1. 若准备将服务器上的文件移到其它地方时,须就以下信息正确地通知搜索引擎的爬行程序:
- 目标地址:这些文件被移向何方
- 移动属性:暂时移走还是永久性移走
2. 对拥有多个域名的网站,专家建议应把那些不想在搜索引擎上推广的域名用 301 跳转命令来永久性重定向。
确保网站实施了正确的 301 重定向
对于正确实施 301 重定向,有这样几个方法可供大家参考:
1. 在.htaccess 文件中增加 301 重定向指令
2. 适用于使用 Unix 网络服务器的用户。通过此指令通知搜索引擎的 spider 你的站点文件不在此地址下。这是较为常用的办法。形如:Redirect 301 / http://www.yourdomain.com/
3. 在服务器软件的系统管理员配置区完成 301 重定向
适用于使用 Window 网络服务器的用户
4. 采用 “mod_rewrite” 技术
通过该技术进行的改变将在.htaccess 文件中体现出来,形如:
Options +FollowSymLinks
RewriteEngine on
RewriteCond % ^yourdomain.com
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=permanent,L]
5. 绑定 / 本地 DNS(域名别名跳转)
如果具有对本地 DNS 记录进行编辑修改的权限,则只要添加一个记录就可以解决此问题。
若无此权限,则可要求网站托管服务商对 DNS 服务器进行相应设置。
DNS 服务器的设置
若要将 aaa.domain.com 指向 www.domain.com,则只需在 DNS 服务中应增加一个别名记录,可写成:aaa IN CNAME www.domain.com。
如需配置大量的虚拟域名,则可写成:* IN CNAME www.domain.com.
这样就可将所有未设置的以 domain.com 结尾的记录全部重定向到 www.domain.com 上。
6. 用 ASP/PHP 实现 301 重定向:
代码在上面已经介绍过了
资深 SEO 专家 Dan Thies 的看法和建议
对于 Business.com 所遭遇的问题 Dan Thies 深有体会,因为他也有过类似的遭遇。他的网站上有一个会员跟踪脚本,其中一个会员的站点通过 302 命令映射到这个跟踪脚本,而这个跟踪脚本又是通过 302 映射到他的主页。当在 Google 中用 “keyword research” 进行搜索,他的主页排名在前十位,然而地址显示的却是那个会员的网址。结果使他哭笑不得:访问者通过 Google 搜索结果进入他的网站,而他却不得不为这些访问量给那个会员支付报酬! 后来他用 robots.txt 文件禁止 Spiders 跟踪访问他的会员跟踪脚本才算解决了问题。
对于 Business.com,Dan Thies 认为:“ 目前 Google 在 302 重定向 " 的处理上还存在一定的问题,但并不表示 Google 不允许 302 重定向。Business.com 并未遭封或遭到惩罚,它们只是返回了错误的响应。”
Dan Thies 建议:如果使用了跟踪 URL/ 脚本,又必须让访问者重定向到某一着陆页,那么一定要在 robots.txt 文件中禁止 Spiders 去访问第二个重定向。如果没有对跟踪 URL/ 脚本进行重定向,而只是把另外一个 URL 上的内容给复制过来,那么应在 robots.txt 文件中禁止 Spiders 去访问跟踪 URL,以防因内容重复而遭搜索引擎惩罚。
301 重定向经验谈
一个多域名站主的经验之谈:
“ 我只有一个网站淘星,主域名是 www.domain.com,此外还有诸如 domain1.com、domain2.com、domain3.com 等共计十几个域名。所有这些次级域名都映射到 www.domain.com,而且所有域名对应的是同一个 IP 地址。由于事实上我只有一个站点,一个站点又只能对应一个.htaccess 文件,显然不可能直接修改.htaccess 文件来实现重定向。我采用了如下步骤:
A. 把 domain1.com 从 domain.com 上独立出来,让它成为服务器上的一个普通独立网站。
B. 为 domain1.com 创建一个.htaccess 文本文件,并在文件中设置重定向代码为:
Redirect permanent / http://www.domain.com/
再将修改后的.htaccess 文件上传给 domain1.com 所在服务器。
这一步也可以在域名控制面板中完成。
C. 进入域名控制面板,将所有原来绑定到 domain.com 上的域名从 domain.com 上释放,然后重新绑定到 doamin1.com。这样一来,这些被绑定的域名使用的都是 domain1.com 的.htaccess 文件,因而也就意味着它们都被永久性重定向到 domain.com 上了。好了,大功告成! 就这么容易!