Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SEO URLs with ASP.NET MVC

Is there a definite DO and DONT when implementing seo urls? A lot of good practise seems fine for .html sites but breaks down on medium/large database sites.

AFAIK the url should be www.mysite.com/category/page-name-here

If I wish to make a content rich site and be default the category and page are database driven - does this prevent me from having pages such as www.mysite.com/about or www.mysite.com/home as the about and home pages could conflict.

Although the routing engine is flexible, is the above feasible and/or worthwhile?

-edit-

Just to elaborate on my question, is it possible to control the routing engine with a database?

It is good practice for the url to contain a meaningful description - eg stackoverflow.com/category/mvc and stackoverflow.com/questions/seo-urls-with-asp-net-mvc is good (as opposed to stackoverflow.com/category/9955 and stackoverflow.com/questions/734583)

As an expirment, I would like to take the control to another level, lets say that the two controllers above (category and questions), each showing dynamic data could be amended to be simply stackoverflow.com/mvc and stackoverflow.com/seo-urls-with-asp-net-mvc.

I would need to ensure that my database contained a table that tells me that the former is to be routed as a category and the latter as a questions - this could be achieved by a simple database lookup and would need to be implemented within Global.asax

My question is, can this be achieved and what would be the potential pitfalls.

like image 898
Gavin Avatar asked Apr 09 '09 14:04

Gavin


1 Answers

It's easily feasible if you add the harcoded routes above the generic ones:

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

They could all use the same controller if you wanted, but it might be a bit easier if they used separate ones.

The only problem you would have with this is if you had a category called "about" or "home" but this is unlikely I would imagine.

It should also be noted that you don't have to use ASP.NET MVC to use the routing capability.

like image 110
Garry Shutler Avatar answered Oct 13 '22 10:10

Garry Shutler