- PVSM.RU - https://www.pvsm.ru -
Материал основан на статье Simo Ahava «customTask — The Guide» [1].
Примерно год назад (в 2017) произошло обновление JS библиотеки Universal Analytics. Обновление принесло с собой такую замечательную штуку как customTask. Данная фича, в рамках Google Tag Manager, позволяет выполнять любые «задания» до отправки хита в Google Analytics.
В оригинальной статье [2] Simo Ahava подробно/с картинками описывает механизм работы customTask и делится полезными примерами. Также можно ознакомиться с официальным мануалом [3] по библиотеке Universal Analytics, где дано описание всех тасков с очередностью их выполнения.

Порядок выполнения заданий analytics.js
Ниже представлен краткий обзор примеров использования customTask. Уверен, некоторые решения вам точно пригодятся.
1. Запись Client ID в custom dimension
Самый надежный способ передачи Client ID на текущий момент. Мануалы по настройке:
2. Дублирование хита GA и отправка его в другие места
Мануалы:
3. Удаление персональных данных из GA payload (GDRP*)
Мануал [10] от Simo Ahava.
Пригодиться в первую очередь тем, кто работает со странами Евросоюза и столкнулся с выполнением требований GDRP [11]. Данное решение позволяет убрать все персональные данные из payload'a (где-бы они не находились: URL, Custom Dimension, Event Label, etc.).
Например page path:
/test?tel=+44012345678&email=brian@me.com&other=bclifton@DOMAIN.com&firstName=brian&password=hello
после модификации customTask будет таким:
/test?tel=[REDACTED TELEPHONE]&email=b[REDACTED EMAIL]om&other=bcli[REDACTED SELF-EMAIL]OMAIN.com&firstName=[REDACTED NAME]&password=[REDACTED PASSWORD]
4. Трекинг офлайн пользователей
Мануал [12] от Simo Ahava.
Решает проблему разорванного соединения т.е. например, когда конект обрывается, то отправка хита не заканчивается ошибкой (т.к. нет конекта), а закрепляется в очереди в localStorage. Когда конект возобновляется — хит отправляется. Полезно проектам с высокой долей аудитории с мобильного трафика с нестабильным конектом (часто ездят в метро например).
5. Учет пользовательского согласия на отправку данных в GA (GDRP*)
Мануал [13] от Simo Ahava.
Пригодиться при выполнении требований GDRP [11]. Например у вас на сайте есть поп-ап, в котором пользователь соглашается/не соглашается на обработку своих персональных данных 3-ми лицами. При отказе, данный customTask не отправит данные в GA и DoubleClick.
6. Отправка ID эксперимента Google Optimize в GA
Мануал [14] от Simo Ahava.
Помогает с проблемой отображения данных Google Optimize в GA. Во время эксперимента пользователю присваиваются переменные Experiment Name и Experiment ID. Привязать эти данные к конкретным сессиям/сегментам — проблема, с которой помогает справиться данный customTask. Таск проверяет Page View тег, если он содержит данные об эксперименте — записывает их в custom dimensions и отправляет хит.
7. Auto Link Domains в виде регулярного выражения
Мануал [15] от Simo Ahava.
Решает проблему невозможности использовать регулярные выражения в поле Auto Link Domains при настройке междоменного трекинга.
Если вы захотели объединить несколько решений в одном customTask, то необходимо помнить следующие правила работы с customTask:
Пример объединения нескольких решений в один customTask
Что объединяем:
function() {
var newTrackingId = 'UA-12345678-1';
return function(model) {
//Define client ID
model.set('dimension1', model.get('clientId'));
// Add the PII patterns into this array as objects
var piiRegex = [{
name: 'EMAIL',
regex: /(?<=emailAddress=|email=).+(?=@)/gi
}];
var globalSendTaskName = '_' + model.get('trackingId') + '_sendHitTask';
// Fetch reference to the original sendHitTask
var originalSendTask = window[globalSendTaskName] = window[globalSendTaskName] || model.get('sendHitTask');
var i, hitPayload, parts, val, oldTrackingId;
model.set('sendHitTask', function(sendModel) {
// Overwrite sendHitTask with PII purger
hitPayload = sendModel.get('hitPayload').split('&');
for (i = 0; i < hitPayload.length; i++) {
parts = hitPayload[i].split('=');
// Double-decode, to account for web server encode + analytics.js encode
val = decodeURIComponent(decodeURIComponent(parts[1]));
piiRegex.forEach(function(pii) {
val = val.replace(pii.regex, '[REDACTED ' + pii.name + ']');
});
parts[1] = encodeURIComponent(val);
hitPayload[i] = parts.join('=');
}
sendModel.set('hitPayload', hitPayload.join('&'), true);
originalSendTask(sendModel);
// Rewrite the tracking ID
hitPayload = sendModel.get('hitPayload');
oldTrackingId = new RegExp(sendModel.get('trackingId'), 'gi');
sendModel.set('hitPayload', hitPayload.replace(oldTrackingId, newTrackingId), true);
originalSendTask(sendModel);
});
};
}
Сначала определяем Client ID. Затем, через регулярные выражения, указываем какие персональные данные мы хотим искать. В данном примере задан только один параметр — email. Можно добавить больше (см. мануал Simo Ahava [10]).
Следующий шаг — проверяем payload на наличие персональных данных и перезаписываем его. Последние шаги — отправка модифицированного payload в оригинальный GA property и дублирование/отправка в другой GA property.
Если у вас есть еще примеры использования customTask — поделитесь опытом. Буду рад дополнить статью.
Автор: alunet
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/280939
Ссылки в тексте:
[1] «customTask — The Guide»: https://www.simoahava.com/analytics/customtask-the-guide/
[2] оригинальной статье: https://www.simoahava.com/analytics/customtask-the-guide/#how-tasks-work
[3] официальным мануалом: https://developers.google.com/analytics/devguides/collection/analyticsjs/tasks
[4] От BurgerData: https://burgerdata.com/blog/kak-peredavat-clientid-cherez-customtask/
[5] От Simo Ahava: https://www.simoahava.com/gtm-tips/use-customtask-access-tracker-values-google-tag-manager/
[6] Отправка в несколько GA property: https://www.simoahava.com/gtm-tips/send-google-analytics-tag-multiple-properties/
[7] Отправка в Google Sheet: https://habr.com/post/353836/
[8] Отправка в Google Bigquery: http://dmitriilin.com/exporting-data-google-analytics-google-bigquery/
[9] Отправка в Snowplow: https://www.simoahava.com/analytics/automatically-fork-google-analytics-hits-snowplow/
[10] Мануал: https://www.simoahava.com/gtm-tips/remove-pii-google-analytics-hits/
[11] GDRP: https://piwik.pro/blog/gdpr-interview-aurelie-pols/
[12] Мануал: https://www.simoahava.com/analytics/track-users-who-are-offline-in-google-analytics/
[13] Мануал: https://www.simoahava.com/gtm-tips/respect-opt-out-from-advertising-and-analytics/
[14] Мануал: https://www.simoahava.com/analytics/send-event-custom-dimension-google-optimize-experiment-running/
[15] Мануал: https://www.simoahava.com/gtm-tips/auto-link-domains-with-regex/
[16] Источник: https://habr.com/post/359196/?utm_campaign=359196
Нажмите здесь для печати.