おっさん手記(14):Routing特性を利用してASPを高める.NET MVC 3サイトのSEOウェイト
4339 ワード
概要
私たちがインターネットプログラムを開発するとき、重要なことは検索エンジンの最適化(SEO)をすることです.私たちはASPを知っています.NET MVCプログラムは、Routingシステムの特性を利用してサポートされている友好的なURLと永続的なリダイレクトのサポートを提供していますが、このRoutingでは、複数の異なるアドレスと同じactionメソッドを指す問題があります.それは検索エンジンにとって、あなたのサイトに多くのアドレスがあることを意味します.この章では、この問題が解決される場合について説明します.
本文
SEOの場合、1つのアドレスが1つの唯一の独立したコンテンツに対応することは、最良の重みを保証する重要なステップであるため、各URLアドレスに対応するコンテンツが重複しないことを確保する必要がある(MVCにとっては異なるActionである)が、ASP.NET MVC 3プログラムのデフォルトは問題があります.例えば、HomtController.IndexというActionメソッドは、例えば、複数のアドレスに対応することができる. http://abc.com(デフォルト) http://abc.com/(スラッシュ末尾) http://abc.com/Home(コントローラ付き) http://abc.com/Home/Action(コントローラとアクション付き) http://abc.com/home/Action(異なる場合) など、この問題を解決するにはIIE URL Rewrite Extensionを使用しますが、構成が複雑なので、ここではMVC独自の特性を利用してこの問題を解決し(グローバルフィルタを登録することによって)、次のclassを追加します.
それからGlobalにfilterを登録すればいいです.
説明しましょう.
まず、RemoveDuplicateContent filterは、私のRequestContextとRouteDataを取得し、現在Areaを使用していない場合はDataTokenに空の値を追加することが重要です.追加しないと、後でAreaプロパティを使用するとエラーが発生するためです.
次に、このfilterはRouteDataで仮想pathを取得し、toLowerは一気に小文字に変換します.
そして、現在のrequestのpathと比較し、一致しなければ小文字の仮想pathにリダイレクトすることで、検索により、複数のリクエストが実際にあなたの仮想pathに対応する真実のアドレス、すなわちそのactionに唯一対応するアドレスであることを認識し、1つのアドレスが1つのコンテンツに対応するようにすることができる.
まとめ
SEOでは、1つのアドレスが1つのコンテンツに対応していることを確認することが重要です.複数のアドレスが1つのコンテンツに対応している場合、検索はあなたのこれらのアドレスがどれが最新でどれが古いのか分からないため、重みを下げる可能性があります.
英文原文:http://weblogs.asp.net/imranbaloch/archive/2011/12/19/solving-duplicate-content-issue-in-asp-net.aspx
同期と推奨
この文書はディレクトリインデックスに同期されました:『おじさん手記全集』
おじさんの手記:日常の仕事の中の各種の小さい技巧と資料(技術に限らないことを含むが)を記録することを目的として、もしあなたに役に立つならば、おじさんに書く動力を推薦してください.
私たちがインターネットプログラムを開発するとき、重要なことは検索エンジンの最適化(SEO)をすることです.私たちはASPを知っています.NET MVCプログラムは、Routingシステムの特性を利用してサポートされている友好的なURLと永続的なリダイレクトのサポートを提供していますが、このRoutingでは、複数の異なるアドレスと同じactionメソッドを指す問題があります.それは検索エンジンにとって、あなたのサイトに多くのアドレスがあることを意味します.この章では、この問題が解決される場合について説明します.
本文
SEOの場合、1つのアドレスが1つの唯一の独立したコンテンツに対応することは、最良の重みを保証する重要なステップであるため、各URLアドレスに対応するコンテンツが重複しないことを確保する必要がある(MVCにとっては異なるActionである)が、ASP.NET MVC 3プログラムのデフォルトは問題があります.例えば、HomtController.IndexというActionメソッドは、例えば、複数のアドレスに対応することができる.
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に唯一対応するアドレスであることを認識し、1つのアドレスが1つのコンテンツに対応するようにすることができる.
まとめ
SEOでは、1つのアドレスが1つのコンテンツに対応していることを確認することが重要です.複数のアドレスが1つのコンテンツに対応している場合、検索はあなたのこれらのアドレスがどれが最新でどれが古いのか分からないため、重みを下げる可能性があります.
英文原文:http://weblogs.asp.net/imranbaloch/archive/2011/12/19/solving-duplicate-content-issue-in-asp-net.aspx
同期と推奨
この文書はディレクトリインデックスに同期されました:『おじさん手記全集』
おじさんの手記:日常の仕事の中の各種の小さい技巧と資料(技術に限らないことを含むが)を記録することを目的として、もしあなたに役に立つならば、おじさんに書く動力を推薦してください.