公司新来的一位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=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即可。