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

本文涉及的产品
.cn 域名,1个 12个月
简介: 本系列目录 我们经常说“404错误”,你知道他指的是什么意思么?404其实是Http报头所包含的一个“状态码”,表明该Http请求失败。那么除此之外,还有哪些常用的状态码呢?这些状态码和SEO又有什么关系呢?每次当用户代理(可以理解为就是IE和Firefox)向Web站点请求一个URL地址,服务器都会给予回复,回复内容包括两部分: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 " ;
    }
      
相关文章
|
19天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
197 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
15天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
60 2
|
7月前
|
网络协议
windows_server2012搭建iis并配置http重定向 iis转发
windows_server2012搭建iis并配置http重定向 iis转发
358 1
|
3月前
url重写重定向所有http网址到https网址
url重写重定向所有http网址到https网址
44 4
|
3月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
53 0
|
4月前
|
测试技术 API
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状态码400
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状态码400
|
5月前
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
|
5月前
|
数据采集 开发框架 .NET
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
在现代Web开发中,高效可靠的HTTP请求对应用性能至关重要。ASP.NET Core提供的`HttpClient`是进行这类请求的强大工具。本文探讨其最佳实践,包括全局复用`HttpClient`实例以避免性能问题,通过依赖注入配置预设头部信息;使用代理IP以防IP被限制;设置合理的`User-Agent`和`Cookie`来模拟真实用户行为,提高请求成功率。通过这些策略,可显著增强爬虫或应用的稳定性和效率。
130 0
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
|
5月前
|
网络协议 Go
go的net/http有哪些值得关注的细节?
go的net/http有哪些值得关注的细节?
|
6月前
|
Go
Go中 net/http 使用
Go中 net/http 使用
38 0
下一篇
开通oss服务