Try our conversational search powered by Generative AI!

Alexander Haneng
Sep 5, 2011
(3 votes)

EPiServer CMS Checklist: Starting Development Checklist

After developing EPiServer for 4 years you realize there are some mistakes that crop up way to often. And most of them is a 30 second job if you do it at the start of the project, but might take literally days if you want to correct it in production (both to debug and fix).


Deployment checklist

Make sure to also run through the EPiServer CMS Deployment Checklist when you are ready to deploy your project.


The Dropit list

This list of course greatly influenced by the excellent Checklist for deploying EPiServer sites on the Dropit blog by Andreas Nylin.


Feedback wanted

This list is by no means the definitive list of what to do when starting a new EPiServer CMS, but more a collection of my own experience, experiences made by my excellent colleagues in Making Waves and of course all the great blog posts out there. And as such I am going to update the list with your feedback so please leave your feedback in the comments.




Set uiMaxVersions = 20

Set uiMaxVersions to 20 in the episerver.config file (in sitesettings). It is important to set this property before the site goes into production as changing it later is difficult. (You would have to republish EVERY page on the site)

Reason: The default setting is to keep unlimited number of versions of each page. This is a problem for two reasons: 1. Performance 2. The version list gets very long for editors


Force ASP.Net to Render the Same HTML for All Browsers

  Provide default capabilities for all browsers

ASP.Net has a major “bug” that causes it to render different HTML based on User Agent. This creates cache problems as well as hinders HTML validation. To ensure that ASP.Net treats all visitors as having modern browsers add the following in web.config:

<xhtmlConformance mode="Strict" />


Upgrade to .Net 4.0


Upgrade your site to .Net 4.0

Step 1: Set target framework for your project to .Net 4.0

Step 2: Install the nuget package EPiServerCMS6ToNetFour from

(New to Nuget? Get the Nuget Visual Studio add on first, then add the feed

Step 3: Build

Note: Remember to run EPiServer Deployment Center as a .Net 4.0 application when you want to use it on your 4.0 site.


CSS & Java Script compression/bundling


Add SquishIt

SquishIt will bundle and compress your *.js and *.css files and is very easy to use.

The easiest way to get SquishIt is to install the SquishIt nuget package from the “NuGet offical package source”. Alternatively you can download it directly.

See this great article to learn how to use SquishIt. You will be up and running in minutes.




Create an unique TITLE tag for every page automatically

An unique title tag MUST be generated for each public page on the site. Use the heading property as default and fall back to the PageName. It should also be possible to override by the editor (use a page property). Reason: The title tag is very important for SEO and is also visible to the end user


Create an unique META DESCRIPTION tag for every page automatically

An unique meta description tag MUST be generated for each public page on the site. Use the introduction property as default and fall back to the MainBody text. It should also be possible to override by the editor (use a page property).

Reason: Although the meta description tag does not affect ranking, it is sometimes shown in the search results and affects click through rate.

  Only use one H1 tag per page and it used for the main heading

No page should have more than one H1 tag. Make sure to use CustomTagName="h1" on the EPiServer:Property control to render the correct HTML.

<EPiServer:Property CustomTagName="h1" PropertyName="Heading" ID="Property1" runat="server" />

Reason: H1-H6 should only be used for headings and in the correct order. H1 should be used for the main heading only!




Set the right Master Language from the start

Go into admin mode and activate just the languages you need. Also ensure that the correct language is set as the Master Language.

Reason: Changing master language later might force you to do some nasty direct changes in the database.



  Use the FilterForVisitors filter. Always!

Too many times EPiServer sites crashes because the customer deletes a page or a page expires due to stop publish being set. An expired page should not result in a 500 server error!


Develop faster


Make EPiServer start up faster after each build

EPiServer often takes a long time starting after each build, something that can steal a lot of your development time. You can make it faster by following these 3 steps:

1. Delete all the .xml files in the lang folder for languages you don’t need (make a backup first)

2. Preventing initializing of known assemblies. It is easy!

3. Do an automatic warm up after build



Update 29.09.2011:

Set stringDelayedLoadThreshold = 50

Due to an issue with setting stringDelayedLoadThreshold to something else than 0 and LinkItemCollections and problems with some custom properties this item has been removed from the list.


And finally: Good luck with your EPiServer project!

Posted by

Sep 05, 2011


Sep 5, 2011 11:24 AM

Always inherit your Global.asax file from EPiServer.Global.

Sep 5, 2011 06:57 PM

I'd like to add handling the robots.txt file to the list? You could always use EPiRobots as available on the EPiServer Nuget feed (shameless plug).

Frederik Vig
Frederik Vig Sep 6, 2011 12:27 PM

* Upgrade to .NET 4
* add stylecop settings
* setup build environment
* setup XML transformation for configuration files
* setup test and other environments
* setup automatic deployment to all environments
* setup default folder structure (for templates, scripts, images etc)
* add to source control system
* add default libraries (extensions,, PTB etc)
* add CSRF token
* disable BOM for all files
* Add NuGet package that fixes bugs with IE10 and Firefox 5
* Added HTML 5 stuff to web.config (MIME etc)
* configure SMTP
* add testing libraries and projects
* add log handling
* add CSS/JS compression/bundling
* add automatic validation of HTML, CSS, JS, web.config, security + all other tests to build script.

I'm sure I forgot something, but that's it for now :).


