我可以避免这种永久重定向来修复或添加slug吗?

时间:2013-03-03 21:59:15

标签: asp.net-mvc seo asp.net-mvc-routing slug redirecttoaction

我正在MVC 4中编写一个网站,并希望部分复制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-a-slug

所有路由到同一个问题并更正网址。我希望slug始终存在并且正确,即使它不需要路由。

这是我目前的实施:

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);
}

如果slug错误/缺失,我关心的是重定向。此实现可能需要两倍的工作量(按ID查询项目和slug-ify标题)以解析视图。更糟糕的是,我需要为每个动作复制重定向代码。

在代码重复,性能和SEO影响方面,我可以使用更好的实现吗?

1 个答案:

答案 0 :(得分:-1)

只为您的网页实施rel =“canonical”标签...无论如何这是好的,因为默认情况下谷歌将您的普通域名和www版本视为2个不同的网站,但它会帮助您在这里,因为谷歌将了解所有重复项你可能显示的实际上是一个规范版本的所有副本(我会使用漂亮的slug格式),任何重复项构建的链接都将被记入正确的漂亮网址,它们将显示在搜索结果页面

您可以在此处详细了解标记及其实现: http://support.google.com/webmasters/bin/answer.py?hl=en&answer=139394