视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ASP.NET MVC3 SEO优化:利用Routing特性提高站点权重
2020-11-27 22:36:53 责编:小采
文档


简介

我们在开发互联网程序的时候,有个很重要的事情就是做搜索引擎优化(SEO),我们都知道ASP.NET MVC程序提供了友好的URL以及永久重定向的支持,这些友好的URL是利用Routing系统的特性来支持的,但是在这个Routing里有个问题,就是多个不同的地址和指向同一个action方法,那对于搜索引擎来说就意味着你的站点有很多地址的内容都是重复的。 本章内容将展示如果解决这一问题。

正文

对于SEO,一个地址对应一个唯一的内容是保证最好权重的一个重要步骤,所以我们需要确保每一个URL地址对应的内容都是不重复的(对于MVC来说也就是不同的Action),但ASP.NET MVC3程序默认是有问题的,比如HomtController.Index这个Action方法就可以被对应到多个地址上,例如:

1.http://abc.com (默认)
2.http://abc.com/ (斜杠结尾)
3.http://abc.com/Home (带有Controller)
4.http://abc.com/Home/Action (带有Controller和Action)
5.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,确保一个地址对应一个内容是非常重要的,因为如果多个地址对应一个内容的话,搜索引起不知道到底你的这些地址哪个是最新哪个是旧的,因为可能就会降低你的权重。

英文原文:http://weblogs.asp.net/imranbaloch/archive/2011/12/19/solving-duplicate-content-issue-in-asp-net.aspx

以上这篇ASP.NET MVC3 SEO优化:利用Routing特性提高站点权重就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

下载本文
显示全文
专题