---
title: Configure personalized content
slug: cms-11/dev-docs/configuring-personalization
docTags: 
createdAt: 2026-07-22T19:45:18.000Z
---

## Provide access for editors to visitor groups

To access **Visitor Groups** in the global menu, you must be a member of the **CmsAdmins** or **VisitorGroupAdmins** access groups. Otherwise, a login page prompts you. If you want editors to add, edit, and delete visitor groups, you can provide access by adding them to **VisitorGroupAdmins** (**CmsAdmins** and **CmsEditors** are already defined in the configuration). The following example shows how to configure access for editors with the `virtualRoles` element in the `<episerver.framework>` section in the `web.config` file:

```xml
<virtualRoles replacePrincipal="true">
  <providers>
      ...
      <add name="VisitorGroupAdmins" 
           type="EPiServer.Security.MappedRole, EPiServer" 
           roles="WebEditors" 
           mode="Any" />
  </providers>
</virtualRoles>
```

## Enable a Geolocation provider

:::hint{type="info"}
**Note**
As of version 11.4.0 of the Optimizely Content Management System (CMS) Visual Studio extension, new CMS projects will no longer be created with a Geolocation provider configured. The Geolocation provider that has been shipped with CMS will also be removed in a future release as the MaxMind GeoLite database it depends on has been deprecated.
:::

You can enable geographic location-based visitor groups by configuring a Geolocation provider service. Episerver supplies a provider for the free GeoLite2 database from MaxMind through an optional NuGet package named `EPiServer.Personalization. MaxMindGeolocation`. You can download the GeoLite2 geolocation database from [MaxMind’s website](https://dev.maxmind.com/geoip/geoip2/geolite2/). Versions of this database are released regularly as the information is continuously updated.

The provider requires the IP lookup database (`.mmdb`) and the accompanying locations database (`.csv`) to serve an updated list of locations. Specify the location of these files in your configuration, such as:

```xml
<geolocation defaultProvider="maxmind2">
  <providers>
    <add name="maxmind2" 
         type="EPiServer.Personalization.MaxMindGeolocationProvider, EPiServer.Personalization.MaxMindGeolocation" 
         databaseFileName="path\to\GeoLite2-City.mmdb" 
         locationsFileName="path\to\GeoLite2-City-Locations-en.csv" />
  </providers>
</geolocation>
```

Alternatively, you can configure the provider in the `ConfigureContainer` method of an initialization module that implements the `IConfigurableModule` interface.

```csharp
public void ConfigureContainer(ServiceConfigurationContext context) {
  context.Services.AddMaxMindGeolocationProvider("path\to\GeoLite2-City.mmdb", "path\to\GeoLite2-City-Locations-en.csv");
}
```

:::hint{type="info"}
**Note**
Continent and Country names are localized using the usual localization in CMS while Regions are loaded directly from the Locations file.
:::

## Geographic location provided by a CDN

CMS also provides an option for retrieving geolocation from the current request as a request header when provided by the CDN. You use this option only in cases where no dedicated Geolocation provider is configured and only supports Continent and Country locations. See [Content Delivery Network (CDN) Configuration](/epiui/CMS/Content/documentation/developer-guides/CMS/Deployment/content-delivery-network-cdn-configuration,,160204/?epieditmode=False) for additional information on how to enable this option.

:::hint{type="info"}
**Note**
Support for retrieving location from request headers was added to version 11.9.0 of `EPiServer.Framework.AspNet`.
:::
