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

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

Библиотека 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 (два года в секундах)
cookieUpdate Логическое значение true
cookieFlags Текст

Чтобы изменить какие-либо из этих значений, укажите их в аргументе fieldObject команды create. Пример:

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

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

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

В рекомендованном варианте тега Google Аналитики поле cookieDomain имеет значение 'auto'.

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

Если указать значение 'auto' для поля cookieDomain, включается автоматическая настройка доменов для файлов cookie (скрипт analytics.js автоматически выбирает наилучший домен).

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

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

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

Если для cookieUpdate задано значение true (значение по умолчанию), analytics.js будет обновлять файлы cookie при каждой загрузке страницы. При этом срок действия файла cookie будет установлен по самому последнему посещению сайта. Таким образом, если срок действия файла cookie равен одной неделе и пользователь заходит на сайт с помощью одного браузера каждые пять дней, срок действия файла cookie будет обновляться при каждом посещении и, следовательно, не истечет никогда.

Если задано значение false, файлы cookie не обновляются при каждой загрузке страницы. Срок действия файла cookie задается относительно первого посещения сайта.

Дополнительные метки, которые добавляются при создании файлов cookie. Метки необходимо перечислить через точку с запятой.

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

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

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

Если вы хотите использовать собственную систему для хранения идентификаторов между сеансами (например, localStorage или Service Worker) без использования файлов cookie, вы можете отключить создание файлов cookie библиотекой analytics.js, назначив полю 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 значение false с помощью команды create:

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 не определено, не будут содержать это значение. Чтобы связывать эти обращения с пользователями, в Google Аналитике применяется объединение сеансов.