说到网站上的“404”状态,相信大家都比较熟悉了,当用户请求的网页不存在时,服务器会返回 404(Not Found)错误。此HTTP响应代码明确告知浏览器和搜索引擎:该网页不存在。因此,搜索引擎不会抓取该网页的内容,也不会将其编入索引。那么,“软404错误”是什么呢?
一、“软404”的出现
我们看一个例子,某项目的动态页面功能的设计是这样的:客户端发送一个请求时,如果请求的路径不存在,此时,服务器会自动返回404错误,这里的404错误一般会跳转至一个通用的错误提示页面。
如果请求的路径存在,服务器将根据客户端请求及其参数进行数据查询等操作,然后将查询结果返回到页面上显示,但是由于某些原因,例如,用户请求的资源数据在数据库系统中已删除,而且我们想返回给用户一个更加友好的提示信息,于是在响应用户的请求时,定向到了下面的错误信息提示页面:
看上去这个功能完成得相当不错,但是当功能上线之后问题就来了,使用谷歌站长管理工具,对网站的抓取数据分析时发现:称为“Soft 404”的错误数量在逐步上升。
二、什么是“软404错误”
我们知道当服务器不能响应用户请求时,除了显示一个404对应的网页,同时还会返回404HTTP状态码。但是按照上面的项目处理错误信息显示页面时,显示了一个“资源未找到”的信息提示页面,返回的HTTP状态码却不是404。在上面的例子中,实际上返回的HTTP状态码为200。响应头信息如下:
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Wed, 15 Jan 2014 09:04:55 GMT
Content-Type: text/html;charset=utf-8
……
当页面上显示为“资源未找到”,但实际上响应的HTTP状态码不是404(Not Found)或410(Gone),这样的页面称为“软404”。
三、“软404”的危害
由于软404页面返回了404或410以外的状态码,搜索引擎就会认为该网页是个实际存在的资源页面,因此,搜索引擎可能会抓取该网址,并将其内容编入索引。造成网站中有大量的“资源未找到”页面被搜索引擎收录,从而影响到其它正常资源页面在搜索结果中的出现频率,甚至会降低搜索引擎对网站的收录。另外,这些页面还可能会出现在对“资源未找到”这个关键词的检索结果中。
四、“软404”的处理
解决“软404”问题就是需要将错误信息页面的HTTP状态码设置为404(Not Found)或410(Gone),在处理请求的ASP或JSP页面中加入以下代码:
修改完成后,搜索引擎将不再收录这些页面,已经收录的页面将逐步从搜索引擎的索引中删除,页面的响应头信息如下:
HTTP/1.1 404 Not Found
Server: nginx/1.4.1
Date: Wed, 15 Jan 2014 09:04:36 GMT
Content-Type: text/html;charset=utf-8
……