现在的位置: 首页 > 综合 > 正文

ASP.net 4.0 针对SEO的改进

2013年10月26日 ⁄ 综合 ⁄ 共 2781字 ⁄ 字号 评论关闭

搜索引擎优化对任何面向公众的网站来说都非常重要,ASP.net 4.0 为此就做了大量改造。这些改进包括如下:

301永久性重定向

随着时间的迁移,网站的一些页面地址会发生变化,这会导致搜索引擎收录的链接地址、用户收藏的地址失效。Response.Redirect() 就是解决这个问题的。但是Response.Redirect 有以下问题:

Response.Redirect()方法产生的是个 HTTP 302 跳转,在用户尝试访问老的URL时,会导致多余的HTTP往返。另外搜索引擎一般不会跟随多个跳转,这意味着使用一个临时转向会负面影响你的网页排名。 

我之前写过博客,介绍如何实现301跳转,“从HTTP状态 301,302,200 来看页面跳转” 那时候实现 301 跳转比较麻烦,ASP.net 4.0 为此专门增加了Response.RedirectPermanent() 方法用来解决这个问题。

简单来说,如下表所示:

HTTP状态 解释 程序代码
301 301 代表永久性转移(Permanently Moved)
即永久性重定向
Response.RedirectPermanent("test_2.aspx");
302 302 代表暂时性转移(Temporarily Moved ) Response.Redirect("test_2.aspx");

MVC 中也有类似的代码:Response.RedirectToRoute(string routeName) 和 Response.RedirectToRoutePermanent(string routeName)

Head 中的 keywords 和 description

由于搜索引擎优化作弊的原因,现在搜索引擎正在淡化这两个关键字的参考作用。比如这篇博客:“Keywords和Description--SEO高手为什么不用” 就描述了原因。但是如果可以,建议还是设置这两个关键字,ASP.net 4.0 中为方便设置这两个关键字专门做了优化,我们可以通过下面简单几行代码就可以完成动态设置:

protected void Page_Load(object sender, EventArgs e)
{
    Page.Title = "测试标题";
    Page.MetaKeywords = "测试关键字";
    Page.MetaDescription = "测试简介";
}
或者在ASPX 文件中如下写:
Scott那个例子估计是更早测试版本的,那时候是 Keywords , Description ,而不是 MetaKeywords 和 MetaDescription。

ASP.NET Web Forms也支持了URL导向

简洁、直观的URL,搜索引擎喜欢,用户也喜欢。在ASP.NET 4.0中,URL Routing既可以映射到ASP.NET MVC控制器类,也可映射到基于ASP.NET Web Forms的网页。
你甚至可以在一个项目中,混合使用含有 Web Forms 和 MVC控制器,即:使用单一一套导向规则在它们之间映射URL。
下面是一个简单的例子:
Global.asax 中注册路由规则:
void RegisterRouters(System.Web.Routing.RouteCollection routes)
{
    routes.MapPageRoute(
        "my-Test-Route",    // 路由名称--随便自己爱好起了
        "p/{key}",           // 路由规则
        "~/WebForm1.aspx"    // 该路由规则交给哪一个页面来处理
        );
    // ......  当然,你可以继续增加更多的自己的路由规则
}

void Application_Start(object sender, EventArgs e)
{
    RegisterRouters(System.Web.Routing.RouteTable.Routes);  
}
测试接受请求的页面代码,为了进行测试,我们这里接受所有参数,并显示出来,方便理解:
protected void Page_Load(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("this.Page.RouteData.Values");
    sb.AppendLine("
"); foreach (var item in this.Page.RouteData.Values) { sb.AppendFormat("{0}={1}
/r/n
", item.Key, item.Value); } sb.AppendLine("this.Page.Request.QueryString"); sb.AppendLine("
"); foreach (var item in this.Page.Request.QueryString) { sb.AppendFormat("{0}={1}
/r/n
", item, this.Page.Request.QueryString[item.ToString()]); } sb.AppendLine("this.Page.Request.Form"); sb.AppendLine("
"); foreach (var item in this.Page.Request.Form) { sb.AppendFormat("{0}={1}
/r/n
", item, this.Page.Request.Form[item.ToString()]); } Response.Write(sb.ToString()); }

完成上述代码,我们就可以通过不同URL的请求测试了。

比如我们访问 http://localhost:3215/p/abc?s=1 ,测试的结果就是:

this.Page.RouteData.Values

key=abc

this.Page.Request.QueryString

s=1

this.Page.Request.Form

 

参考资料:

VS 2010 和 .NET 4.0 系列之《ASP.NET 4 中的SEO改进 》篇

http://blog.joycode.com/scottgu/archive/2010/01/06/115842.joy

.NET 4的新特性:图表、SEO及可扩展的输出缓存

http://www.infoq.com/cn/news/2010/02/.NET-4-Charts-SEO-Cache

Asp.Net4.0/VS2010新变化(4):SEO的改进

http://www.cnblogs.com/yjmyzz/archive/2010/03/05/1679235.html

Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由

http://www.cnblogs.com/yjmyzz/archive/2010/03/05/1679140.html

抱歉!评论已关闭.