ASP.NET MVC中的SEO友好URLs

5
请问在实现 SEO URL 时有没有明确的 DO 和 DONT?很多好的做法对于 .html 网站似乎没问题,但在中大型数据库网站上却行不通。
据我所知,URL 应该是 www.mysite.com/category/page-name-here。
如果我想要一个内容丰富的网站,类别和页面默认是由数据库驱动的,那么这会阻止我拥有像 www.mysite.com/about 或 www.mysite.com/home 这样的页面,因为 about 和 home 页面可能会发生冲突。
虽然路由引擎是灵活的,但上述情况是否可行或值得一试?
-编辑-
只是想详细说明我的问题,是否可能用数据库控制路由引擎?
在 URL 中包含有意义的描述是个好习惯,例如 stackoverflow.com/category/mvc 和 stackoverflow.com/questions/seo-urls-with-asp-net-mvc 都很好(而不是 stackoverflow.com/category/9955 和 stackoverflow.com/questions/734583)。
作为一个实验,我想把控制提高到另一个层次。比如说,上面的两个控制器(category 和 questions),每个都显示动态数据,可以改为 stackoverflow.com/mvc 和 stackoverflow.com/seo-urls-with-asp-net-mvc。
我需要确保我的数据库中包含一个表格,告诉我前者应该被路由为 category,后者为 questions - 这可以通过一个简单的数据库查找来实现,并需要在 Global.asax 中实现。
我的问题是,这样做是否可行,有哪些潜在的风险。

我作为一名程序员认为这需要付出很大的努力才能获得微不足道的收益,但是根据SEO人员告诉我的,他们的整个存在就是由许多微小的收益所定义的。 - Gavin
2个回答

9

如果在通用路由之前添加硬编码的路由,那么很容易实现:

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

如果您愿意,它们都可以使用相同的控制器,但是如果它们使用不同的控制器可能会更容易一些。

唯一的问题是,如果您有一个名为“about”或“home”的类别,那么这将是一个问题,但我想这不太可能发生。

还应该注意,您不必使用ASP.NET MVC来使用路由功能


5
为了避免您提到的静态页面(关于、主页等)的问题,您可以采取几种不同的方法:
  1. 将动态类别页面放在单独的路径中(例如 www.mysite.com/shop/category/page-name-here)。
  2. 将静态页面放在单独的路径中(例如 www.mysite.com/pages/about)。现在您不能有一个名为“pages”的类别,但其他所有类别都可以。
  3. 将静态路由放在动态路由之上。这并不理想,因为如果您给类别命名不当,它可能会潜在地隐藏类别页面,但即使您选择了#1或#2,您仍然需要这样做作为一种预防措施。

其他注意事项/警告:

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

  2. 您需要有一种处理名称更改的策略。如果类别名称或页面名称更改了,您需要有一些东西来将链接重定向到旧名称的新名称,以获得最大的SEO效果。您还需要确保类别/页面的新名称与另一个类别/页面的旧名称不同,这增加了一些复杂性。

尽管如此,这是可行的,并且在我看来非常值得。特别是如果您预计大多数流量来自搜索引擎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接