Файлы cookie и идентификация пользователей

Чтобы сообщить Google Analytics, что два обращения относятся к одному и тому же пользователю, вместе с каждым из этих обращений отправляется уникальный идентификатор пользователя.

Библиотека analytics.js применяет для этого поле Client ID – уникальную строку, которая создается случайным образом и хранится в файлах cookie браузера. Это позволяет ассоциировать с пользователем его последующие переходы на тот же сайт.

По умолчанию библиотека analytics.js сохраняет идентификатор клиента в одном собственном файле cookie _ga, однако его название, домен и срок действия можно изменить. Кроме того, analytics.js создает и другие файлы cookie: _gid , AMP_TOKEN и _gac_<property-id>. В них хранятся другие идентификаторы, созданные случайным образом, и сведения о кампании, связанные с пользователем.

Файлы cookie позволяют идентифицировать уникальных пользователей в разных сеансах, но не при смене браузеров или устройств. Если на вашем сайте есть собственная система аутентификации, то с помощью функции User ID вы можете более точно идентифицировать пользователей на всех устройствах.

В этой статье рассказывается, как изменить настройки файлов cookie и как применять поле User ID, чтобы точнее отслеживать пользователей в различных сеансах.

В таблице ниже показаны значения полей по умолчанию в файлах cookie библиотеки analytics.js.

Название поля Тип значения Значение по умолчанию
cookieName Текст _ga
cookieDomain Текст Результат следующего выражения JavaScript:
document.location.hostname
cookieExpires Целое число 63072000 (два года в секундах)

Изменить эти значения можно, задав их в параметре fieldObject команды create. Пример:

ga('create', 'UA-XXXXX-Y', {
  'cookieName': 'gaCookie',
  'cookieDomain': 'blog.example.co.uk',
  'cookieExpires': 60 * 60 * 24 * 28  // Time in seconds.
});

Поле cookieDomain задается чаще всего, поэтому команда create принимает cookieDomain как необязательный третий параметр:

ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');

Рекомендуемый фрагмент кода отслеживания JavaScript устанавливает для поля cookieDomain значение 'auto'.

ga('create', 'UA-XXXXX-Y', 'auto');

При автоматической ('auto') конфигурации домена cookieDomain analyltics.js самостоятельно подбирает домен для хранения файлов cookie.

При этом файлы cookie _ga автоматически записываются в домен самого высокого уровня из всех возможных. Например, если ваш сайт расположен по адресу blog.example.co.uk, analytics.js установит домен файлов cookie .example.co.uk. Кроме того, если analytics.js определит, что сервер работает локально (например, localhost), cookieDomain будет автоматически установлен в 'none'.

Срок действия файла cookie обновляется при каждой отправке обращения на серверы Google Analytics: к текущему времени прибавляется значение поля cookieExpires. Таким образом, если пользователь заходит на сайт раз в месяц, то при использовании значения cookieExpires по умолчанию (2 года) срок действия файла cookie не закончится никогда.

Если вы зададите для времени cookieExpires значение 0 (ноль секунд), этот файл cookie будет работать на основе сеанса, то есть его действие закончится с завершением текущей сессии браузера.

Не следует напрямую работать с наборами cookie analytics.js, поскольку формат файлов cookie в дальнейшем может быть изменен. Вместо этого необходимо использовать readyCallback для ожидания загрузки analytics.js, а затем получать значение clientId, размещенное в счетчике.

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

Как отключить файлы cookie

Если вы хотите использовать собственную систему хранения идентификаторов (например, localStorage или Service Worker), отключите установку файлов cookie, указав в поле storage значение 'none'.

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none'
});

Если вы сохраняете значения поля clientId самостоятельно, обязательно задайте параметр cliendId при создании счетчика.

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none',
  'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3'
});

Чтобы отключить файлы cookie _gac_<property-id>, задайте в поле storeGac команды create значение false:

ga('create', 'UA-XXXXX-Y', {
  storeGac: false,
});

Хранение идентификаторов клиентов в localStorage

Ниже показано, как можно изменить фрагмент отслеживания JavaScript таким образом, чтобы хранить в объекте localStorage идентификаторы клиентов, а не файлы cookie.

var GA_LOCAL_STORAGE_KEY = 'ga:clientId';

if (window.localStorage) {
  ga('create', 'UA-XXXXX-Y', {
    'storage': 'none',
    'clientId': localStorage.getItem(GA_LOCAL_STORAGE_KEY)
  });
  ga(function(tracker) {
    localStorage.setItem(GA_LOCAL_STORAGE_KEY, tracker.get('clientId'));
  });
}
else {
  ga('create', 'UA-XXXXX-Y', 'auto');
}

ga('send', 'pageview');

User ID

User ID – это уникальный номер, который присваивается пользователю и позволяет анонимно идентифицировать его на разных устройствах или на протяжении нескольких сеансов. Подробнее о преимуществах функции User ID

Вот как настроить функцию User ID с помощью analytics.js:

  1. Присвойте каждому пользователю, вошедшему в аккаунт, уникальный постоянный анонимный строковый идентификатор (как правило, он извлекается из системы аутентификации).
  2. Задайте User ID в коде отслеживания:
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

Аутентификация после загрузки страницы

При создании одностраничных приложений или других динамических веб-сайтов, где аутентификация пользователя выполняется после загрузки страницы, нельзя настраивать User ID при создании ресурса.

В таких случаях следует добавлять в счетчик значение сразу, как только его удается получить, с помощью команды set.

// Creates the tracker and sends a pageview as normal
// since the `userId` value is not yet known.
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');

// At a later time, once the `userId` value is known,
// sets the value on the tracker.
ga('set', 'userId', USER_ID);

// Setting the userId doesn't send data to Google Analytics.
// You must also use a pageview or event to send the data.
ga('send', 'event', 'authentication', 'user-id available');

При этом обращения, отправленные, пока значение поля userId не определено, не будут содержать значения User ID. Чтобы связать эти обращения с пользователями, применяется объединение сеансов.