Select Page

Understanding your customer and giving them relevant content is critical to online marketing. Often, it is not possible to know characteristics of customer in real-time, while customer browses the site. Implicit personalization could analyze customer behavior in real-time and serve content that has the closest match to the predefined profile.

Numerous studies were conducted to examine an effect of personalization on sales and conversions. One study showed that personalization could increase sales by 20%  and another study showed a strong indication that users react negatively to irrelevant content. Sitecore has developed collection tools that can help Marketer to personalize online content. In this article, I will explore implicit personalization and core tools Sitecore has developed.


Profile – categories that house elements used to segment the visitor. Profiles are typically defined under: /sitecore/system/Marketing Control Panel/ProfilesProfile card decay is a critical element to represent content relevancy over time.

Profile key – collection of elements that roll up to the profile and used to determine most matching pattern

Profile card – set of profile keys designed to be applied to the content item

Profile Card – Persona – same as profile card, but intended to be issued to define fictional characteristics of a potential visitor.

Pattern Card – set of profile keys used to match visitor profile to its closest pattern.



Content Profiling

The first step of setting implicit personalization using Profile and Patterns in Sitecore is to create a profile category. In my example, I selected Body Types as my profile category. The thought process for this example of personalization is this: we would like to target potential users with a kind of car that they may be interested in buying. For example, the user constantly looking at convertibles, in this case, there in not much reason to believe that user would appreciate seeing Minivan as a recommendation.

The next step is to select Profile Keys. I have picked 6 keys (Sedan, Minivan, SUV, etc). The keys should be as distinct from each other as possible and be more generic, after all, this is not an explicit personalization, and as such, we are not aiming to create ‘perfect’ match for the customer.

Finally, we need to create Profile Card, that then can be used to tag content. One or more predefined profile key is selected to construct a profile. In my example, I made an assumption that someone who is interested in Famly Car, would be looking at mainly Minivans, less so on SUV and lastly, on Sedans. Now, this is based on assumption and not supported by any data. To create a better profile, historical data should be analyzed.



Profiling with Sitecore Interface

Now that profiles were created, the next step is to assign one or more profile to a content item. By default, only one profile could be assigned  to a content. This configuration can be changed by adjusting the value of “Authoring Selection” filed:


In this example, we selected ‘Multiple with Percentage’ option. This will allow a Marketer to select multiple profiles per page and allocate their weight.


Profiling Programmatically

Sitecore’s profiling engine is defined on item level by default. This works well for content available in Sitecore as an item but for external or Ajax type the Sitecore.Analytics.Tracker Assembly could be used to set profile values programmatically:

var profile=Sitecore.Analytics.Tracker.Current.Interaction.Profiles["Body Style"];
                var scores = new Dictionary<string, float>();
                scores.Add(key, value);

Profile Data Accumulation

As a user navigates, the site data gets accumulated in xDB. First, data is stored in Private and Shared sessions. Upon session end, the data gets flushed into xDB collection structure. Sitecore keeps each visit information separately in Interactions collection, but it also aggregates data for a visitor in Contacts collection. Sitecore, now, applies for a Pattern Card against collected values, using Squared Euclidean Distance formula.Lastly, the user gets tagged with one winning profile.

In my example, I clicked on Toyota Sienna page once. As a result of my visit, interaction DB was updated based on a predefined profile.


I changed a value of  Sitecore.Analytics.config -> Analytics.Patterns.MinimalProfileScoreCount  to  1  this allowed Sitecore to set profile based only on 1 visit  and as a result, Sitecore selected Family profile. Other profiles were also evaluated against all patterns, but only one was selected as winning profile.



Personalizing Content

Content and Layout can be personalize based on historical profile data – visitor personalization, or based on session profile data – visit personalization. In many cases, content relevancy may need to be reduced over time as content become less relevant. Sitecore introduced a Decay Rate. This algorithm is based on Half-Life formula and could de-value older and possibly less relevant content.


Once all configurations are complete and some profile is accumulated, we can start applying personalization rules. The Rule Set Editor  should be used to apply logic-base rules to a content.


  • Select Control for which Datasource or layout needs to be personalized
  • Click on ‘Personalize’ control button


  • Using Rule Set Editor Create a new personalization rule


  • Add more personalization rules



Data flow

  • During the visit, interactions details are stored in either private or shared session.By default, two cookies are created: ASP.NET and Sitecore Analytics


  •  Upon session timeout, data flushed to xDB system. The session flush timeout can be adjusted in Web.config.  For development, I use shorter timeouts, but it needs to be adjusted to a higher number to reduce the number of writes into Mongo DB.

The session termination can be achieved programmatically:


Data gets aggregated into Contact and Interactions collections. One annoying thing is that .NET rely on legacy UUID encoding. I recommend using Robomongo with  Legacy UUID Encoding set to .NET. The cookie value will not match what you see in Mongo, if this encoding is not set to legacy.




This is a just high-level introduction that covers main aspects of setting up profiles and pattern personalization. There are more ways to personalize content in Sitecore. Looking at Custom Rules, Campaign personalization  could be helpful to understand the possibilities of Sitecore personalization.  Currently, Sitecore relies only on N-Dimensional data algorithm to select pattern card and thus do personalization. I  plan to explore other possibilities of making this analysis more accurate. The Microsoft Machine Learning platform seems a natural way to start. It offers a number of pre-defined algorithms, including Dimensionality Reduction Algorithm, which seems a much better choice over Euclidian algorithm.