如果你为自己的网站自定义了一个404页面,你是否遇到并注意到这样一种情况:这个404页面仍会返回200状态码?也就是说,当用户访问你的网站中不存在的页面时,服务器在传送自定义的404页面的同时,会如同访问其它页面一样,返回200 OK状态码,即“soft 404”。
请尽量避免出现这种情况,而使用真正的硬404。
这种情况会带来什么不良后果?
如果你在Google搜索“自定义404”(在国内访问可能被转至谷歌),会找到很多写得很好的文章,因此我就不在此赘述了,仅略微说明一下。
简单地说,当访问者是人类时,不会有任何影响。因为当用户通过浏览器访问你的网页时,最终展现在用户眼前的只有经浏览器解析后的HTTP消息体,而不包含消息头。
当访问者是蜘蛛时,问题就出现了。当蜘蛛访问“不存在的页面”时,服务器返回了带200状态码的页面(实为404错误页),蜘蛛看到200状态码后,会错误地认为这个“不存在的页面”存在,并且把404错误页的内容当作此页面编入索引。由于每个找不到文件的请求都会返回这个带200状态码的404错误页,所以搜索引擎可能会多次将各种各样的错误的URL以完全相同的内容编入索引。这将会影响网站的SEO效果。
如果你有兴趣了解更多,我推荐你阅读谷歌中文网站管理员博客: 网站管理员中心404代码专题周里的3篇图文并茂的文章。
如何确定我的404页面返回什么状态码?
例如您的404页面地址为http://hellomouse.com/not_found.aspx
方法A:自己检查
打开cmd,输入telnet回车,输入open hellomouse.com 80回车,复制以下内容并粘贴至telnet窗口内:(在telnet内粘贴的方法为:点右键,选择“粘贴”。此时不可使用Ctrl+V)
GET /not_found.aspx HTTP/1.1
Host: hellomouse.com
多次回车。(若有独立IP则可不必输入host一行)方法B:用第三方工具检查
用Google搜索“HTTP Status Codes Checker”,使用这种网页版的检查工具进行检查。我就不在此链接具体的网页了。
如何让我的404页面返回404状态码?
建议您使用ASP或PHP网页作为404页面,因为这样可以很容易做到返回404状态码。
独立主机用户可自行修改服务器软件设置。
方法A:直接修改自定义的404页面
HTML页面就别想了。
ASP
插入以下代码:
<% Response.Status = "404 Not Found" %>
或者:
<% Response.StatusCode = 404 %>
PHP
插入以下代码:
<?php header('HTTP/1.1 404 Not Found'); ?>
方法B:修改web.config或.htaccess文件
由于我推荐使用方法A,并且自己也没有使用过,所以此方法请自行搜索。
至此,你可以再次确认一下你的404页面是否返回了404状态码。