飘易博客
上一篇:静态页面利用JS读取cookies记住用户信息
下一篇:Feedsky网站首页再次打不开了

301重定向实现方法,及对网站优化的作用

Author:Flymorn Source:飘易博客
Categories:SEO技术 PostTime:2008-2-25 10:02:40
摘 要:301重定向(也叫301转向,301跳转)对网站优化所起的作用是不可忽视的,尤其是针对SE(搜索引擎)处理网站页面权重的时候,更加显得重要。网站换了新域名,默认首页需要跳转等,从SEO角度来说,我们都建议使用301重定向,而不是JS跳转或META REFRESH或302转向,这些很容易引来SE的惩罚。
正 文:
   301重定向(也叫301转向,301跳转)对网站优化所起的作用是不可忽视的,尤其是针对SE(搜索引擎)处理网站页面权重的时候,更加显得重要。网站换了新域名,默认首页需要跳转等,从SEO角度来说,我们都建议使用301重定向,而不是JS跳转或META REFRESH或302转向,这些很容易引来SE的惩罚。

   什么是301重定向呢?

   301重定向是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向,等等。

   为什么要用301转向?

   网址转向方法主要包括:301转向,302转向,JavaScript转向,PHP/ASP/CGI转向,META REFRESH网页META刷新等。302转向可能会有URL规范化问题。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。何必冒险呢。

   关于301转向和网址规范化问题,大家可以去阅读下ZAC写的文章。本文,仅仅讨论在ASP环境下,如何设置301重定向问题;其他语言亦可参考。

   我们知道,网站的首页一般有以下几种:

http://piaoyi.org
http://www.piaoyi.org
http://piaoyi.org/index.asp
http://www.piaoyi.org/index.asp
……

   很自然的,以上的这些网址形式都指向到了一个网站,如果在搜索引擎中都启用这些形式,那么,网页权重,PR都会分散到这几个网址上,虽然,它们都是一个网站,而这不是我们想要的结果。那么,如何将以上的首页形式都定向到自己想要的网址上呢,比如http://www.piaoyi.org,从而使得这些分散的网页权重,PR都集中到www.piaoyi.org上。这里就需要使用301永久重定向了。

   ASP语言下,我们需要在默认首页,如index.asp顶部最上方加入以下代码:

<%
Dim dm,sn
dm=Request.ServerVariables("Server_name")  '获取域名
'这里的3是指www的长度
if left(dm,3)<>"www" then
Response.Status="301 Moved Permanently" 
Response.AddHeader "Location", "http://www.piaoyi.org"
Response.End
end if
%>

   
   这里的代码是经过flymorn加工后的,您也可以根据实际需要对本代码进行适当的修改以适合你需求的样式。本代码自动校验没有输入www的,301跳转到www.piaoyi.org这个网址上,从而使得网页权重得到累加,达到SEO优化的目的。

   但这里出现一个问题,如果有链接指向到http://www.piaoyi.org/index.asp(比如站内链接),那么搜索引擎也同样会给这个网址形式加分,虽然index.asp是默认首页,但我们希望的是把所有权重都给与http://www.piaoyi.org这个形式。有人说,这两个形式不是都一样吗?不一样。比如:http://www.023ff.com的PR为0,而http://www.023ff.com/index.asp的PR为2。从这点可以看出,SE是给与是否有index.asp的网址形式以不同的权重的。而使用Request.ServerVariables("SCRIPT_NAME")或Request("url")获取到的后缀无论输入时是否带有index.asp都一律返回index.asp,从而导致无法判断,也无法使用301重定向,当然这是指仅asp语言环境。

   目前解决方法就是,利用js获取当前网址window.location.href,然后把这个当前网址写入cookies;asp读取这个cookies,从而判断网址中是否包含index.asp,如果包含,就使用301重定向。建议:在任何链接中避免有直接指向index.asp的形式,包括外链及内链,尤其是内链。这只是一个折中的方法。针对该问题,希望与各位高手一起讨论。如果您有其他解决的方法,请留下您的评论。

   利用js通过cookies给asp传递网址的代码如下:

<script language="javascript">
var url=window.location.href.toLowerCase(); //小写
document.cookie = "urlck" + "=" + escape(url);
</script>

<%
Dim sn
sn=request.cookies("urlck")  '获取后缀
response.cookies("urlck")=""  '清空cookies

if right(sn,11)="default.asp" then
Response.Status="301 Moved Permanently" 
Response.AddHeader "Location", "http://www.piaoyi.org"
Response.End
end if
%>

   但是很遗憾,如果这些网址形式不是实际上的人为输入,而是搜索引擎访问的结果,搜索引擎又是忽略JS的,也就是说,js里赋值的cookie并不能被SE识别,从而导致也无法使用301跳转。这个问题有待解决。

   其他语言下的301重定向:

