利用Routing特性提高ASP.NET MVC3站点的SEO权重
来源:互联网 发布:缉毒知乎 编辑:程序博客网 时间:2024/06/16 12:51
简介
我们在开发互联网程序的时候,有个很重要的事情就是做搜索引擎优化(SEO),我们都知道ASP.NET MVC程序提供了友好的URL以及永久重定向的支持,这些友好的URL是利用Routing系统的特性来支持的,但是在这个Routing里有个问题,就是多个不同的地址和指向同一个action方法,那对于搜索引擎来说就意味着你的站点有很多地址的内容都是重复的。 本章内容将展示如果解决这一问题。
正文
对于SEO,一个地址对应一个唯一独立的内容是保证最好权重的一个重要步骤,所以我们需要确保每一个URL地址对应的内容都是不重复的(对于MVC来说也就是不同的Action),但ASP.NET MVC3程序默认是有问题的,比如HomtController.Index这个Action方法就可以被对应到多个地址上,例如:
- http://abc.com (默认)
- http://abc.com/ (斜杠结尾)
- http://abc.com/Home (带有Controller)
- http://abc.com/Home/Action (带有Controller和Action)
- http://abc.com/home/Action (不同的情况)
等等
要解决这个问题,一个办法是使用IIE URL Rewrite Extension,但是它配置起来挺复杂的,所以在这里我们来利用MVC自己的特性来解决这一问题(通过注册全局的filter),添加如下class:
public class RemoveDuplicateContentAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var routes = RouteTable.Routes; var requestContext = filterContext.RequestContext; var routeData = requestContext.RouteData; var dataTokens = routeData.DataTokens; if (dataTokens["area"] == null) dataTokens.Add("area", ""); var vpd = routes.GetVirtualPathForArea(requestContext, routeData.Values); if (vpd != null) { var virtualPath = vpd.VirtualPath.ToLower(); var request = requestContext.HttpContext.Request; if (!string.Equals(virtualPath, request.Path)) { filterContext.Result = new RedirectResult(virtualPath + request.Url.Query, true); } } base.OnActionExecuting(filterContext); } }
然后在Global里注册filter就可以了:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new RemoveDuplicateContentAttribute()); }
我们来解释一下:
首先,RemoveDuplicateContent filter获取当我的RequestContext和RouteData,然后判断如果当前没有使用Area的话就为DataToken添加一个空值,这一点非常重要,因为如果不加的话,后面再使用Area特性的话就会出错。
接着,该filter通过RouteData获取虚拟path,然后toLower一下转换成小写。
然后,和当前request的path进行比较,如果不一致就重定向到小写的虚拟path上,这样,搜索引起就能识别当写多个请求其实都是对应到你的虚拟path那个真实的地址上,也就是说唯一对应那个action的地址上,以此来做到一个地址对应一个内容。
总结
对于SEO,确保一个地址对应一个内容是非常重要的,因为如果多个地址对应一个内容的话,搜索引起不知道到底你的这些地址哪个是最新哪个是旧的,因为可能就会降低你的权重。
- 利用Routing特性提高ASP.NET MVC3站点的SEO权重
- 利用Routing特性提高ASP.NET MVC3站点的SEO权重
- 利用ASP.NET的三种缓存提高站点性能
- 利用ASP.NET的三种缓存提高站点性能
- 利用ASP.NET的三种缓存提高站点性能
- 利用ASP.NET的三种缓存提高站点性能
- 利用ASP.NET的三种缓存提高站点性能
- SEO提高网站权重的方法
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 充分利用ASP.NET的三种缓存提高站点性能
- 分析URL Routing和URL Rewriting两者之间的不同
- POJ 3162 Walking Race (树形DP)
- Appstore上最好玩最创意最华丽的手游--<仙剑砖块传说>
- 【南阳OJ分类之大数问题】题目+AC代码汇总
- Android开发工具之ADT
- 利用Routing特性提高ASP.NET MVC3站点的SEO权重
- Play! Framework 学习笔记(一):初识Play
- Android UI学习之SeekBar
- hdu1026 Ignatius and the Princess I(BFS+路径记录)
- 最锋利的Visual Studio Web开发工具扩展:Web Essentials详解
- 刻录光盘
- eclipse怎样自动排版
- 在ASP.NET 4.0 Web form上使用Routing优化URL
- 课程笔记 04 :数据结构(清华) 向量-查找算法