301,302不同之处
301 redirect: 301 代表永久性转移(Permanently Moved) 请求一次后,服务器告诉客户端浏览器,永久重定向,下次再请求网页时不再请求远端服务器,客户端浏览器缓存了重定向的目标地址,但是,如果浏览器清空缓存后,浏览器重定向将失效,需要再次请求服务器。
302 redirect: 302 代表暂时性转移(Temporarily Moved ) 每次客户端浏览器都需要请求服务器,服务器返回302,客户端浏览器,再根据响应头,请求相应的URL
使用区别:
301 重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
问题:对搜索引擎来说缓存的地方是哪里?
SEO(搜索引擎优化):如果把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的PageRank等信息带到新地址,在搜索引擎索引库中彻底废弃掉原先的老地址。
302 重定向是临时性转移。
在前些年,不少Black Hat SEO曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度,被误认为是spam(垃圾信息)
页面跳转方式
html页面的各种跳转方式
1、meta的refresh跳转。代码如下:
<meta http-equiv="Refresh" content="5; url=http://www.baidu.com">
content内容中的数字为秒数,表示几秒后跳转,url属性的值就是将要跳转的页面。
2、javascript跳转。代码如下:
<script language="javascript" type="text/javascript">window.location.href="http://www.baidu.com";</script>
不容易被搜索引擎看出来是跳转
程序语言的跳转
不同程序语言,通过自身提供的redirect实现跳转。
各种代码实现:
1)jsp的redirect跳转:response.sendRedirect(“test.jsp”);
2)asp的redirect跳转:Response.Redirect “test.asp”
3)php的redirect跳转:header(“location: test.html”);
4).net的redirect跳转:Response.Redirect(“test.aspx”);
附带了302状态码
301跳转
1)web服务器配置的301跳转。
Apache的301跳转配置。在网站根目录下.htaccess实现,代码如下:
redirect 301 “/a.htm” http://www.a.com/a/
前面的页面是跳转源页面,后者则是跳转目标页面。
2)动态程序的301跳转。除了web服务器可以设置301跳转外,程序语言本省也带有301跳转的功能,不同的实现语句:
a)asp代码如下:
Response.Status=”301 Moved Permanently”
Response.AddHeader “Location”, “your 301 destination url”
b)php代码如下:
header(‘HTTP/1.1 301 Moved Permanently’);
header(“location:http://www.wenjuntech.com”);
c).net代码如下:
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,”301 address url”);
d)jsp的代码如下:
response.setStatus(301);
response.setHeader(“Location”,”301 url”);
response.setHeader(“Connection”,”close”);
对于网站的搬家或升级导致的页面url更改,最好采用301跳转方式实现,因为301跳转能有效得到搜索引擎的认可,pagerank会继承原有网站的,更有利于SEO。
不同跳转方式的http状态码
HTTP状态码是200跳转:
方法1:Response.Redirect("Test.aspx");
状态码 301 临时性跳转
方法2:<meta http-equiv="refresh" content="5; URL=Test.aspx" />
meta fresh:早些年用的比较多, 现在很少用。通过网页中meta指令,在特定时间后重定向到新的网页,如果延迟的时间太短(约5秒之內),会被判断为spam。这种跳转方式,跳转过程中Http状态是200。
方法3:Server.Transfer("Test.aspx");
跳转过程中,Http状态都是200。
方法4:URLRewrite
跳转过程中,Http状态都是200。
编码实现301跳转
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.baidu.com");
301
<?php ob_start(); echo ‘xxxxxxxxxxxxx‘; header(‘HTTP/1.1 301 Moved Permanently‘); header(‘location:http://www.qq.com‘); echo ‘6666666666666666666‘;
302
<?php ob_start(); print ‘xxxxxxxxxxxxx‘; header(‘Location: http://www.baidu.com/‘); print ‘ttttttttttttttttttt‘;
301 302 304