4

私は MVC 4 で Web サイトを作成しており、質問をルーティングするための Stack Exchange のスタイルの一部を複製したいと考えています。例えば:

stackoverflow.com/questions/15191392および
stackoverflow.com/questions/15191392/not-the-real-titleおよび
stackoverflow.com/questions/15191392/can-i-avoid-this-redirect-to-fix-or-add-ナメクジ

すべて同じ質問にルーティングし、URL を修正します。ルーティングには不要ですが、スラッグが常に存在し、正しいことを望みます。

これは私の現在の実装です:

routes.MapRoute("Item", "{id}/{slug}/{action}",
                new {controller = "Item", action = "Index", slug = UrlParameter.Optional},
                new { id = @"\d+", slug = @"(?-i)[-a-z]*", action = @"(?-i)(|[A-Z][a-zA-Z]*)" });
routes.MapRoute("Default", "{controller}/{action}/{id}",
                new {controller = "Home", action = "Index", id = UrlParameter.Optional});

ItemController.cs

public ActionResult Index(int id, string slug = null)
{
    var item = GetItem(id);
    var itemSlug = ToSlug(item.Title);
    if (slug != itemSlug)
    {
        return RedirectToActionPermanent("Index", new {id, slug = itemSlug});
    }
    return View(item);
}

私の懸念は、スラッグが間違っている/欠落している場合のリダイレクトです。この実装では、ビューに解決するために必要な作業 (ID によるアイテムのクエリとタイトルのスラッグ化) の 2 倍の作業が必要になる場合があります。さらに悪いことに、アクションごとにリダイレクト コードを複製する必要があります。

コードの重複、パフォーマンス、および SEO への影響に関して、使用できるより良い実装はありますか?

4

1 に答える 1

0

ページに rel="canonical" タグを実装するだけです...デフォルトでは、Googleはプレーンドメインとwwwバージョンを2つの異なるサイトとして扱うため、これはとにかく良いですが、表示される可能性のあるすべての重複をGoogleが理解するため、ここで役立ちます実際には、1 つの正規バージョンのすべてのコピーであり (私はかなりのスラッグ形式を使用します)、複製のいずれかに構築されたリンクはすべて正しいきれいな URL にクレジットされ、検索結果に表示されるものになります。ページ

タグとその実装について詳しくは、 http ://support.google.com/webmasters/bin/answer.py?hl=en&answer=139394 をご覧ください。

于 2013-04-10T19:13:45.090 に答える