当前位置: 首页 > 图文教程 > 网站运营 > 网站优化 > SEO教程:Http请求状态码和SEO的关系

网站优化
SEO 网站标题title注意的三点内容
SEO 用语义化的HTML制作网页
SEO中HTML标签权重 SEO 搜索引擎优化简明教程
标题标记H和强调标记strong
发垃圾帖子或回复可能会降低网站排名
新站够获得好的百度排名的一些经验小结
新站关键词排名不稳定现象解析
新手SEO很容易犯的错误汇总
SEO 分享增加网站反向链接经验
提高网页关键词搜索引擎排名的5个方法
外部链接优化效果远不如内部链接
网站优化 关于网页地址URL的约定规则
谷歌站长工具关键字分析页面新的调整
SEO 静态网页不一定优于动态网页
应对Google的个性化搜索对SEO的影响
所谓的SEO高手们请不要再自欺欺人了
搜索引擎的收录量不增加的原因分析
让友情链接发挥最佳效果
垃圾链接其隐藏背后的危害
Google 个性化搜索对SEO的影响

网站优化 中的 SEO教程:Http请求状态码和SEO的关系


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-03-20   浏览: 61 ::
收藏到网摘: n/a

我们经常说“404错误”,你知道他指的是什么意思么?404其实是Http报头所包含的一个“状态码”,表明该Http请求失败。那么除此之外,还有哪些常用的状态码呢?这些状态码和SEO又有什么关系呢?

每次当用户代理(可以理解为就是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都重复了——后果是很严重的。

好了,认识到问题的严重性之后,我们来看解决问题的办法,太简单了,呵呵

protected void Page_Load(object sender, EventArgs e)

{

//如果你希望搜索引擎知道这个url将不再使用

Response.StatusCode = 404;

//如果你希望告诉搜索引擎这个url只是出现了暂时的故障

Response.StatusCode = 500;

//如果你想永久重定向该页面

Response.StatusCode = 301;

Response.RedirectLocation = @“\website1\target.aspx”;

}

作者:自由飞

原文地址:http://www.cnblogs.com/freeflying/archive/2010/02/24/1672308.html