【ASP.NET 问题】ASP.NET 网站404页面返回200,或者302的解决办法
程序员文章站
2024-01-25 08:58:28
做网站在优化网站时遇到了跳转404页面却返回 200、302状态的问题,这样的话搜索引擎会认为这个页面是一个正常的页面,但是这个页面实际是个错误页面,虽然对访问的用户而言,HTTP状态码是“404”还是“200”并没有什么区别,一样是提高了用户体验,但对搜索引擎而言,这则是相当重要的,甚至是致命的。 ......
做网站在优化网站时遇到了跳转404页面却返回 200、302状态的问题,这样的话搜索引擎会认为这个页面是一个正常的页面,但是这个页面实际是个错误页面,虽然对访问的用户而言,HTTP状态码是“404”还是“200”并没有什么区别,一样是提高了用户体验,但对搜索引擎而言,这则是相当重要的,甚至是致命的。
当搜索引擎蜘蛛在请求某个错误URL地址得到“404”状态回应时,即知道该URL地址已经失效,便不再索引该网页,并向数据中心反馈将该URL地址表示的网页从索引数据库中删除,而当搜索引擎对于这个404页面得到的是“200”状态回应时,则会认为该url地址是有效的,便会去索引,并会将其收录到索引数据库,这样你的所有错误页面对于搜索引擎来说都是不同url地址内容相同的页面,这会导致出现大量重复页面,会大大降低网站质量的评分,甚至直接降权。
所以正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是200或其他的。不仅要告诉用户该页面不存在,也要正确的让搜索引擎知道这是404错误页面而不是一个正常的页面。
简单的排查了下,自定义的404页面没有添加状态代码:
Response.StatusCode = 404;
但是问题依然存在,这个主要是配置了自定义错误页面,程序在访问错误页面是进行了302跳转造成。
所以另外需要在全局文件 Global.asax 写入相关方法:
protected void Application_Error(object sender, EventArgs e) { HttpException erroy = Server.GetLastError() as HttpException; if (erroy != null && erroy.GetHttpCode() == 404) { Server.ClearError(); string path = "~/404.aspx"; Server.Transfer(path); Response.End(); return; } }
这样问题就解决了。
参考文档: