![]() 文章分类
|
Http请求状态码与网站优化的关系
我们经常说“404错误”,你知道他指的是什么意思么?404其实是Http报头所包含的一个“状态码”,表明该Http请求失败。那么除此之外,还有哪些常用的状态码呢?这些状态码和网站优化又有什么关系呢?
每次当用户代理(可以理解为就是IE和Firefox)向Web站点请求一个URL地址,服务器都会给予回复,回复内容包括两部分:HTTP报头,和被请求的内容。但仅从浏览器上我们通常只能看到内容而看不到报头信息。所以,我们需要通过一些浏览器插件来观察他们。就我个人而言,IE我用WebDeveloper;FireFox我用Fiddler。有兴趣的朋友可以在网上自行下载,两个都是相当流行的网络推广。 对SEO而言,我们需要了解的状态代码有: 重定向:301和302 被删除:404 服务器错误:500 我们依次讲解,首先将302。302在asp。net中有一个很常见的原型:Response。Redirect(),请看代码: protected void Button1_Click(object sender, EventArgs e) { Response。Redirect("~/target。aspx"); //Server。Transfer("~/target。aspx"); } source。aspx页面上一个Button,Click事件中代码为Response。Redirect(~/target。aspx),点击source。aspx页面Button,查看该页面对应的状态码,结果就是302。(如下图,我使用的是Web Development,不知道为什么enable log之后,就无法再转到target页面了?各位同学知道原因的请指点一二) 但可以查看详细信息,可以发现302的影响,response指明了要转向的url。 客户端/服务器之间往返的过程其实是这样的: 1。 点击Button,产生回发,回发的目标页面仍然是source。aspx,所以请求仍由source。aspx页面进行处理,这样才能进入source。aspx页面的Click事件; 2。 Click事件中,Response。Redirect(~/target。aspx)所作的事情实际上就是: 2。1 将回复中Http报头的状态码改成302; 2。1 指明302指向的页面就是target。aspx; 3。 浏览器(用户代理)收到回复的报头信息后, 3。1 将URL地址栏的地址改成target。aspx; 3。2 向target。aspx发出请求 和Response。Redirect()同样著名的是Server。Transfer()。但使用Server。Transfer,你会发现,页面对应的状态码是200,且地址栏的url并不会发生改变,仍然是source。aspx!这是因为Server。Transfer是完全在服务器端进行跳转的。所以一种很流行但我觉得不那么正确的说法就是:应当使用Server。Transfer()而不是Response。Redirect()来提高性能。因为在得到Server。Transfer()性能提升的同时,你应该权衡:性能的提高,和由此产生的代价。很难直接给出一个答案,这需要依靠具体的情景来做判断。但我倾向于尽量不使用Server。Transfer(),因为:1。 性能提升不大,节约的其实就是报头信息的往返;2。 清晰的URL无论对于终端用户,还是开发调试,都有很重要的作用。 好了,理解了302,301也就好办了。302意味着重定向是暂时的,而301则是永久的重定向网站推广。 就SEO而言,为了延续链接价值和排除重复内容 ,我们在以下几种情况下都可能会用到301: 1。 域名更换; 2。 多个域名间映射;如www。freeflying。com和www。freeflying。cn,两个域名其实指向的是同一个网站,这就会造成大量的重复内容,对网站的排名不利。 3。 清除默认索引页的重复问题:比如我们输入www。freeflying。com/article/时,如果在IIS里进行了设定,将指向www。freeflying。com/article/Default。aspx 4。 其他的“不同域名相同内容”的重复问题,典型的就是URL重写后,www。freeflying。com/article/321。html和www。freeflying。com/article。aspx?id=321指向的其实都是同一个网页内容。 对于404,最直观的理解就是页面不存在。如果网站是纯静态的,这很好理解;但当网站做成动态之后,如www。freeflying。com/article/321。html(映射为www。freeflying。com/article。aspx?id=321),虽然id=321的文章已经被删除了,或者根本不存在,但article。aspx这个页面始终是存在的,所以HTTP报头的状态码不会是404,而是200,表示请求成功。 我们假设一个网站有id=321/342/6739……的文章都被删除了,但蜘蛛并不知道,它仍然会进行抓取,结果它发现,这些不同的URL对应的居然全是同一个页面。它就会将其当做重复页面进行处理。 500意味着程序内部出现异常,比如3/0,代码如下: protected void Button1_Click(object sender, EventArgs e) { int i, j; i = 8; j = 0; this。Label1。Text = (i / j)。ToString(); } 如果搜索引擎接到一个500的状态码时,搜索引擎会理解程序只是出现了暂时性的错误,它会在之后继续抓取,查看问题是否已经解决,这并不会给网站带来太大的问题——只要你能够尽快恢复。但是,Asp。net自带的个custom error的web。config配置,会让我们在不经意间“失误”。理由和上面讲到的404变200类似,当转向自定义的error。aspx之后,蜘蛛得到的是成功链接error。aspx的200代码,所以蜘蛛会以为报错的originpage。aspx正常的显示内容就是error。aspx的内容。不同url参数的originpage。aspx会被蜘蛛认为是不同的url,所以蜘蛛会认为这些所有的url都重复了——后果是很严重的网络推广。 |