• Publisert
  • 4 min

EPiServer Commerce essentials 5: Search, performance and analytics

When creating an e-commerce site, it's important to give your customer relevant content. Good search capabilities and responsiveness are key features in delivering a good experience.


Many commerce sites on the web today have extensive search functionality. Things like relating products together, finding similar purchases as your own, finding related editorial content and filtering a product are typical scenarios. You can get a decent start by using the built in search in EPiServer, but you should really consider looking into another search engine. While everything is technically possible with the built in Lucene engine, it's not a very efficient API to work against. Typical features a customer might expect is:

  • In general, a good free text search that actually gives you relevant hits.
  • Search faceting - the ability to "drill down" into your search results based on categories and properties of your products.
  • Finding other relevant products based on what you're currently browsing, or possibly what you have browsed earlier.

Just having a neat search engine available might spark your creativity to come up with good ideas for your customer too - which is always appreciated. Keep in mind the extremely high expectations of todays online shoppers. And today, when standing out on the web is key to survival for many businesses, there might be no alternative.


When building an e-commerce site, you should expect to spend time implementing proper analytics. As a web shop will be a direct source of income for a business, this is more important here than on a regular CMS site.

Apart from the obvious taslk of choosing an analytics provider (I suppose Google Analytics will be the default choice for many), there is stuff to consider. There are a lot of things you can be tracking, here are some examples:

  • Page views - this is the default thing every analytics provider gives you
  • Purchases. Will this be done server-to-server, or via scripts on the client side? What will it contain?
  • Tracking movements from campaign pages into checkout
  • Tracking what products are added to the shopping cart - and then tracking the amount of people actually ending up buying.
  • All of the above, put together with demographics like location, age, genders (if you have this info in the customers user profiles)

Do not underestimate the work effort it is to get this tracking right all over your different product templates, categories, normal editorial content and checkout pages. Plan ahead - this quickly steals a lot of time.


Performance is crucial on e-commerce sites. Any delay might just affect your sales more than you think. However, remember that a lot of typical performance tweaking can be extremely expensive and can go on forever. A few basic things should be in place regardless.

How you should approach this point will vary greatly by the the complexity of the site. Your basic options when it comes to improving performance (in addition to the caching that EPiServer already does for you):

  • The HTTP cache. If you do a lot of custom model construction, which you are very likely to do, this might come in handy. Keep in mind that a product list might combine data from several different sources and adjust its style and behaviour depending on all this data.
  • Lazy loading, i.e. getting data "AJAXy" after page has loaded. Can in many situations speed up the experience quite a bit.
  • If using custom databases of some sort, like you might just end up doing, make sure data from those are cached at an apropriate level.
  • Avoid relying on third party web services to displaying your pages. If you need data from a third party, retrieve it and cache it somehow - don't rely on waiting for other services on every page load.
  • Minify and bundle stylesheets and script files. This has become super easy today, and is a cheap way to gain some precious seconds here and there.
  • Remove stuff. Yes - actually. If you need to display data from fewer sources, your back end logic will be simpler, and page performance will increase. It might not be worth sacrificing that half a second of loading time just to include the inventory status for all your warehouses on one page.
  • Output caching. This should ideally be your last way of optimizing, as it will make it difficult to maintain dynamic content on your pages. That said, it does indeed have a purpose, you just have to be in total control of what parameters the output cache is controlled by (hostnames, query string parameters, user data...). Implement your own varyByCustom method if needed.

There are probably tons and tons of other techniques that can (and sometimes should) be applied. These things do indeed apply to other projects than just e-commerce sites too, but when dealing with shopping and directly making money from your site, they can't be overlooked. Time should be set aside already from the getgo to do tweaks in performance, and there should be a clear plan in how analytics is done.

You will probably have to compare your features against the major forces on the web (Amazon and ebay comes to mind). Everything they have and do, might just pop up on your customer's wish list. That's where the bar is at.

This blog post is part of the series EPiServer Commerce project essentials which will give you a few tips on how to plan your projects.