最近发现一奇怪现象,网站一些链接被百度收录,失效后一直无法去除,经过一番研究找到一些端倪。

    首先用谷歌浏览器的firebug工具测试404,发现提示302错误。302错误表示被请求的资源暂时转移(Moved temporatily),然后会给出一个转移后的URL。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“302”来说并没有什么区别,但对搜索引擎这则是相当重要的。
    搜索引擎蜘蛛在请求某个URL时得到“404”状态回应时,即知道该URL已经失效,便不再索引该网页,并向数据中心反馈将该URL表示的网页从索引数据库中删除,当然,删除过程有可能需要一段时间;而当搜索引擎得到“302”或“200”状态码时,则会认为该url是有效的,索引数据库中便会一直保留,于是就会出现搜索引擎上收录了很多失效链接却一直不能去除的现象,从而有可能导致网站被降权。
    由此看出,自定义404错误页面是增强用户体验的很好的做法,但在应用过程中一定要注意对搜索引擎的影响,譬如:错误的服务器端配置导致返回“200”状态码,或自定义404错误页面使用Meta Refresh导致返回“302”状态码。正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是 “200”或“302”。
    解决方法如下:在Apache的配置文件中,注意ErrorDocument 404后面不要写URL地址,应该写具体文件路径,ErrorDocument 404 "/404.html"这样子。修改后重启httpd服务,再测试,提示已变为404。也可以用404测试工具,http://tool.seowhy.com/http404/。
    需要注意,虚拟主机对应的各个目录下也需要有404.html这个文件,否则各个频道下的无效链接将返回系统默认的404提示页面,而不能返回自定义的404页面。也就是说404.html这个文件要同时放置在网站根目录和虚拟主机对应的各个目录下。我的方法是在虚拟主机对应的各个目录下建立符号链接文件,链接到根目录下的404.html文件,这样如果以后修改404.html时,只需修改根目录下的404.html文件即可。