Sitecore 8 – Create a custom personalization rule

Sitecore OOTB comes with tons of personalization rules that we can use, however there might be times where we need to create a custom rule condition that fits to the client business requirements.

Luckily with Sitecore framework that’s known easy to extend, we can easily achieve this.

Here’s the steps to create a custom personalization rule:

1.Register the tag

First of all we need to create a new tag item under /sitecore/system/Settings/Rules/Definitions/Tags


2. Register a new rule element

Create a new element folder in /sitecore/system/Settings/Rules/Definitions/Elements


3. Create a new personalization condition rule


Here I’m creating a new rule and calling it “Specific Template Name” which will do what exactly that, checking if the current context item is based on a specific template name – not really useful in real world scenario but this post is about how to setup a custom personalization rule 🙂

In the newly created rule we need to set the Text and Type fields

Text field contains the text that we’re going to present to the content author, here’s the following text that I use

the [TemplateName, StringOperator,,compares to] represents the format of input that we want to get from the content author. It follows the following format

  • OperatorId, defines the public property of the class where we want to assign the value coming from the content author input
  • StringOperator, the built-in macro that we want to use to get the input from the user. In this case this will be a string comparation operation
  • blank, this parameter will depend on the type of macro that we use, this could be a default text value if we are using the default macro,  it could be a default start path if we’re using the Tree macro  – think of it like setting a field source when we’re building a template in Sitecore. A full list of macros can be found in /sitecore/system/Settings/Rules/Definitions/Macros
  • compares to, the last parameter is the text representation that we want to show to the content author, this value is clickable and when clicked Sitecore will display the appropriate input control based on the macro that we set on the second parameter

The Type field is the full assembly name of the custom class that we want to use to perform the logic behind this personalization rule

4. Assign our custom element default tag definition to our custom tag


Of course we  can assign our custom element tag definition to one of the existing tag under /sitecore/system/Settings/Rules/Definitions/Tags so that it will automatically appear on the content author personalization rule window however if you want to make it obvious which one is your custom ones then I recommend creating your own custom tag and assign it to that

5. Assign the tag to Conditional Rendering

The last step to make the rule visible for the content author to choose from is to assign our custom tag to one of default Rules Context folder


From the picture we’re setting the tag to the Conditional Rendering rules context which will appear when the user want to personalize a certain component, but you can also some other Rules Context folders such as FXM ones.

After we assign the tag, we can verify that the custom personalization rule is available for the content author to choose from


Here’s the class that’s responsible to evaluate the custom rule condition

The class logic is simple and not doing much for the purposes of the tutorial. In a real world scenario you can make a rule that reads from a custom database, read a configuration file, call an external API (be careful with this as it will increase page load time).

This may sound like a lot of work at first compared to just creating a custom code in the rendering or similar approach. But when we consider that we’re enabling the content author/marketers to do it by themselves and removing/minimizing the dependency towards IT, it would lessen time to market and open up more possibilities for the marketers of what they can do using the platform.


15 thoughts on “Sitecore 8 – Create a custom personalization rule

    1. Hi Manu,

      You can find the other macros in /sitecore/system/Settings/Rules/Definitions/Macros (master database).

      Have a look at each of the Type field and fire up dotPeek or similar to see how they works to extend them or create your own.

  1. Thanks for the tutorial, you’ve explained it very well.

    I’ve implemented my own condition based on your example, however I’m struggling to get it to actually run.. Have checked and double checked yet I can’t see why my rule isn’t being executed!

    1. Hi Steve,

      you might want to check in your custom rule condition item if the Type field is pointing to the right full class namespace.

      It seems there was a typo in the blog post which might be the cause of your problem.

  2. Hi Rey,
    I’m trying to use the existing rule in Sitecore 8.0 “where the referrer contains value”, but its not triggering the component I’m trying to show. Any help is appreciated.


  3. I am not able to debug the class, breakpoint is not hitting at all, I have added my condition in existing Element – SOCIAL, is that a problem ?

    1. check your tracking is enabled or not in xDB.config and under site section in sitecore.config file

  4. Hi Rey,
    Cannot believe I find your tutorial now. It gives me great help in my current project. Thank you so much. However, I have some troubles with the unit tests. I mocked the Sitecore rule Context item and some object instances in the code. But I cannot mock the Compare or StringConditionOperator in StringOperatorCondition. As a consequence, when the unit tests run to the line of Compare, it always returns false. Do you have any idea about it?


  5. Hi Rey,

    I tried your steps but my personalization rule is not working. Tracking is enabled and Xdb is disabled. Even OOTB rules are also not working.
    My Sitecore Version is 8.2 Update -180406.

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.