ASP.NET MVC的SEO URL

时间:2009-04-09 14:53:56

标签: asp.net-mvc routing seo

实施seo网址时是否有明确的 DO DONT ?对于.html网站来说,许多好的做法似乎都很好,但在中型/大型数据库网站上却出现了问题。

AFAIK网址应 www.mysite.com/category/page-name-here

如果我希望制作内容丰富的网站并且默认类别和网页是数据库驱动的 - 这是否会阻止我使用 www.mysite.com/about 这样的网页www.mysite.com/home 因为关于和主页可能会发生冲突。

虽然路由引擎很灵活,但上述可行和/或值得吗?

-edit -

只是详细说明我的问题,是否可以用数据库控制路由引擎?

这是一个很好的做法,网址包含有意义的描述 - 例如 stackoverflow.com/category/mvc stackoverflow.com/questions/seo-urls-with-asp-net -mvc 很好(而不是 stackoverflow.com/category/9955 stackoverflow.com/questions/734583

作为一个到期,我想将控制权提升到另一个层次,让我们说上面的两个控制器(类别和问题),每个显示动态数据都可以修改为 stackoverflow.com/mvc < / strong>和 stackoverflow.com/seo-urls-with-asp-net-mvc

我需要确保我的数据库包含一个表,告诉我前者将作为一个类别进行路由而后者作为一个问题 - 这可以通过简单的数据库查找来实现,并且需要在Global.asax中

我的问题是,这可以实现,潜在的陷阱是什么。

2 个答案:

答案 0 :(得分:8)

如果将加密路线添加到通用路线之上,则很容易实现:

// AboutController.Index()
routes.MapRoute( 
    "About",
    "about",
    new { controller = "About", action = "Index" });

// HomeController.Index()
routes.MapRoute( 
    "Home",
    "home",
    new { controller = "Home", action = "Index" });

// ArticleController.Index(string category, string pagename)
routes.MapRoute( 
    "Article",
    "{category}/{pagename}",
    new { controller = "Article", action = "Index" });

如果你愿意的话,他们都可以使用相同的控制器,但如果他们使用不同的控制器可能会更容易。

你遇到的唯一问题是如果你有一个名为“约”或“家”的类别,但我不太可能想象。

还应注意you don't have to use ASP.NET MVC to use the routing capability

答案 1 :(得分:5)

为了避免您在静态页面(关于,家庭等)中提到的问题,您可以采取一些不同的方法:

  1. 将动态类别页面放在单独的路径中(例如www.mysite.com/shop/category/page-name-here)
  2. 将静态页面放在单独的路径中(例如www.mysite.com/pages/about)。现在你不能拥有一个名为“pages”的类别,但所有其他类别都可以使用。
  3. 将静态路由放在动态路由之上。不理想,因为如果你的类别命名不佳,它可能隐藏类别页面,但即使你做了#1或#2,你仍然希望这样做只是一个案例测量。
  4. 其他警告/陷阱:

    1. 您还需要确保您的类别名称和页面名称是唯一的。在一个大型网站上,这并不总是微不足道(甚至是实际的),这可能就是为什么你看到像Stack Overflow这样的URL,其中问题id实际上在URL中,而“页面名称”部分只是SEO糖。

    2. 您需要制定处理名称更改的策略。如果更改了类别名称或页面名称,则需要有适当的位置将旧名称的链接重定向到新名称以获得最大的SEO优势。您还需要确保类别/页面的新名称与另一个类别/页面的旧名称不同,这会使图片更加复杂。

    3. 所有这一切,都是可行的,我认为这当然是值得的。特别是如果您希望大部分流量来自搜索引擎。