本系列目录

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

转载于:https://www.cnblogs.com/freeflying/archive/2010/02/24/1672308.html

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

  1. 关于http的各种状态码--内容转自其他博客

    2019独角兽企业重金招聘Python工程师标准>>> 最近帮朋友开发个小app,该app是在外层加一个壳,我们android端使用webview加载对方已经使用html5做好的网页 ...

  2. (chap4 Http状态码) 3XX重定向

    3XX响应结果表明浏览器要执行某些特殊的梳理以正确处理请求. 301 Moved Permanently 永久重定向.该状态码表示请求的资源已经被重新分配了新的URI,以后应该使用资源现在所指的URI ...

  3. HTTP状态码(重定向/error 301/302)

    1. HTTP状态码 当浏览器访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接受并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的英文为HTTP status Code ...

  4. 301 302状态码【重定向】

    http状态码 1.301 302 区别: 开场自白:本人前端菜鸡一枚,经验缺少,没遇到过301 302只知道是重定向,有次被问到它俩的区别我懵逼了,查看一下大家的,自己记录一下,加深印象 重定向(R ...

  5. 服务器响应码418,HTTP状态码是什么?与SEO相关的有哪些?

    HTTP状态代码(如404,301和500)对于常规访问者来说可能没什么意义,但对于SEO,它们非常重要.不仅如此,搜索引擎蜘蛛如Baiduspider使用这些蜘蛛蜘蛛来确定网站的健康状况.这些状态码 ...

  6. HTTP状态码完整介绍

    2019独角兽企业重金招聘Python工程师标准>>> HTTP状态码是什么?HTTP状态码有什么用处?如何处理HTTP状态码能够和搜索引擎更友好?技巧在哪里?更有利于网站优化?HT ...

  7. Servlet+常用头信息+响应状态码+响应对象

    一.Servlet 1.概念 什么是Servlet? 1.Servlet 是 java EE 的规范之一.也就是接口.Servlet 接口定义了一套网络请求的规范2.Servlet 是 javaweb ...

  8. 很实用的一篇HTTP状态码

    100系列码 从100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们 是很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示 ...

  9. 服务器状态304,解析304状态码错误提示的原因与解决304错误提示的方法

    对于第304页的错误,一直是SEO工作人员老生常谈的话题.初始网站管理员对304错误非常敏感.互联网上总是有与之相关的新闻,比如:大量的304状态码会在网站上被降级,但这是真的吗? 一.304错误提示 ...

最新文章

  1. Java知多少(23)类的基本运行顺序
  2. 经典的异或题:只出现一次的数字
  3. XP共享访问无权限解决方法
  4. 企业实战_19_MyCat初始化ZK并配置Mycat支持ZK
  5. Closure--1
  6. 95-847-040-源码-Netty-netty在Flink运行时的简介
  7. 优化理论05----最速下降法、最速下降法思想、python实现
  8. python货币转化为资本的前提_深度剖析比特币背后的技术细节
  9. 【雷达通信】《现代雷达系统分析与设计》大作业【含Matlab源码 285期】
  10. Java多线程篇之List与Collections集合工具类
  11. 【机器人学】机器人运动学基础
  12. SPSS使用命令语法之复制与粘贴讲解
  13. PayPal支付时出现“该商家目前无法接受PayPal付款。请稍后重试,或返回商家页面并选择其他付款方式。”
  14. openstack中虚拟机CPU与内存布局设计(三)
  15. C语言及程序设计初级—分离整数与小数部分
  16. 【C语言】详解 calloc 函数用法
  17. 纯Web前端打造的元宇宙展厅——开箱即用的Lingo3D游戏引擎 支持原生、React、Vue
  18. Linux | crontab定时任务及开机自启项
  19. 自己经验AP 月结对账过程
  20. ChatGPT会让程序员失业?ChatGPT:“ 是友军,我不从事任何职业。

热门文章

  1. vsftpd 与TCP_wrapper 结合限制用户的ip地址登录
  2. libpcap介绍(一)
  3. 微型计算机硬件及其应用,《微型计算机硬件软件及其应用例题习题集》.pdf
  4. 复旦高等代数 I(17级)每周一题
  5. IDC:以太网交换机市场增长2%
  6. js笔记——call,apply,bind使用笔记
  7. log4net配置学习 之 日志等级
  8. TweetBot TabBar
  9. T-SQL DISTINCT
  10. 疯狂的程序员-第五章