1、Unix/Linux+Apache主机,在.htaccess文件中增加301转向指令,采用 mod_rewrite 技术,如:PHP代码

Options +FollowSymLinks     
RewriteEngine on     
RewriteCond %{HTTP_HOST} ^www.piaoyi.org [NC]     
RewriteRule ^(.*)$ http://piaoyi.org/$1 [L,R=301]  
 

2、Window+IIS主机,在服务器软件的系统管理员配置中设置,方法:

打开Internet信息服务管理器,在欲重定向的网页或目录上按右键,选中“重定向到URL”,在对话框中输入目标页面的地址,记得选中“资源的永久重定向”->“应用” 。

3、用PHP/ASP .NET实现301转向(HTML无法做301转向),方法如下:

1)用PHP实现

PHP代码
<? Header( "HTTP/1.1 301 Moved Permanently" );    
Header( "Location: http://piaoyi.org" );?>  
 

2)用ASP.NET实现

ASP/Visual Basic代码
<script runat="server">    
private void Page_Load(object sender, System.EventArgs e)    
{    
Response.Status = "301 Moved Permanently";    
Response.AddHeader("Location","http://piaoyi.org");    
}    
</script> 
  

   经过这些设置后,301转向应该可以配置OK啦,如果想检查一下是否正确,则可以使用网上提供Server Header检查工具,如Check Server Headers Tool - HTTP Status Codes Checker

   用以上检测http状态码工具,可以做个简单的检查,如检查http://023ff.com,返回的结果如下:

#1 Server Response: http://023ff.com
HTTP Status Code: HTTP/1.1 301 Moved Permanently
Connection: close
Date: Mon, 25 Feb 2008 01:54:09 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Location: http://www.023ff.com
Content-Length: 0
Content-Type: text/html
Set-Cookie: ASPSESSIONIDACBCSBDR=FCJELLLALFNPOCMBNMOLMJHN; path=/
Cache-control: private
Redirect Target: http://www.023ff.com

#2 Server Response: http://www.023ff.com
HTTP Status Code: HTTP/1.1 200 OK
Connection: close
Date: Mon, 25 Feb 2008 01:54:13 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 29330
Content-Type: text/html
Set-Cookie: ASPSESSIONIDACBCSBDR=GCJELLLAECPBADKMADAJOBLC; path=/
Cache-control: private

   注意以上返回的结果中第二行“HTTP Status Code: HTTP/1.1 301 Moved Permanently”,说明这个网址采用了301永久重定向功能了,设置成功。如果您对本文有任何看法,欢迎留下您的评论,以便我们一起探讨。
作者:Flymorn
来源:飘易博客
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
23条评论 “301重定向实现方法,及对网站优化的作用”
2008-2-25 11:50:02
文章很全,要找的资料都可以找到,支持下。
2008-2-26 0:09:04
嗯,学到一些东东了,不过,代码部分就。。。
2008-3-8 11:34:23
请教下飘易,<%
Dim dm,sn
dm=Request.ServerVariables("Server_name")  '获取域名
'这里的3是指www的长度
if left(dm,3)<>"www" then
Response.Status="301 Moved Permanently" 
Response.AddHeader "Location", "http://www.piaoyi.org"
Response.End
end if
%>  以上这段代码对内页起不了作用怎么办?就是首页虽然可以成功实现301重定向,但是换到内页还是没实现具体页面的跳转,如果连内页也想实现这样的301重定向,有什么办法吗? 谢谢
4 Flymorn
2008-3-8 11:58:58
小白,对于内页同样的方法,在页面顶部放入上述代码,比如用户访问的路径是http://piaoyi.org/show/at.asp?id=110,同样没有www头,自动301跳转到带www的相应地址。
当然,要先获取这个相应地址;这里有一个小操作,可获取当前地址:
<%
'============================================
'获取当前Url参数的函数
Function GetUrl()
  Dim ScriptAddress,Servername,qs
  ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))
  Servername = CStr(Request.ServerVariables("Server_Name"))
  qs=Request.QueryString
  if qs<>"" then
  GetUrl ="http://"& Servername & ScriptAddress &"?"&qs
  else
  GetUrl ="http://"& Servername & ScriptAddress
  end if