Jarle Friestad
Jarle Friestad Sep 6, 2011 12:44 PM

I tried to set the "stringDelayedLoadThreshold = 50", but it resulting in LinkedItemList properties returning as null when using PageTypeBuilder.

Sep 6, 2011 03:22 PM

Your whish is our command :) I added better default values for uiMaxVersions and stringDelayedLoadThreshold in vNext. We have on our backlog to improve startup time. Do you use optimizeCompilations attribute as well ? I am considering if we should add it by default or not.

Sep 7, 2011 11:31 AM

Wow! I must blog more often ;-)

Thanks a million for the better default values for vNext Per! Is going to save us many, many hours.

Haven't used optimizeCompilations, but whatever makes is faster is a great help.

Frederik Vig
Frederik Vig Sep 8, 2011 06:39 PM

@Per could you tell us some more what updates you're doing to improve startup time?

Sep 12, 2011 04:41 PM

After upgrading to .NET 4 set ViewStateMode="Disabled" in the main master page to turn off viewstate on the whole site.

Sep 26, 2011 11:21 AM

David: Robots.txt is in the deploy checklist.

Sep 26, 2011 12:36 PM

Checklist updated: Added .Net 4.0 and SquishIt.

Sep 28, 2011 02:52 PM

Checklist updated: Removed stringDelayedLoadThreshold = 50. See note at the end of the checklist.

Please login to comment.
Latest blogs
Optimizely and the never-ending story of the missing globe!

I've worked with Optimizely CMS for 14 years, and there are two things I'm obsessed with: Link validation and the globe that keeps disappearing on...

Tomas Hensrud Gulla | Apr 18, 2024 | Syndicated blog

Visitor Groups Usage Report For Optimizely CMS 12

This add-on offers detailed information on how visitor groups are used and how effective they are within Optimizely CMS. Editors can monitor and...

Adnan Zameer | Apr 18, 2024 | Syndicated blog

Azure AI Language – Abstractive Summarisation in Optimizely CMS

In this article, I show how the abstraction summarisation feature provided by the Azure AI Language platform, can be used within Optimizely CMS to...

Anil Patel | Apr 18, 2024 | Syndicated blog

Fix your Search & Navigation (Find) indexing job, please

Once upon a time, a colleague asked me to look into a customer database with weird spikes in database log usage. (You might start to wonder why I a...

Quan Mai | Apr 17, 2024 | Syndicated blog