ASP.NET的SEO:HTTP报头状态码---内容重定向

本系列目录

我们经常说“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";
    }

时间: 2024-10-19 00:03:10

ASP.NET的SEO:HTTP报头状态码---内容重定向的相关文章

ASP.NET的SEO:目录

ASP.NET的SEO:基础知识 ASP.NET的SEO:Global.asax和HttpModule中的RewritePath()方法--友好的URL ASP.NET的SEO:正则表达式 ASP.NET的SEO:服务器控件背后--SEO友好的Html和JavaScript ASP.NET的SEO:使用.ashx文件--排除重复内容 ASP.NET的SEO:HTTP报头状态码---内容重定向 ASP.NET的SEO:Linq to XML---网站地图和RSS Feed ASP.NET的SEO:

ASP.NET设置404页面返回302HTTP状态码的解决方法

在配置文件中配置404页面如下: .代码如下: <customErrors mode="On" defaultRedirect="404.aspx"> <error statusCode="403" redirect="404.aspx" /> <error statusCode="404" redirect="404.aspx" /> <err

服务器返回的各种HTTP状态码介绍

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 2295.RFC 2774.RFC 4918等规范扩展. 所有状态码的第一个数字代表了响应的五种状态之一. 100系列码 从 100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们 是很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在

服务器返回的各种HTTP状态码介绍(转)

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 2295.RFC 2774.RFC 4918等规范扩展. 所有状态码的第一个数字代表了响应的五种状态之一. 100系列码 从100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们 是很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在屏

HTTP常用的状态码

一.200状态码: 成功2××:成功处理了请求的状态码. 1.200 :服务器已成功处理了请求并提供了请求的网页. 2.204:服务器成功处理了请求,但没有返回任何内容. 二.300状态码: 重定向3××:每次请求中使用重定向不要超过5次. 1.301:请求的网页已永久移动到新位置,当URLs发生变化时,使用301代码.搜索引擎索引中保存新的URL. 2.302:请求的网页临时移动到新位置,搜索引擎索引中保存原来的url. 3.304:如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引

很实用的一篇HTTP状态码

100系列码 从100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们 是很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在屏幕上.它们只是浏览器使引用的内部码.另 外,这些代码不常见的另外一个原因是起初HTTP标准不允许使用这一范围的状态码.就其本身而言,它们也一直没有被广泛地使用. 200系列码 从200到299范围的状态码是操作成功代码.同样的,在正常的Web上网中,你也很可能 不曾在屏幕上看到这些代码.相反的,

TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单的聊一下TCP/IP协议族,然后聊一下HTTP协议,然后再聊一下SSL上的HTTP(也就是HTTPS)了.当然TCP/IP协议族是个老生常谈的话题,网络上关于该内容的文章一抓一大把呢,但是鉴于其重要性,还是有必要系统的总结一下的. 一.TCP/IP协议组简述 在聊HTTP与HTTPS之前呢,我们先简

HTTP协议常用状态码

常用的状态码不多,约有14种. 1** 类状态码称之为Information 状态吗,表示信息正在处理. 2** 类状态码称为为Success状态码,表示请求正常完成. 3**类状态码称之为Redirection 状态码,表示需要客户端进行附加操作(如跳转.重定向) 4**类状态码称之为Error状态码,通常是由于客户端的错误导致的. 5**类状态吗称为Server Error状态码,通常是服务端的错误导致的. 小结下:状态码分为客户端错误状态码.服务端错误状态码.成功状态码,重定向状态码等.

HTTP 报文 之 HTTP 状态码

如前面所示,HTTP 状态码被分成了五大类.本节对这五类 HTTP 状态码中的每一类都进行了总结. 100~199--信息性状态码 HTTP/1.1 向协议中引入了信息性状态码.这些状态码相对较新,关于其复杂性和感知价值存在一些争议,而受到限制. 状态码 原因短语 含义 100 Continue  说明收到了请求的初始部分,请客户端继续.发送了这个状态码之后,服务器在收到请求之后必须进行响应.更多信息请参见附录 C 中的 Expect 首部介绍. 101 Switching Protocols