网站建设
  简约型网页设计套餐998
  实惠型网站建设套餐2580
  综合型网站制作套餐4980
  网站改版与网站维护
  行业网站建设方案
  大型网站建设解决方案
  企业网站建设流程
  帝网科技网站设计与网站制作
建站FAQ
·网站空间问题解答
·企业邮箱问题解答
 
酷站欣赏
·房产酷站(379)
·综合门户(8 9)
·建筑装饰(603)
·手机通讯(354)
·生活购物(376)
·医疗保健(199)
·文化摄影(602)
·休闲体育(399)
>>更多酷站欣赏
网站优化
·Google(谷歌)优化   ·百度(BaiDu)优化
·雅虎(Yahoo)优化    ·Alexa排名优化   
·Google AdSense   ·DMOZ目录提交  
建站知识
·网站建设知识·网站名词解释·网站运营知识
·网络营销知识·搜索引擎知识·实用技术文摘
网站推广
百度网站推广 google网站推广
搜狐网站推广 网易网站推广
新浪网站推广   雅虎网站推广
  您当前位置: 当前位置:帝网科技 >> web开发 >> .NET专栏 >> 浏览文章
 
 
ASP.NET的SEO:使用.ashx文件——排除重复内容
作者:佚名 来源:帝网科技 日期:2010年02月23日 点击数:


  不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为“重复内容”,如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高。所以我们应尽量避免各种重复内容。

  动态网站的重复内容常常是由URL参数引起的,而URL重写会恶化这一现象(比较耐人寻味哟,呵呵)。因为如果使用的是原始的URL参数的话,搜索引擎可能会进行适当的判断,而得知重复内容是由URL参数引起的,自动的进行相应的处理;而URL重写会掩盖URL参数,反而使得搜索引擎无法识别URL参数。比如:

  原始的URL:

  http://www.freeflying.com/articles.aspx?id=231&catelog=blog

  http://www.freeflying.com/articles.aspx?id=231&catelog=news

  经过URL重写过后的URL:

  http://www.freeflying.com/blog/231.html

  http://www.freeflying.com/news/231.html

  这些URL所指向的页面内容其实是一样的,都是id=231的那篇文章,但这篇文章被blog和news两个栏目所引用,出于各种原因的考虑,我们最终的URL还是如上所示。

  处理的办法有两种,一种是利用机器人(robot)协议“排除”其中一个,另一种是通过301将其中一个URL永久重定向另一个URL。

  今天我们先讲robot协议。简单的讲,robot指的就是搜索引擎,针对Google,我们又将其称之为“蜘蛛(spider)”。蜘蛛是很有礼貌的,在抓取你的网页内容的之前,会首先征求你的意见。而你和robot之前就基于robot协议进行沟通。具体到实现,有两种方式:

  1. 将一个的robots.txt文本添加到网站根目录下,如:

  #static content, forbid all the pages under the "Admin" folder

  User-agent: *

  Disallow: /Admin

  #行表示注释;

  User-agent指搜索引擎,*表示针对所有搜索引擎,也可以指定具体的搜索引擎,如User-agent: googlebot;

  Disallow指定不允许访问的目录或页面,注意:1. 此文本是大小写敏感的;2.必须以“”开头,表示网站根目录;

  和本系列的宗旨一样,我们着重谈ASP.NET技术。所以更多的robots.txt文本的注意事项,请查看http://www.googlechinawebmaster.com/2008/03/robotstxt.html

  但我们怎么动态的生成这个文件呢(这种需求其实蛮多的)?可能我们马上想到的就是I/O操作,在根目录下写一个txt文件……,但其实还可以有一种方法:使用一般处理程序(.ashx文件),代码如下:

  代码

  <%@ WebHandler Language="C#" Class="Handler" %>

  using System;

  using System.Web;

  public class Handler : IHttpHandler {

  public void ProcessRequest (HttpContext context) {

  HttpResponse response = context.Response;

  response.Clear();

  //response.ContentType = "text/plain"; 如果要用IE6查看页面的话,不能这一条声明,原因不详

  //下面这两句在实际使用中应该数据库等动态生成

  response.Write("User-agent: * n");

  response.Write("Disallow: /news/231.html n");

  //引用一个静态的robots文件内容,里面存储不会改变的屏蔽内容

  response.WriteFile("~/static-robots.txt");

  response.Flush();

  }

  public bool IsReusable {

  get {

  return false;

  }

  }

  }

  一般处理程序实现了IHttpHandler,在前面UrlRewrite部分中,我们讲到了HttpModule,其实在ASP.NET的应用程序生命周期中,有一个称之为“管道(pipeline)”的概念:一个HTTP请求,经过一个有一个的HttpModule的“过滤/处理”,最终到达一个HttpHandle的“处理器”部分,HttpModule和HttpHandle就组成了一个“管道”.

  如果你对它还比较陌生的话,查看Page的源代码,你会发现,Page也实现了IHttpHandler,所以*.aspx文件是最常用的HttpHandle。但Page不仅仅是一个HttpHandler,它还嵌入了复杂的页面生命周期事件,所以从节约资源的角度考虑,很多时候我也可以使用自定义的、更轻量级的*.ashx文件(),来完成一些简单的工作。和生成一个txt文件类似,我们还可以生成验证码(jpg文件),xml文件等。

  然后还要做的一件事就是进行URLRewrite:

  代码

  void Application_BeginRequest(object sender, EventArgs e)

  {

  // Code that runs on application startup

  HttpContext context = HttpContext.Current;

  string currentLocation = context.Request.Url.LocalPath;

  if (currentLocation.ToLower() == "/website1/robots.txt")

  {

  context.RewritePath("~/Handler.ashx");

  }

  }

  这样,蜘蛛就会以为在网站的根目录下的确存在一个robots.txt文件。

  2. 在需要屏蔽的页面META标签里加上

  

  noindex 意味着该页面不能被索引

  nofollow 意味着该页面不能被“跟随”(将在SEO Hack中详细讲解)

  这是静态页面的效果,如果需要动态生成,也相当简单:

  代码

  protected void Page_Load(object sender, EventArgs e)

  {

  HtmlMeta meta = new HtmlMeta();

  meta.Name = "robots";

  meta.Content = "noindex,nofollow";

  this.Header.Controls.Add(meta);

  }

  meta中还可以指定description、keyword等,其技术实现是相同的。

  那么,两种方式我们如何选择呢?我的一些建议:

  1. 尽量使用robots.txt,这既能降低网站的负载(虽然很小,呵呵),因为蜘蛛查看了robots.txt文件之后,就不会再请求被屏蔽的相关页面了;而如果使用meta方式,蜘蛛必须先请求该页面,再做出不检索的判断,这时Http请求已经发出了,服务器端的资源就已经浪费了;另外,如果过多的meta屏蔽,也会使蜘蛛对网站产生不佳的印象,减少或放弃该网站的检索收录;

  2. robots.txt文本的匹配时从左到右的,这里就没什么正则匹配了!所以有的时候,我们不得不使用meta方式了。如我们文章开始的URL:

  http://www.freeflying.com/blog/231.html

  http://www.freeflying.com/news/231.html

  最后,再讲一些注意事项:

  1. 不要在所有页面使用相同的Keyword和Discription,这是我们很容易犯的一个错误,虽然articles.aspx是一个页面,但加上url参数后,就变成了成千上万个页面,如果你在页面上写死了Keyword和Discription,那将使这成千上万个页面都是一样的Keyword和Discription!

  2. 尽量避免使用基于URL的SessionID。ASP.NET在客户端禁用cookie的情况下,可以设置使用基于URL的SessionID,效果类似:

  http://www.freeflying.com/(S(c3hvob55wirrndfd564))/articles.aspx

  相关文章
 
·ASP.NET使用log4Net日志组件教程(日志
·ASP.NET MVC 框架
·C#实现的BinaryTree
·WebForms使用System.Web.Routing
·ASP.NET获取远程网页下载到本地文件
·一个“简单”的ASP.NET的服务器控件
·ASP.net与PHP两大网站开发架构优势对比
·教你七招提高.NET网站性能
·ASP.NET未来:简化开发 HTML5性能提升
·ASP.NET实现类似Excel的数据透视表
·FileUpload上传多文件出现错误的解决方
·.NET从优酷专辑中采集所有视频及信息(
·ASP.NET 4中的SEO改进
·详解Asp.net MVC DropDownLists
·提高ASP.NET应用程序性能的几招方法
·asp.net实现51job地区选择效果
·ASP.NET中创建GeoRSS订阅源
·ASP.NET 4.0开发更加简便
·ASP.NET页面间数据传递的方法
·ASP.NET的SEO:使用.ashx文件——排除
 
 

公司环境 | 合作伙伴 | 人才招聘 | 付款方式 | 关于我们

地址:广州市天河区中山大道中120号D805 电话:020-82529556 传真:020-82529556
广州帝网网络科技有限公司 版权所有 粤ICP备08119341号