End Function
'============================================
%>
再经过适当加工就OK了。
2008-3-8 12:47:28
哇 呵呵 飘易真是太热心了,发出提问没多久就回复,谢谢 谢谢~~ 还想请教下,那您的意思是不是说每个具体的ASP页面要想实现301重定向都要在当前页面加以上代码是吗?另外不好意思 因为本人对ASP代码编写并不熟悉,麻烦飘易帮忙详细说说好像要实现这样:http://piaoyi.org/show/at.asp?id=110重定向到http://www.piaoyi.org/show/at.asp?id=110应该怎么具体加入您上面说的调用函数呢?
6 Flymorn
2008-3-8 12:53:54
to小白,希望实现301跳转的页面都要加上这段代码;
不过你可以把这段代码放入一个公用文件里,用include包含。
其实方法已经出来了,完整的代码如下:
<%
Dim dm,sn
dm=Request.ServerVariables("Server_name")  '获取域名
'这里的3是指www的长度
if left(dm,3)<>"www" then
Response.Status="301 Moved Permanently" 
Response.AddHeader "Location", GetUrl()
Response.End
end if

'获取当前Url参数的函数
Function GetUrl()
  Dim ScriptAddress,Servername,qs
  ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))
  Servername = CStr(Request.ServerVariables("Server_Name"))
  qs=Request.QueryString
  if qs<>"" then
  GetUrl ="http://www."& Servername & ScriptAddress &"?"&qs
  else
  GetUrl ="http://www."& Servername & ScriptAddress
  end if
End Function
%>
2008-3-8 13:01:14
谢谢飘易~~~ 一直支持您
8 小笨蛋
2008-3-18 13:12:18
谢谢,非常支持,今天让我学到了不少,要找的终于找到了.
9 余飞
2008-4-4 14:56:08
您好,我原来是多个域名在绑定在同一个站,网站都是静态页面的。现在我用url转向把其它域名都转到一个域名上,那要怎么实现内页的跳转。就是我想把其它域名的内页也跳转到这个域名的内页,比如:http://www.abc.com/111.htm转到http://www.def.com/111.html
谢谢!
10 Flymorn
2008-4-4 17:27:36
余飞,静态页面无法用程序实现301跳转,需要根据服务器设置,如IIS的重定向到URL,Apache中.htaccess设置都可以实现。
11 余飞
2008-4-4 17:51:57
您好,我是其它域名用url转发到同一个域名上的,用IIS的重定向好像不行,不知道怎么回事
12 Flymorn
2008-4-4 23:13:12
url转发和301跳转根本不是一个概念了,如果你有主机的完全控制权好办,如果你是虚拟主机基本没望了。
13 余飞
2008-4-5 13:04:49
谢谢飘易的耐心解答!
我有主机的完全控制权,那我应该要怎么做呢?
是两个域名都要绑定到同一个IP上吗?
14 Flymorn
2008-4-5 15:41:39
并不是两个域名都要绑定到同一个IP上,请仔细阅读本文“其他语言下的301重定向”的第二种方法。
15 余飞
2008-4-6 10:32:12
您好,我就是用win2003+iis打开Internet信息服务管理器,在欲重定向的网页或目录上按右键,选中“重定向到URL”,在对话框中输入目标页面的地址,记得选中“资源的永久重定向”->“应用” 。

我是这样:打开IIS的www.123.net目录下的的a.html重定向http://www.123.net/a.html,选择“资源的永久重定向”->“应用”。
可是打开其它域名下的那个内页,比如http://www.456.cn/a.htm,还是出现404,不知道怎么回事?
16 Flymorn
2008-4-6 12:19:31
余飞:首先你要保证这两个域名下的页面都存在;其次,重定向到里面的url才是你要跳转的目标;
不过看你的回复,好像搞反了。
应该这样吧:
打开IIS的www.123.net目录下的的a.html重定向http://www.456.net/a.html,选择“资源的永久重定向”->“应用”。
然后,你访问http://www.123.net/a.html,此时才是301跳转到http://www.456.net/a.html
17 Flymorn
2008-4-6 12:28:54
其实,鉴于你以前是多个域名在绑定在同一个站,我觉的没有必要把所有的静态页都301跳转。
推荐解决方案:
把所有非主要域名外的域名都解析到另一个新目录,在这个新目录上用301跳转到主要域名上。
18 lingqidian
2008-4-25 14:14:26
您好,我现在有个新站,想把他的一个页面定向的原来的老域名上,不知道怎么实现,一直不成功。
希望能得到解答。
19 Flymorn
2008-4-25 14:29:47
to:lingqidian,你的问题太笼统了,没搞懂什么意思:(
20 cayman
2008-4-30 20:54:47
我是用win系统的,ASP的,遇到上面的问题,就是没办法直接转向URL,,后面都自动加了INDEX.asp的,不知有没有新的办法,我是直接把两个域名绑向同一个主机的
21 cayman
2008-5-1 18:26:45
您好,,,现在我是要开了一个空间,,直接在2S那边作301,不过我老站就留一个首页的页面,,这样子会不会有影响
22 Flymorn
2008-5-1 23:07:24
把有权重的网页用301转向,其他的可以不必太在意;
老站的首页也用301转到新的首页。
2008-5-8 2:42:54
没想到还这么复杂!
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 版权所有 渝ICP备07006361号