ASP.NET MVC: Defining short URL-s for root level pages

Short URL-s are more and more important part of page usability as mobile internet is growing. Long URL-s are not convenient to type due to small keyboards and screens of mobile devices. Also short URL-s are easier to remember and using well chosen short URL-s your pages may also get better rankings in search engines indexes. In this posting I will show you how to create short URL-s for ASP.NET MVC pages.

Default routes

Routes used by default are part of ASP.NET MVC applications right from start. After creating new ASP.NET MVC application you can find the following RegisterRoutes() method from Global.asax file.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}"
);

    routes.MapRoute(
       
"Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new
        {
            controller =
"Home"
,
            action =
"Index"
,
            id =
UrlParameter
.Optional
        }
// Parameter defaults
    );
}

IgnoreRoute() call here sais to ASP.NET MVC that *.axd files need no processing. Call of MapRoute() method creates new route and sets the following default values:

  • controller – if controller name cannot be found from URL then take HomeController,
  • action – if action cannot be found from URL then take Index() as default action,
  • id – it is optional and may be omitted.

We can define other routes too if we need.

Shortening URL of About page

As all ASP.NET MVC applications get by default also page called default we can use it to analyze its default URL and create shorter URL after that. By default, About page has the following URL:

http://yourhost/Home/About

As Home controller is all about “default” pages as activities that happen on root level of site we don’t have any good reason to keep word Home in URL. In SEO terms it increases the distance of page title and in some cases shorter URL-s perform better in search engines.

To get short URL like this:

http://yourhost/about

add the following route definition to previously shown method, right before last route definition.

routes.MapRoute(
   
"ShortAbout"
,
   
"about"
,
   
new { controller = "Home", action="about" }
);

When you run your application you can see that ASP.NET MVC generates short URL for About page automatically.

This solution works well if you have only some pages under root level of site. This is default case for many pages. Of course, it is possible to write more code and have more advanced routing that handles all short URL cases but right now I think this way you move quicker.

Conclusion

ASP.NET offers powerful routing mechanism and MVC framework makes good use of it. Sometimes we may need better URL-s for root level pages than the ones that are generated by MVC framework by default. There may be pages like About, Terms, Join, Log in etc. If we don’t have many pages on root level we can easily define new routes for these pages that offer shorter URL-s that are easier to remember and easier to type on mobile devices. Also search engines may give better rankings to our pages if we don’t use longer URL-s. We saw that it was easy to add new routes to routes collection for pages that need shorter URL. Our method works as far as there are not much pages on root level of site.

Gunnar Peipman

Gunnar Peipman is ASP.NET, Azure and SharePoint fan, Estonian Microsoft user group leader, blogger, conference speaker, teacher, and tech maniac. Since 2008 he is Microsoft MVP specialized on ASP.NET.

    5 thoughts on “ASP.NET MVC: Defining short URL-s for root level pages

    • April 17, 2011 at 8:04 pm
      Permalink

      In your case it would be easier to write a single route that would cover the same scenario as multiple ones:

      routes.MapRoute(“ActionOnly”, “{action}/{id}”, new { controller = “Home”, action = “Index”, id = UrlParameter.Optional });

      And when you want to cover other controllers as well, you may add some route constraints that limit action names to particular ones as:

      routes.MapRoute(“ActionOnly”, “{action}/{id}”, new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }, new { action = “about|index|help|settings|account|etc…” });

    • April 19, 2011 at 1:31 pm
      Permalink

      @Robert,

      I like your solution…I assume you could make this a string that comes from a database or a config file (the delimited actions)?

      Thanks

    • January 14, 2012 at 1:12 pm
      Permalink

      Thanks Robert! I was looking for a solution for a SEO better URL in MVC3 and Roberts comment gave the final touch with the use of constraint in the route.

    • September 23, 2018 at 3:30 am
      Permalink

      Hello there! Quick question that’s entirely off topic.
      Do you know how to make your site mobile friendly? My
      blog looks weird when browsing from my iphone. I’m trying to find
      a theme or plugin that might be able to resolve this
      problem. If you have any recommendations, please share. Thanks!

    • October 2, 2018 at 8:21 am
      Permalink

      Please let me know if you’re looking for a article author for your blog.
      You have some really good articles and I feel I would be a good
      asset. If you ever want to take some of the load off, I’d really like to write some content for your blog in exchange for a
      link back to mine. Please send me an e-mail if interested.
      Thank you!

    Leave a Reply

    Your email address will not be published. Required fields are marked *