Content personalization
Enterprise license required
Features described on this page require the Kentico Xperience Enterprise license.
Content personalization is an on-line marketing technique that creates pages with different content depending on the circumstances in which they are viewed. For example, you can build pages that offer special content for different types of visitors or dynamically change for each user according to the actions they performed on the website.
When developing MVC websites, you can take two different approaches to create personalized content:
- Allow marketers to personalize content added through page builder widgets
- Write personalization conditions directly in the code of your MVC site’s pages
Setting up personalization of page builder widgets
- Set up the page builder for your MVC site.
- Prepare some pages with editable areas for the page builder.
- Develop widgets and sections that allow your site’s editors to add the required content.
- Develop personalization condition types.
- Enable content personalization in Xperience:
- Open the Settings application.
- Navigate to the On-line marketing settings category.
- Select the Enable content personalization checkbox.
- Click Save.
Marketers can now personalize widgets on pages where the page builder is enabled, using the condition types that you developed.
Writing personalization conditions in MVC code
In addition to personalization of page builder widgets, you can write personalization conditions directly within the code of your MVC site’s controllers, views or other classes. The conditions can leverage the visitor segmentation tools that marketers define within the Xperience application – Contact groups or Personas.
Prerequisite
You first need to set up Tracking of contacts on your MVC website before defining personalization conditions based on contact groups, personas or other contact properties.
Note: The Settings -> On-line marketing -> Enable content personalization setting does not have any effect on content personalization conditions written directly in code.
Personalizing content based on contact groups
We recommend using Contact groups to personalize your MVC site’s content:
Define contact groups to segment your website’s visitors (in the Contact groups application within Xperience).
Use the contact tracking API to get the current contact in your MVC site’s code.
Create conditions to display different content for contacts who belong to different contact groups.
Call one of the following extension methods for the current contact object within the conditions:
IsInContactGroup – evaluates whether the contact belongs to one specific contact group.
IsInAnyContactGroup – evaluates whether the contact belongs to at least one of the specified contact groups.
IsInAllContactGroups – evaluates whether the contact belongs to all of the specified contact groups.
All of the methods return a boolean value that you can use in your content conditions.
The methods accept one or more string parameters, which must match the code names of contact groups. To find the code names, edit contact groups in the Contact groups application in Xperience.
The system segments your website’s visitors into contact groups, for example according to performed activities. Your MVC site then displays personalized content depending on the contact groups to which the current visitor (contact) belongs.
@using CMS.ContactManagement
@{
// Gets the current contact
ContactInfo currentContact = ContactManagementContext.GetCurrentContact();
}
@if (currentContact != null)
{
// Displays personalized content for contacts belonging to the "YoungCustomers" contact group
if (currentContact.IsInContactGroup("YoungCustomers"))
{
<text>Hiya @currentContact.ContactFirstName</text>
}
else
{
<text>Hello</text>
}
}
Personalizing content for personas
If you use Personas to segment your site’s visitors, you can create conditions and serve different content for different personas.
To check whether a contact is assigned to a persona:
- Get the contact’s persona by calling the GetPersona() extension method for the contact object (requires a reference to the CMS.Personas namespace).
- Create a condition that checks the code name of the persona (or any other persona property).
using System;
using CMS.ContactManagement;
using CMS.Personas;
// Gets the current contact
ContactInfo currentContact = ContactManagementContext.GetCurrentContact();
// Gets the code name of the current contact's persona
string currentPersonaName = currentContact?.GetPersona()?.PersonaName;
// Checks whether the current contact is assigned to the "EarlyAdopter" persona
if (String.Equals(currentPersonaName, "EarlyAdopter", StringComparison.InvariantCultureIgnoreCase))
{
// Serve personalized content for the "EarlyAdopter" persona
}
Using output caching for personalized pages
When using ASP.NET output caching to improve the performance of your MVC website, you need to take additional steps to ensure that the output cache correctly stores personalized pages. Because personalized pages serve different content based on various conditions, you need to adjust your application to cache separate output versions according to the personalization criteria.
See Caching the output of personalized content for more information.
Using client-side only output caching
An alternative approach that you can consider is to set the Location property of your OutputCache attributes to System.Web.UI.OutputCacheLocation.Client. This disables output caching on the server.
With only client-side caching, each client device caches its own personalized content and you do not need to define custom cache variables. This scenario is easier to set up for heavily personalized pages, but the performance gains are usually lower than with optimally configured output caching for both the server and client sides.