Login Gblog  
简单点~~~
 
文章全文
Goberl 发表于 2008-10-12 3:33:36

引言

  SEO是“ Search Engine Optimization”的简写。他是一门提高网站流量的艺术、手段和科学。
  学会怎样构建网站和网页以改进搜索引擎对网站和网页的编排已经成为SEO中的重要组成部分。
  在这篇文章中,我们将看到最常见的SEO方法——创建标准的URL链接。
  目前,大多数网站都是基于数据库驱动的或者是属于动态网页,他们几乎都是通过查询字符串来传递数据的。搜索引擎的爬行通常不会索引url中存在问号或者其他字符的网页。如果搜索引擎不能识别网站的页面和内容,就意味着这个网站的网页失去了(许多)存在的页面。怎样解决这个问题呢。这篇文章将利用一个简单的WebSite工程来讨论以上涉及的问题。

标准的url

  标志的url是通过没有存在问号或其他(特殊)字符来传递数据的url,这些url将会最大化地被搜索引擎索引,从而提高你网站的排名。相比动态的URL,搜索引擎更喜欢静态不变的url。
   一个动态的url是一个查询数据库或者执行某段脚本的网页地址。相比静态url,动态url对应的内容始终保持一致除非编入HTML的编码被改变,动态url产生于查询网站数据库。这些动态页面仅仅是展示数据库查询结果的模板。
   搜索引擎不会索引动态url的原因,是由于这些链接中包含了不规范的字符,例如?,&,%,=等等,任何不规范的字符都将被忽略。例如,如下链接:
      http://www.myweb.com/default.aspx?id=120
   忽略了不规范字符后,链接将会呈现如下状态:
      http://www.myweb.com/default.aspx
   这些完全不一样的url链接被搜索引擎忽略了不规范字符后都将呈现为相同url,从而导致搜索引擎不会索引你的所有动态页面。搜索引擎会

索引如下样式的链接:
     http://www.myweb.com/page/120.aspx
  虽然目前的搜索引擎在优化它们对动态url的索引情况,但是它们更偏爱于静态url。


创建符合SEO的标准url

  这个webSite工程到底有什么功能呢?它能够创建标准的url以使你网站的排名提高。
  在这个示例中,我们先看看下面的链接:
    http://www.myweb.com/Order.aspx?Itemid=10&Item=Apple
    http://www.myweb.com/Order.aspx?Itemid=11&Item=Orange
  这个工程的功能就是把上面的链接转换成如下样式的url:
    http://www.myweb.com/shop/10/Apple.aspx
    http://www.myweb.com/shop/11/Orange.aspx
  我们首先要做的,是把含有查询字符串的url转换为具有相同内容但不含有不规则字符的url,在转换url时,使查询字符串的值以"/"结束作为url路径的一部分,使查询字符串的名称作为网页文件的名称。当点击一个被转换了的url时,我们在Global.asax 文件的Application_BeginRequest事件中重写被点击的url,使其还原为能够显示实际内容的含有查询字符串的url,而此时的实际网页文件名称是在网站的web.config中得到的。
  接下来我们详细介绍如何创建标准的url。此webSite工程展示了如何创建符合SEO的标准url,这也是一个重写url的方法。你可以在你的应运程序中利用这个方法来重写url。
 

转换url的方法——GetContextualURL

  这个方法实现了转换url的功能,其中网页名称将被作为一个参数。在示例中,我们将用如下链接来展示url的转化情况:
    "Order.aspx?Itemid=10&Item=Apple"
  此方法将以GetContextualURL("Order.aspx?Itemid=10&Item=Apple","Apple")的格式被执行。
  在这个方法中,查询字符串的值将被拆分并重组。重组的url的网页名称apple.aspx将作为实际网页名称Order.aspx的别名,而这个Order.aspx是从web.config中获取的。重组的url的格式将是如下格式:
     "~/shop/10/Apple.aspx"
   通过循环web.config的AppSettings属性,找出对应键(“apple”)的值“order.aspx”,AppSettings的键为“order.aspx”的别名。如果你需要转化更多的页面url,你就得在web.config中添加相应的别名/网页名称。
 
 

public string GetContextualURL(string Url,string PageName)
{
    string DestID = string.Empty;
    string DestAlias = string.Empty;
    string Str = Url.Split('?')[1].Split('=')[1] + "/";
    string DestPage = Url.Split('?')[0];
    string ItemID = Url.Split('?')[1].Split('=')[1].Split('&')[0];
    string NewUrl = string.Empty;

    //Get all the Key/Value pairs from web.config

    string[] KeyList = WebConfigurationManager.AppSettings.AllKeys;

    //Iterate the collection to find the specfic key/value pair

    for (int KeyCount = 0; KeyCount < KeyList.Length; KeyCount++)
    {
        DestID = WebConfigurationManager.AppSettings[KeyList[KeyCount]].Trim();
        DestAlias = KeyList[KeyCount];
        if (DestID.ToLower() == DestPage.Trim().ToLower())
        {
            break;
        }
    }

    //Form the contextual URL

    NewUrl = "~" + DestAlias + ItemID + "/" + PageName + ".aspx";

    return NewUrl;
}



Application_BeginRequest Event

  任何向服务器发送的请求都会执行此事件,因此我在此事件中重写被转化了的url,使其还原为实际的url。在这个事件中,我先检查请求的url是否是一个被转化了的url,如果是就分解url并获得id参数和name参数,然后利用他们重组一个包含查询字符串的实际url,再执行它。
 

protected void Application_BeginRequest(object sender, EventArgs e)
{
    //Get the current http context

    HttpContext InRequest = HttpContext.Current;

    //Get the current path

    string OldPath = InRequest.Request.Path.ToLower();

    //Check the path whether it is a contextual path

    if (InRequest.Request.RawUrl.Split('/').Length > 3)
    {
        string Path = InRequest.Request.RawUrl.Split('/')[2];
        Path = "/" + Path + "/";

        string NewPath = "/furl/" + WebConfigurationManager.AppSettings[Path];
        string ItemName = InRequest.Request.RawUrl.Split('/')

[InRequest.Request.RawUrl.Split('/').Length - 1].Split('.')[0];
           
        string ID = InRequest.Request.RawUrl.Split('/')[3];

        //Rewrite the path with the actual path

        InRequest.RewritePath(NewPath, "", "?id=" + ID +

"&id2=" + ItemName, true);
       
    }
}



实际请求页

  在实际请求页order.aspx的Page_Load中获取id参数和name参数的值。
  Label1.Text = Request.QueryString[1] +", Qty "+ Request.QueryString[0];


总结

   有很多方法都可以实现SEO——网页索引,提升网站排名的战略等等,然而,让搜索引擎索引动态网页内容是SEO的首要目标,也是SEO的一个良好开端。



License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files

themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

本文来源:[http://www.codeproject.com/KB/aspnet/Friendly_URLs_in_ASPNet.aspx]

 

个人学习所用,英语水平有限,欢迎指正。Goberl翻译于2008年10月11日。源码下载
 

类别:Programming      标签:英文翻译 , ASP.NET      浏览(11)
相关主题:
操作必须使用一个可更新的查询。 让web服务器自动执行起来
利用C#+GDI创建水印图片
评论列表:
发表评论
大名: ( *必填)
Email: (填写后,将收到Goberl对你的回复)
网址: (可选)
正文:
      记住信息?