HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

## Prerequisites

As part of the onboarding for the tracking service, Optimizely sends the required **subscription keys** and **tracking URLs** to the technical contact for your project. Use the keys to configure the tracking for your websites. [Contact Optimizely](🔗) for questions regarding the onboarding process.

You need Visual Studio, and the [Optimizely Visual Studio extension](🔗), to install the sample site used in the example. See [Install Optimizely](🔗).

## Create a sample site with tracking

This example creates an Optimizely Content Management System (CMS) sample site (Alloy) and adds tracking components using Visual Studio.

  1. Create a new project in Visual Studio, based on the Optimizely (Episerver) templates.


  1. Select the Alloy (MVC) sample site.


  1. When you have installed the sample site, use the Package Manager Console in Visual Studio to add Profile Store tracking.


  1. To install the main tracking package, enter **install-package EPiServer.Profiles.Client** at the Package Manager Console prompt (PM>), with package source set to Optimizely NuGet feed.


  1. To configure the site tracking account, open _web.config_, and add or modify the following in the \<appSettings> section:

  • episerver:profiles.TrackingApiSubscriptionKey. Subscription key for the tracking account. The subscription key URL is sent together with the URL when an account is created.

  • episerver:profiles.ProfileStoreTrackingEnabled. Enabled tracking for _EPiServer.Profiles.Client_; from the site to Profile Store. Setting this to false, or removing it, stops Optimizely from tracking data to Profile Store.


    Both `episerver:tracking.Enabled` and `episerver:profiles.ProfileStoreTrackingEnabled` values must be set to true to track data to Profile Store.

  • episerver:tracking.IgnoreDNT. Causes the tracking system to _ignore_ the DNT (DoNotTrack) header when set to true. Use this with caution to not make visitors upset.


## Install CMS integration for tracking additions

The CMS integration package for Profile Store tracking contains some additions to tracking, for example scope handling. You should install this package on an Optimizely CMS site.

Enter **install-package EPiServer.Tracking.Cms** at the Package Manager console prompt (PM>).


## Isolate tracking events and profiles in a multi-site

You can isolate tracking events and profiles using [scopes](🔗).

A scope separates tracking requests to the site ID of the site where data was tracked. The default implementation for a scope when installing `EPiServer.Tracking.Cms` is the SiteId for the site from which the tracking event was sent. Tracking events sent from a multi-site therefore are isolated in its different sites.

You can modify this behavior by setting the scope in one of the following ways:

  • In _web.config_, go to the \<appSettings> section, and change value of `ProfileStoreTrackingEnable` to true. Also, add a new key `episerver:profiles.Scope`.


    Keep the scope values lowercased.

  • Implement an `EPiServer.Tracking.Cms.ITrackingDataInterceptor`. Implementing a custom tracking data interceptor is handled in [a separate article](🔗).


    You can override the implementation for `Scope` in configuration file by setting `episerver:profiles.Scope` to the value you choose.

## Track events from Optimizely Campaign

When using Optimizely Campaign with Visitor Intelligence , the following events can be tracked from Optimizely Campaign to Profile Store: MailingToUser, Open and Click. You can use the event data to configure [filter definitions](🔗) that are used to [create segments](🔗).

The Optimizely Campaign events contain the following property fields:

  • `EventType [string]` – The type of the event.

  • `Value [string]` – The mailing name.

  • `Scope [string]` – The scope for the event. See [Scopes](🔗).

  • `RemoteAddress [string]` – The IP address of the mailing recipient.

  • `Subject [string]` – The mailing name.

  • `TrackID [integer]` – The unique ID of the event.

  • `User [object]` – A property where values of the recipient are stored in the form of a JSON object.

    • `email [string]` – The email address of the mailing recipient.

  • `Payload [object]` – property where values of the event are stored in the form of a JSON object.

  • `DeviceId [string]` – The user ID; the email address of the mailing recipient.

  • `PageUri [string]` – The URL of the online version of the mailing.

  • `PageTitle [string]` – The mailing name and optionally the mailing description.

  • `EventTime [string]` – The date and time, in UTC, when the event occurred.

**Click event example**