建站经验 experience
当前位置:首页 > 网站建设专题 > 建站经验
常见http状态码分析及正确设置404页方法
发布日期:2011-08-29 阅读次数:695 字体大小:

公司新来的一位SEO向我质疑说404页面不能跳转到首页,说这样会导致首页会被K掉,还言之凿凿的说,夫唯也这么说过。落叶给他的建议是,遇到问题要多思考,SEO这个本来误传比较多,弄清楚404的原理,及一些状态码的含义,什么情况下会导致被误判或弊端,思考清楚这些,谁怎么说已经不重要了。

本文中分析一下各种常见的HTTP返回状态含义及对应的网站的出错情况,同时也介绍一下,IIS服务器、apache服务器及一般虚拟主机上设置404错误页的正确方法。

站长常需要关注的HTTP状态及含义:

200 :页面正常访问时的返回HTTP状态。当一个页面返回200状态码时,则表示告诉浏览器或者搜索引擎,该页面是可以正常到达的。

404 :页面找不到时,返回的HTTP状态。SEO处理中如果想自定义404页面,需要做到的是确保访问错误页时返回状态为404,这样搜索引擎才知道,这个页面是找不到了。而通常很多站长朋友们之所以对文章开头提到的认为“404页面自动跳转到首页会有问题”,原因通常是因为404页面跳转时设置不当,返回了200状态码又没有发现,结果搜索引擎抓取错误页时看到的是200状态,就认定网站上出现了大量的与首页相同页面,这种情况,被降权是显然的了。有些站长图省事,直接在IDC提供的虚拟主机后台设置404页面,并在页面上放置了类似或者js方式的windwo.location跳转,结果是返回200状态。

301 :页面永久重定向时返回的HTTP状态。目前公认的最正确的跳转方法,并且可以起到权重传递作用。一般在程序作跳转时先发送301状态即可。如PHP中发送:header(“HTTP/1.1 301 Moved Permanently”); ASP中发送Response.Status=“301 Moved Permanently”

302 :页面临时跳转时返回的状态。现在普遍认为使用302跳转容易被搜索引擎视为作弊,据传是早期302跳转被滥用而留下的后遗症。落叶不能算很老的站长,没见过被滥用啥样子,不过呢,302跳转更多的是作为功能性跳转,基本目前的每一个网站程序中都会用到,如添加一篇文章,自动跳转回列表页;操作成功/失败提示自动跳转等。ASP中的response.redirect跳转,PHP中的普通header跳转返回的都是302状态。这些跳转,一般是在网站后台操作时的功能性跳转,不会对SEO产生影响。但如果作为前台页面跳转,那就值得斟酌了。

500 :页面代码出错时返回的状态。通常站长朋友们经常遇到标题中提示“内部服务器错误”,其实这种情况大多数是因为访问的网站或者页面ASP或者PHP等出现代码错误,如语法错误、数据库连接错误等,而恰好服务器环境关闭了出错信息的输出提示,所以在出错时,站长看到的就是500状态的“内部服务器错误”。很多朋友在遇到这个问题时,搜索一翻,发现好多很专业的很专业的不知所云的文章,说了一大堆啥问题啥问题,而实际结果发现,就是PHP文件某行代码少了个分号。

常见的跳转代码返回的状态码:

1、静态页HTTP跳转:

跳转代码:

返回状态码:200

2、JS跳转

跳转代码:

返回状态:200

3、JS延时跳转

跳转代码:

function countDown(secs,surl){

//alert(surl);

tiao.innerText=secs;

if(--secs>0){

setTimeout("countDown)"+secs+",'"+surl+"')",1000);

}

else{

location.href=http://www.chinaz.com/web/2011/0829/surl;

}

}

4、3秒后自动跳转到PHPINFO页面

返回状态码:200

5、ASP的跳转

跳转代码:<% response.redirect http://www.baidu.com %>

返回状态:302

6、PHP跳转

跳转代码:

返回状态:302

了解到这几个常见的HTTP状态码的所代表的含义,那在不同的环境下,应该怎样处理,以保证404页设置正确呢?

IIS服务器上设置404页面

把制作好的404页面放在网站根目录下,在IIS管理器中右键点击需要设置404的站点的属性,点击“自定义错误”选项卡,在HTTP错误类型列表中找到404错误,进行编辑,消息类型选择“文件”,然后点击“浏览”选择网站根目录下的404页面。

原则上,该404页面并非一定要放在网站根目录下,放在网站的任何目录下均可,亦可直接放到C:\WINDOWS\help\iisHelp\common\ 目录下,并且文件名不一定需要叫404.htm

落叶做过测试,通过服务器上IIS这里设置的404页面,只要设置方式是按如上操作的,即使404.htm是使用的原本会发送200状态的静态跳转代码或JS跳转代码,仍然能正常返回404状态。

1、APACHE服务器上设置404页面

访问Apache目录下的conf目录下的extra目录,记事本打开httpd-vhosts.conf,在子站点的配置文件中加上ErrorDocument 404 /404.html,然后做一个404.html放置在网站根目录下,重启APACHE服务即可生效。

具体示例如下:

ServerAdmin cmstong@qq.com

DocumentRoot "E:\AppServ\www\empirecms"

ServerName pmume.com

ServerAlias www.pmume.com

ErrorDocument 404 /404.html

ErrorLog "logs/dummy-host.x-error.log"

CustomLog "logs/dummy-host.x-access.log" common

2、IIS虚拟主机上设置404

目前国内流传的IIS下的伪静态规则组件ISAPI_Rewrite都是试用版或者破解版,貌似都不能很好的支持301、404的重写。所以没办法通过httpd.ini里面的伪静态规则来实现404重写。目前IIS虚拟主机设置404的较方便的方法,还是在IDC提供的虚拟主机管理后台进行404设置。但很多虚拟主机管理后台的404设置功能并不是太理想,建议这类型的用户404页面中不要设置跳转,否则很可能导致的是404跳转返回200状态,起到反作用。

有很多人想通过选择404.asp或404.php,然后在404里面作些跳转,结果发现返回的是200状态。其实这里还是老老实实选择第4个吧。

3、Apache虚拟主机上设置404

根目录下新建.htaccess文件,(一般APACHE虚拟主机根目录下或者CMS都会提供这么一个文件,如果自己在WIN下创建是没法成功的,会提示文件名不能为空。)

在里面规则后面加上ErrorDocument 404 /err404.html即可。

作者:落叶(t.qq.com/guohui) 网站:http://www.pmume.com

落叶原创首发CHINAZ,尊重版权,转载请保留作者信息及链接。