Rebuilding a DXA website using Umbraco
By Dylan Hebb
Recently, we were approached by a company who ‘inherited’ a SDL Web DXA website. Since the website was rather small, and a solution using the SDL product suite was a bit of overkill, we advised the client to migrate the solution to a different CMS.
Since the client was already using Umbraco for some of their other sites, we quickly agreed that we’d go for an SDL Web to Umbraco migration.
The Umbraco content model
We started off by building a content model, so we knew what we needed to build in Umbraco. We gathered all schemas, listed all fields, and with this information, we created a series of Umbraco Document Types that would hold the same information.
One of the great features of Umbraco is that the user interface for editing fields is very extensible. There are a large amount of field editors out of the box, and you can always create your own. This allowed us for example to build something similar to SDL Web’s Catagories & Keywords functionality, to allow to add reusable tags to our content. Similarly, we were also able to use content pickers that would serve as a replacement for component links in our original SDL Web content.
Also the ability to make content models ‘inherit’ content structure is some very handy feature. However, it does require some extra planning/thinking while building your content model, so you can make optimal use of this.
Building an MVC app
Once we had our content model built, we could start building the functionality and views. Similarly to DXA, Umbraco now uses the Asp.NET MVC model to build a website. Out of the box, Umbraco takes care of all routing, and default controllers, in order to show our content (so luckily, not much work was needed there), so we could quickly start building our views..
Umbraco also comes with a Model Generator, which builds all the mvc models for you, saving a lot of work.
The views can be built using Razor templating code, so the combination of the model builder, the default controllers and simplicity of razor templating allowed us to build a series of pages in no time.
Just like in DXA, it’s possible to create your own controllers and actions, so whenever you need to implement some custom functionality, this is easy to do. We used this for example by creating a controller for our search page.
Searching the website
Which brings us to the search functionality. Many sites provide some kind of search functionality, to easily retrieve any kind of content on the website.
DXA has a great module for this, which uses the SI4T extension, so you can index all of your content using Solr.
Umbraco also has similar built in functionality. Out of the box, all of the content you create gets indexed using a Lucene index (there is little to no configuration needed to set this up). As a result, building a search page requires just setting up a template to display your search results, and making some calls to the Umbraco API to query Lucene (Umbraco uses an extension for this called “Examine”.
Our project also extensively used faceted search functionality. This isn’t supported out of the box, but we added a .NET version of the Bobo Browse plugin (http://senseidb.github.io/bobo/), so this could also be implemented with ease.
Migrating the data
Finally, we had to make sure that all of the SDL Web content was migrated to our new Umbraco website. For this, we had two options
- Use the SDL Web core service api to read all of the content in SDL Web, and insert in our Umbraco instance, using the Umbraco Content Service.
- Manually copy the content from SDL Web to Umbraco
Since the amount of content wasn’t very large, and the content also required some manual editing, we chose to go for a manual migration. Our content editors moved over all content, and at the same time did some QA on the new website, so at the end of our migration process, all content was correctly moved over, and our site was (almost) fully tested as well.
At the time of writing, the site isn’t in production yet, as the customer is currently doing some final acceptance testing, but going live should be a breeze.
Especially since we’re using the Umbraco Cloud setup. This is a cloud service offered by Umbraco, where everything is set up using MS Azure infrastructure. All you need to worry about is to build your templates, create some content, and deploy your project (code & content) to a live server.
So, are you saying we can simply say goodbye to SDL Web ?
My answer would be, definitely not. Umbraco is a great product, and can quickly be set up and used to build a website. However, when you have a multitude of sites translated in multiple languages, served to people all over the world, you may want to keep investing in an SDL Web license, as it gives much functionality that Umbraco doesn’t : blueprinting, workflows, integration with translation systems, and extensive publishing model, ability to consume your content using .NET, Java, PHP, Python, (insert any other web framework here).
I also have the impression that with Umbraco, it’s easier to “break” your site. In Tridion for example, it’s very hard to delete anything as long as it’s published, or in use by another page or component. With Umbraco these validations appear to be less strict, which could possibly result in broken links if your content editors delete something by mistake.
So, the key point is that, for each type of site, a there is a different optimal solution. Content Bloom has a team of experts who will help you get the most of your next web project, so don’t hesitate to contact us.
How to Connect Tridion Docs to an External Taxonomy Using the PoolParty API
Connecting Tridion DOCS to a Taxonomy using the PoolParty API is one of the most empowering tools you can provide a content author/editor.
How to Support Your Organization with Sitecore Content Hub
Learn how Sitecore improved content effectiveness and omni-channel deployment to solve their very own content crisis.
How to Make the Shift from On-Premise to Cloud
Contemplating making the shift from hosting and managing your infrastructure on-premise to the cloud?