本身不是IT行的,做网站一直都是边干边学,经验都是从失败和挫折中积累出来的。301重定向是啥玩意儿,一开始谁知道啊?换一次虚拟主机,二级域名或三级域名便作废一次,外部链接挨个通知人家更换域名,人家还不一定爱答理;各大搜索引擎一时找不着了北,于是只能重新收录,网站的流量没个三五个月的培养,恢复不了元气。后来到网上查更换虚拟空间的相关条目,才知道了301重定向这个说法。
常用的重定向方式有:301 redirect, 302 redirect 与 meta fresh。301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。当然,如果你有服务器的管理权限,这一切都要容易得多。我相信多数人和我一样,都是用的虚拟主机,自己是没有多大权限的。所以我下面要说的,主要也是针对虚拟主机的用户;如果你是服务器的拥有者或管理人员,那么看到这里就可以打道回府了。
你如果要在搜索引擎中查“301重新定向代码”或“301重定向代码”、“301永久定向代码”,那么很容易就会得到下面两段代码:
PHP下的301重定向:
<?
Header( "HTTP/1.1 301 Moved Permanently" ) ;
Header( "Location: http://www.dongliw.com" );
?
ASP下的301重定向:
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.dongliw.com"
%>
所以,如果你已经拥有一个虚拟空间,域名为http://yxh58..skpay.net,并且提前知道这个虚拟空间将要关闭,便又开通了另一个虚拟空间,域名是http://www.dongliw.com。而前一个空间又是支持ASP的话,这时候你只要把前一个空间的的默认首页改为index.asp,然后在头部最顶端加上
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.dongliw.com"
%>
这段代码,这样搜索引擎机器蜘蛛在爬行前一个空间时,看到这段代码就会认为,这个空间的内容已经永久转向http://www.dongliw.com了。这样一来,新的空间逐渐就会将前一空间积累的PR值接收过来,所谓的PR劫持用的就是这个原理。
可实际上,空间商往往从来不替你着想,尤其是免费空间提供商,想什么时候关就什么时候关,招呼都懒得打,想提前几个月知道虚拟主机要关闭的消息,几乎是不可能的。所以说上面这段代码,多数情况下用在独立域名集中权重上。比如说独立域名dongliw.com和二级域名www.dongliw.com,如果你想让www.dongliw.com作为主域名,就在index.asp的头部加上:
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.dongliw.com"
%>
这样,搜索引擎收录的页面便是带www.dongliw.com的。如果不加代码,则不分权重,反而影响网站的收录效果。
但是如果一个空间拥有多个域名,比如有dongliw.com,www.dongliw.com,还有虚拟主机赠送的yxh58.skpay.net,怎么办呢?如果不作301重定向,很可能会被搜索引擎认为是垃圾站点而舍弃;可是如法炮制加上以上的代码,却发现网站首页打不开了。后来上网寻求解决办法,终于知道了这是因为程序一直在执行301跳转到 www.dongliw.com这个动作,当跳转到www.dongliw.com 时,还是执行这个动作,导致了死循环。要解决这个问题,正确实现301重定向,只有用SELECT语句,实现域名跳转。以asp为例:
<%
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
case "yxh58.skpay.net/"
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.dongliw.com/ "
case "dongliw.com/"
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.dongliw.com/ "
End Select
%>
这是先对访问的主机头进行判断,只有当访问者访问 yxh58.skpay.net 或dongliw.com时,才进行301重定向,永久跳转到http://www.dongliw.com/ ,这样就避免了死循环。
301重定向的代码只有在动态的页面才能执行,html页面是不能执行的。所以如果你的网站首页是index.htm,就需要将其转换成index.asp,然后再加相应代码。
除了301重定向,还有一个集中域名权重的办法,就是所有网页的头部添加上这段代码:
<base href="http://www.dongliw.com/" />
注意,URL后有一定要带上"/",如果是动态asp页面,代码下面还要空一行,否则会出现网页一直在“下载数据”的情况。这段代码的意思是,定义你网站所有的URL是以这段代码中规定的URL开始的。
实际应用的效果是,作了301重定向以后,谷歌一个星期就有了响应,三到四个星期就完成了转向。但是百度反应迟钝,虽然新的域名也收录了,但对旧域名仍恋恋不舍,至少在先收录的域名解除绑定之前,十个星期都没有转过来。不过,我并不认同百度对301重定向不识别的观点,本人的实际经验表明,当时本站有四个域名同时绑定一个空间,如果不作301重定向的话,恐怕早就被百度当垃圾站点封杀了。而之所以没被封杀,则表明百度是认可301重定向的,只不过它有个对域名的考察期,这个期限究竟有多长,由于发生了本站空间商将原来的域名解除了绑定的情况,而无法知晓了。
特别提醒:以上代码在使用时,请将其中的URL地址更换为你的URL地址。
“东篱网”站长“披月望云”作(转载请保留来源和署名)
2010年4月4日