iFinity Blogs 

Case Study : Multilanguage ecommerce with Url Master and Catalook

by Bruce Chapman on Wednesday, December 12, 2012 9:56 PM

Probably the most common request I get these days is a variation on ‘how can I modify this Url to be more friendly’.   The Url provided as an example is always a variation of a forum thread, blog post, event entry or e-commerce product.   It usually involves a Url that includes lots of ‘tabId’ and ‘productId’ values, and little or no keywords or contextual information about what is on the page itself.

In fact these types of requests have been coming through for nearly 5 years now, which is about how long ago I started writing the Url Master module from very humble beginnings of a hacked-up copy of the DNN Friendly Url provider.

It’s more than twelve months since I launched the concept of Custom Module Url Providers, which are small plug-ins which provide a connection between the Url generation and rewriting of DotNetNuke, and third party content modules installed in DotNetNuke.   When I launched this, I built a provider for the DotNetNuke Blog module (which is why you see the Urls you see on this blog).  I also released as commercial products providers for the popular News Articles Provider, and the Catalook ecommerce module, which many people will be familiar with.

One of the early adopters of the Catalook plugin was Jose Cardoso of Refresh Multimedia.    The first site this was to be rolled out on was rather ambitious : a large product catalog including 32 advanced Catalook categories, 2000 products, and 6 languages to be supported.   The requirement was to have a clean, friendly and unique Url for each product and each category in each language.  There would be none of these :

  • ‘tabid’
  • ‘.aspx’
  • ‘default’
  • ‘productId’
  • ‘categoryId’
  • ‘categoryType’
  • ‘language’

If you’re used to looking at a multi-language catalook store, you’d be left wondering what was going to be left in the Url.   The answer is simple : just the category name or product name, cleaned up, non-ascii characters replaced, and nice and simple.  In fact, this site has 12,000 unique product urls, each localized and optimized for the products.

Case Study : Multi Language E-Commerce Site with Catalook

The site is called velvetbull.com, and is a wine site which sells wines from a variety of countries, to a variety of countries, using a wide variety of languages.


Some example Urls are:

Australian Wines (Portugese) : http://www.velvetbull.com/vinhos-por-pais/vinho-da-australia

Australian Wines (French) : http://www.velvetbull.com/vins-par-pays/vin-daustralie

Australian Wines (Italian) : http://www.velvetbull.com/paesi/vino-da-australia

Penfolds Bin 128 Shiraz (Portugese) : http://www.velvetbull.com/penfolds-bin-128-shiraz-2009-vinho-tinto-ptpt1073

Penfolds Bin 128 Shiraz (German) : http://www.velvetbull.com/penfolds-bin-128-shiraz-2009-rotwein-dede1073

(Penfolds make a very nice red, if you’re interested!)

Note that the Categories are all localised, and do not include any DNN page path.  In fact none of the e-commerce catalog Urls include the DNN Page name at all, giving a much more concise and clean Url.

You’ll notice that the product Urls have a language/productId code on the end.  This is actually an option with the Url provider, because it allows redirection to take place in the case where the Url changes.  Some products will always have the same Url, but in the case of wines, the vintage changes each year.   Because the vintage changes, you need to change the product title (ie Shiraz 2009 eventually becomes Shiraz 2010) – by tagging the Url with a product/language code you can always find the latest, correct and canonical Url.

As a comparison : here is a Url from the catalook.net demo site (the version is old, but the Urls are still largely the same)


This is the type of Url that many people will be familiar with.   There is a very large difference in usability, SEO and plain aesthetics in comparison to the wine Urls listed above – and I am extremely confident that, if two sites were built identical apart from the Urls, the friendly Urls would outperform the unfriendly version in click through, SEO rankings and other metrics like successful social media shares.

Components used to build the Site

-> Url Master module – overall Url control

-> Catalook Store module – provision of ecommerce components

-> Catalook Url Provider for Url Master – links the Catalook pages to the Url Master module via friendly Urls

For the multi-language capabilities of the site, it uses multiple language packs, but does not use the DNN Multi-Language capability of running a page-per-language.  Instead, there is one single page, and the language controls the localisation of both the on-screen elements (search box, login/register, etc), and the language drives the multi-language listing capabilities of Catalook.

Site Content

In order to drive multi-language capabilities of Catalook, each product and category must get the following values set per language:

- product name

- product title

- product description

- category name

- category title

- category description.

Over a large number of products you can tell this becomes a significant translation job!

Site Configuration : How to replicate these results

1. Install the Url Master module, and the Catalook Url Provider.

2. Configure the Catalook Url Provider by going to the Admin->Portal Urls->Module Providers section, and enable the provider, and associate it with the Catalook store pages on the site.  In this case, the entire store is on a page called ‘Find Wine’, so that page is associated with the provider:


3. Choose the options for the Catalook Url Provider by clicking on the ‘Change Provider Settings’ link


4.  Ensure that you have completed all the localised content on the site, so that each product generates a unique Url

5. To ensure the search works well,  enter this value in the ‘doNotIncludeInPathRegex’ value in the Admin->PortalUrls->Regex setting section:


6. Save all changes and refresh the site.   You should now have nice, clean, multi-language Urls!

Note that the localisation in the site is driven by the language of the requested Url.  Because each product has a unique Url per language, the language can be derived and set just by knowing which language version of the product Url was requested.  So there is no need for different domain names, path qualifiers like /en and /fr.

In the case of ‘regular’ (ie, non product) pages, you can use the multi-language capabilities of the Url Master module to set unique-per-language Urls for the page, which again hide the language qualifier (see http://www.velvetbull.com/vins-avec-franchise-de-tva / http://www.velvetbull.com/tax-free-wines / etc )


I hope this sneak peek inside a complex Catalook/Url Master configuration has provided a glimpse into what is possible.   I worked with Jose to get this site working, and I understand even bigger and better Catalook installs are planned.  If you have any specific questions about the install, please ask via the comments below, and I’ll either endeavour to answer them myself, or convince Jose to fill them in.

Blogs Parent Separator Crafty Code
Bruce Chapman

The craft of writing code. The outcomes from being crafty with code. Crafty Code is tales from the coding bench.

1 comment(s) so far...

Bruce Chapman 12/12/2012

Just a reminder : anonymous comments have gone due to continual abuse by spammers. Please register to leave a comment!

Bruce Chapman
Hi, I'm Bruce Chapman, and this is my blog. You'll find lots of information here - my thoughts about business and the internet, technical information, things I'm working on and the odd strange post or two.
Connect with Bruce Chapman on Google+

Share this page
Get more!
Subscribe to the Mailing List
Email Address:
First Name:
Last Name:
You will be sent a confirmation upon subscription

Follow me on Twitter
Stack Exchange
profile for Bruce Chapman at Stack Overflow, Q&A for professional and enthusiast programmers
Klout Profile