我们将在这里介绍一些ASPNET开发过程中利用HTTP报头状态码进行SEO的实例其实这样的SEO更多的是为了方便检查错误状态实现更好的页面体验而不是简单单纯的迎合搜索引擎式的SEO
我们经常说错误你知道他指的是什么意思么?
其实是Http报头所包含的一个状态码表明该Http请求失败那么除此之外还有哪些常用的状态码呢?这些状态码和SEO又有什么关系呢?
每次当用户代理(可以理解为就是IE和Firefox)向Web站点请求一个URL地址服务器都会给予回复回复内容包括两部分HTTP报头和被请求的内容但仅从浏览器上我们通常只能看到内容而看不到报头信息所以我们需要通过一些浏览器插件来观察他们就我个人而言IE我用WebDeveloper;FireFox我用Fiddler有兴趣的朋友可以在网上自行下载两个都是相当流行的 对SEO而言我们需要了解的状态代码有重定向和 被删除 服务器错误 我们依次讲解首先将在中有一个很常见的原型ResponseRedirect()请看代码
protected void Button_Click(object sender EventArgs e)
{
ResponseRedirect(~/targetaspx);
//ServerTransfer(~/targetaspx);
}
sourceaspx页面上一个ButtonClick事件中代码为ResponseRedirect(~/targetaspx)点击sourceaspx页面Button查看该页面对应的状态码结果就是(如下图我使用的是Web Development不知道为什么enable log之后就无法再转到target页面了?各位同学知道原因的请指点一二)
)thisstylewidth=; border=>
但可以查看详细信息可以发现的影响response指明了要转向的url
image onmousewheel=javascript:return big(this) height= alt= hspace= src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; border=>
客户端/服务器之间往返的过程其实是这样的
点击Button产生回发回发的目标页面仍然是sourceaspx所以请求仍由sourceaspx页面进行处理这样才能进入sourceaspx页面的Click事件
Click事件中ResponseRedirect(~/targetaspx)所作的事情实际上就是
将回复中Http报头的状态码改成
指明指向的页面就是targetaspx
浏览器(用户代理)收到回复的报头信息后
将URL地址栏的地址改成targetaspx
向targetaspx发出请求 和ResponseRedirect()同样着名的是ServerTransfer()但使用ServerTransfer你会发现页面对应的状态码是且地址栏的url并不会发生改变仍然是sourceaspx!这是因为ServerTransfer是完全在服务器端进行跳转的所以一种很流行但我觉得不那么正确的说法就是应当使用ServerTransfer()而不是ResponseRedirect()来提高性能因为在得到ServerTransfer()性能提升的同时你应该权衡性能的提高和由此产生的代价很难直接给出一个答案这需要依靠具体的情景来做判断
但我倾向于尽量不使用ServerTransfer()因为 性能提升不大节约的其实就是报头信息的往返 清晰的URL无论对于终端用户还是开发调试都有很重要的作用 好了理解了也就好办了意味着重定向是暂时的而则是永久的重定向
就SEO而言为了延续链接价值和排除重复内容 我们在以下几种情况下都可能会用到 域名更换 多个域名间映射如和两个域名其实指向的是同一个网站这就会造成大量的重复内容对网站的排名不利 清除默认索引页的重复问题比如我们输入/article/时如果在IIS里进行了设定将指向/article/Defaultaspx 其他的不同域名相同内容的重复问题典型的就是URL重写后/article/l和/articleaspx?id=指向的其实都是同一个网页内容 对于最直观的理解就是页面不存在如果网站是纯静态的这很好理解但当网站做成动态之后如/article/l(映射为/articleaspx?id=)虽然id=的文章已经被删除了或者根本不存在但articleaspx这个页面始终是存在的所以HTTP报头的状态码不会是而是表示请求成功我们假设一个网站有id=//……的文章都被删除了但蜘蛛并不知道它仍然会进行抓取结果它发现这些不同的URL对应的居然全是同一个页面它就会将其当做重复页面进行处理 意味着程序内部出现异常比如/代码如下
protected void Button_Click(object sender EventArgs e)
{
int i j;
i = ;
j = ;
thisLabelText = (i / j)ToString();
}
如果搜索引擎接到一个的状态码时搜索引擎会理解程序只是出现了暂时性的错误它会在之后继续抓取查看问题是否已经解决这并不会给网站带来太大的问题——只要你能够尽快恢复但是自带的个custom error的nfig配置会让我们在不经意间失误理由和上面讲到的变类似当转向自定义的erroraspx之后蜘蛛得到的是成功链接erroraspx的代码所以蜘蛛会以为报错的originpageaspx正常的显示内容就是erroraspx的内容不同url参数的originpageaspx会被蜘蛛认为是不同的url所以蜘蛛会认为这些所有的url都重复了——后果是很严重的
好了认识到问题的严重性之后我们来看解决问题的办法太简单了呵呵
protected void Page_Load(object sender EventArgs e)
{
//如果你希望搜索引擎知道这个url将不再使用
ResponseStatusCode = ;
//如果你希望告诉搜索引擎这个url只是出现了暂时的故障
ResponseStatusCode = ;
//如果你想永久重定向该页面
ResponseStatusCode = ;
ResponseRedirectLocation = @\website\targetaspx;
}