×
Россия +7 (495) 139-20-33

Задания и customTask в Google Analytics

Россия +7 (495) 139-20-33
Шрифт:
0 2575

Многие специалисты обходят стороной вопросы того, как изнутри работают инструменты, с которыми они взаимодействуют. Иногда даже незначительное погружение «под капот» может дать массу информации, которая поможет лучше понимать и эффективнее работать с инструментом.

Например, в Google Analytics (библиотека analytics.js) есть понятие заданий и их очереди.

На этот вопрос стоит обратить внимание, как минимум, по двум причинам:

  1. Тут происходит работа по сбору данных о хите (просмотр страницы, событие, тайминг и др.). На этом этапе данные могут быть искажены, изменены, потеряны и т. п.
  2. На этом этапе аналитик со своей стороны может изменить передаваемые данные. Добавив информацию, удалив ее или, например, отправив дубликат данных в другой счетчик.

В этой статье, опираясь на статью Simo Ahava «CUSTOMTASK – THE GUIDE» разберемся:

  1. Какие задания и в какой очередности выполняются при активации Google Analytics.
  2. Что такое customTask и как с ним работать.
  3. Рассмотрим примеры задач, которые можно реализовать с использованием customTask.

Сам customTask – это функция библиотеки analytics.js. Она позволяет получать и устанавливать значения по мере их генерации.

Важно сказать, что в Google Tag Manager customTask добавляет дополнительную ценность. В GTM всегда было довольно сложно получить доступ к процессу генерации хита при использовании тега. customTask предлагает решение этой проблемы и позволяет взглянуть по-новому на процесс настройки Google Analytics.

Как работают задания

Когда запускается генерация хита Google Analytics (например: ga('send', 'pageview'), не важно как: через JavaScript-код счетчика на сайте или через тег в Google Tag Manager, вы – фактически говорите библиотеке analytics.js сгенерировать HTTP-запрос на сервер Google Analytics.

Конечная точка (эндпоинт), на который отправляются обращения, обычно – /collect на стороне домена Google Analytics collector.

Процесс создания и отправки обращений на серверы GA работает через Measurement Protocol (MP). Фактически MP является основным процессом, используемым всеми механизмами отслеживания Google Analytics, будь то ga('send'...) в JavaScript SDK, теги GA в Google Tag Manager, собственные SDK для Android и iOS и пользовательские HTTP-запросы из систем управления.

Отслеживание в GA

Когда вы используете JavaScript SDK, запуская ga('send', 'pageview'), или запускаете тег Google Analytics в GTM, вы инициируете очередь процессов, конечным результатом которых является отправленный MP запрос в Google Analytics. Эта очередь включает в себя ряд заданий, из которых customTask выполняется первым.

В таблице ниже все эти задания перечислены в порядке их выполнения.

Задание

Описание

customTask

Не имеет собственной функциональности.

Может быть переопределен для управления объектом модели до того, как он будет обработан другими задачами.

previewTask

Прерывает выполнение запроса, если страница запрашивается только для того, чтобы создать превью-значок в блоке «Топ-сайты» для браузера Safari.

checkProtocolTask

Прерывает выполнение запроса, если на странице не используется ни http, ни https.

validationTask

Проверяет, имеют ли поля в запросе допустимые и ожидаемые значения.

Прерывает запрос, если это не так (например, попытка отправить строчные данные в event value (может принимать только числовые данные)).

checkStorageTask

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

historyImportTask

Импортирует информацию из файлов cookie от устаревших версий счетчика GA (ga.js и urchin.js).

samplerTask

Производит выборку посетителей для семплирования в соответствии со значением sampleRate, установленным для этого счетчика.

buildHitTask

Генерирует строку hitPayload, которая представляет собой словарь, состоящий из параметров и их значений, для передачи в запрос Measurement Protocol.

sendHitTask

Отправляет на серверы Google Analytics запрос Measurement Protocol из поля hitPayload.

timingTask

Если производится автоматическая выборка страниц для измерения скорости страниц, эта задача отправит в GA время генерации.

displayFeaturesTask

Если в настройках GA включена функция отчетов о рекламе, эта задача сгенерирует запрос на серверы DoubleClick.

Каждая задача получает объект модели в качестве параметра. Объект модели содержит все поля, заданные в трекере, а также любые дополнения, создаваемые в самих задачах.

Прелесть customTask заключается в том, что поскольку она выполняется первой в очереди задач, можно использовать ее для изменения поведения других задач. Например, если вы хотите запустить Google Analytics локально или в расширении Chrome, надо сделать так, чтобы задача checkProtocolTask никогда не запустилась, потому что она прерывает выполнения запроса, если протокол страницы не является http или https. customTask будет выглядеть следующим образом:

var customTask = function(model) {
  model.set('checkProtocolTask', null);
};

Как вы можете видеть, задача представляет собой поле в объекте модели, которым вы можете управлять точно так же, как вы можете управлять любым другим полем в модели. Например, если вы хотите получить идентификатор отслеживания (UA-XXXXXX-Y) и отправить его в пользовательский параметр с индексом 15, вы можете использовать следующий customTask:

var customTask = function(model) {
  // Получаем ID из объекта модели
  var trackingId = model.get('trackingId');
 
  // Устанавливаем ID в пользовательский параметр
  model.set('dimension15', trackingId);
};

Чтобы узнать, какие поля доступны в объекте модели, ознакомьтесь с документацией для разработчика. Обратите внимание, что документ не полный, так как в нем отсутствуют некоторые задания.

Выполняя взаимодействие модели с customTask, вы получаете дополнительный контроль над тем, как выполняется очередь заданий.

Как добавить customTask в хит

Чтобы добавить customTask в теги Google Tag Manager, вам необходимо создать пользовательскую переменную JavaScript, которая возвращает метод customTask в теле переменной.

Добавить переменную customTask в теги можно или с помощью переменной настроек Google Analytics (рекомендуется), или напрямую, переопределив настройки тега.

Вам нужно прокрутить вниз до блока «More settingsFields to Set» и добавить новое поле:

customtask

Если вы используете Универсальную аналитику на странице (analytics.js) фрагмент кода, вы добавляете пользовательскую задачу вот так, например.

Если Universal Analytics (analytics.js) у вас установлен непосредственно в коде страницы, customTask можно добавить так:

var _customTask = function() {
  // Устанавливает Client ID в пользовательскую переменную с индексом 199
  return function(customTaskModel) {
    customTaskModel.set('dimension199', customTaskModel.get('clientId'));
  };
};

ga('create', 'UA-12345-1');
ga('set', 'customTask', _customTask());
ga('send', 'pageview');

Обратите внимание, что вы можете установить только один customTask для каждого трекера / хита / тега. Если вы хотите добавить более одного задания в функцию customTask, вам нужно написать JavaScript, который объединит все задачи в одну.

Примеры задач, которые можно реализовать с помощью customTask

Как было написано выше, customTask является особенным по двум причинам.

  1. Он не имеет собственной специальной функциональности. Очередь заданий может и будет отлично работать без определения customTask.
  2. Он запускается перед любой другой задачей, что означает, что у вас есть полный контроль над тем, как обрабатывается очередь.

Пример задач, которые можно решить с customTask описал в своей статье «CUSTOMTASK - THE GUIDE» Simo Ahava. Рассмотрим некоторые из них (в этой же статье можно найти и саму последовательность настройки указанным customTask.

1. Отправка Client ID в качестве пользовательского параметра

Одна из самых простых задач. Она не изменяет саму очередь заданий, просто получает Client ID из объекта модели, а затем устанавливает его в качестве значения указанного пользовательского параметра.

Простое решение сложной проблемы. Без customTask получить и установить Client ID в теге Google Analytics было бы сложно. Если тег запускается для посетителя, зашедшего на сайт впервые (еще не получил Client ID), фактическое поле Client ID недоступно. Типичным решением для этой задачи было получение Client ID путем создания фиктивного трекера или отправки идентификатора клиента с тегом события, который срабатывал после просмотра страницы.

Но customTask позволяет решить эту задачу проще.

2. Отправка событий в два и более счетчика Google Analytics

Алгоритм задачи: функция customTask сначала сохраняет ссылку на sendHitTask в глобальной переменной, после чего перезаписывает sendHitTask в текущем объекте модели с помощью кода дубликатора.

Дубликатор сначала отправляет исходный хит в основной счетчик Google Analytics, после чего заменяет ID в hitPayload на ID второго счетчика. Затем снова вызывается глобальная задача sendHitTask, и хит отправляется во второе свойство с идентичным наполнением.

Обратите внимание! Ссылка на sendHitTask должна храниться в глобальной переменной, чтобы избежать дубликации полей. Например, вы всегда получаете исходную ссылку на sendHitTask так:

var originalSendTask = model.get('sendHitTask');

Каждый раз при запуске этого кода customTask будет получать ссылку на содержимое объекта модели sendHitTask. При создании стандартных хитов к электронной торговле или при автоматической выборке хитов по времени тег будет отправлен несколько раз. Таким образом, ссылка на исходную задачу sendHitTask рекурсивно дублируется с каждой итерацией model.set('sendHitTask');, что приводит к проблемам выполнения кода.

Если глобальная переменная хранит ссылку на исходную задачу sendHitTask, этой проблемы не будет.

3. Отслеживание хитов при разрыве соединения

David Vallejo реализовал решение проблемы потери хитов из-за разрыва подключения к интернету. Он использует customTask для проверки, находится ли пользователь в автономном режиме – если да, хиты будут сохраняться в очереди. Как только подключение восстанавливается, очередь обрабатывается, и хиты отправляются в GA.

4. Удаление персональных данных из отправляемой в GA информации

Некоторые законодательные акты, например GDPR и сам Google Analytics в «Условиях предоставления услуг» запрещают передачу персональных данных пользователей в счетчик Google Analytics.

В этой задаче customTask проверяет содержимое PayLoad хита перед отправкой в GA и удаляет из него все данные, которые совпадают с указанными в настройке регулярными выражениями. Регулярные выражения могут составляться таким образом, чтобы, например, соответствовать адресам электронной почты.

5. Автоматическое связывание доменов через регулярные выражения

Этот customTask позволяет Google Tag Manager получить ту же возможность, что по умолчанию встроена в analytics.js – связывание доменов по регулярным выражениям. Стандартная настройка отслеживания Google Analytics позволяет связывать домены, используя регулярные выражения. Но настройка междоменного отслеживания GTM принимает только строковые значения.

В этой задаче customTask фактически применяет плагин автоматической разметки к самому объекту трекера, позволяя передать регулярное выражение. Таким образом домены можно связать на основе соответствия регулярным выражениям, а не списку из строки.

6. Отправка размера PayLoad в пользовательский параметр

Это решение позволяет отправлять размер PayLoad для каждого хита в Google Analytics в качестве пользовательского параметра в Google Analytics.

Максимальный размер PayLoad для Google Analytics составляет 8192 байта.

Полезно проверять, приближаетесь ли вы к пороговому значению при отправке хита, потому что если размер PayLoad будет превышен, этот хит не отправится в Google Analytics.

7. Автоматическое уменьшение длины PayLoad

Этот customTask анализирует отправляемый в Google Analytics PayLoad и при необходимости «урезает» его до максимально допустимого размера (8192 байта).

В Google Analytics может отправиться длинный PayLoad, особенно если настроена расширенная электронная торговля. Но, к сожалению, PayLoad, размер которого превышает максимально допустимый, не будет отправлен в GA. Это, в свою очередь, приведет к потере части данных.

Это решение использует рекурсивный анализ PayLoad и удаления из него ненужной информации, которая занимает место.

8. Отправка типа хита в качестве пользовательского параметра

Это решение позволяет отправлять тип хита (просмотр страницы (pageview), событие (event), время (timing) и т. п.) в качестве пользовательского параметра с каждым хитом, к которому прикреплен этот customTask.

Эта задача полезна для отладки, так как можно создать сегмент с учетом типа отправляемого хита.

9. Создание и обновление сессионных cookie

Решение для создания и/или обновления файла cookie, срок действия которого истекает после установленного тайм-аута (по умолчанию 30 минут).

Все хиты, к которым прикреплен этот customTask, будут обновлять файл cookie при каждом срабатывании.

Наличие этого файла cookie в браузере будет указывать, что для текущего пользователя все еще активен сеанс Google Analytics.

Файл cookie можно использовать, например, чтобы блокировать отправку событий в Google Analytics, в случае отсутствия активного сеанса.

10. Предотвращение отправки дублирующих транзакций

В этом решении customTask сохраняет все отправленные идентификаторы транзакций в браузере. Когда хит с новой транзакцией попадает в очередь для отправки в Google Analytcs, customTask проверяет, существует ли идентификатор этой транзакции в списке идентификаторов, отправленных ранее. Если совпадение находится, хит блокируется, что предотвращает отправку дубликата данных в GA.

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

11. Дублирование с последующим контролируемым искажением данных

Скрипт полностью дублирует все данные Google Analytics, к которым прикреплен customTask, и отправляет их в ID другого ресурса, указанного в настройках скрипта.

Прелесть в том, что в дополнение к дублированию данные также искажаются. В конечном наборе все строки преобразуются в другие строки, и это делается контролируемо (то есть любая заданная строка всегда преобразуется в одну и ту же другую строку). Все цены также искажаются на рандомизированное процентное значение.

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

Объединение нескольких customTask

Как видно, есть множество интересных применений customTask. Часть из которых можно применить в том или ином проекте. Но есть одна проблема. Это javaScript, и у него есть правила, которые надо соблюдать:

  • Можно задать только одно поле один раз для каждого тега. Поэтому можно задать только одно поле customTask для каждого тега.
  • Можно задать только один параметр модели один раз для каждого тега, поэтому, например, можно задать только один атрибут sendHitTask для каждого тега.

Итак, допустим, надо реализовать два трюка (2. Отправить событие в два, и более счетчика Google Analytics) и (4. Удалить персональные данные из отправляемой в GA информации). Первое, что приходит в голову – просто объединить оба решения в последовательный код:

function() {
  return function(model) {
 
    // Определяем регулярное выражения для персональных данных
    var piiRegEx = [{
      name: 'EMAIL',
      regex: /.{4}@.{4}/g
    }];
   
    var globalSendTaskName = '_' + model.get('trackingId') + '_originalSendTask';
   
    var originalSendTask = window[globalSendTaskName] = window[globalSendTaskName] || model.get('sendHitTask');
   
    // Очищаем персональные данные из payload
    model.set('sendHitTask', function(sendModel) {
     
      ...
     
    });
   
    // Отправляем хит в другой счетчик:
    model.set('sendHitTask', function(sendModel) {
     
      ...
     
    });
   
  };
}

Это не сработает. Поле sendHitTask тут задается дважды, а это значит, что данные сохранятся только из второго пункта (поскольку он перезапишет первый набор).

Вместо этого надо реализовать решение на JavaScript и объединить оба взаимодействия с sendHitTask в одно. Вам надо будет определить порядок, в котором код должен выполняться.

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

function() {
  return function(model) {
 
    // Определяем регулярное выражения для персональных данных
    var piiRegEx = [{
      name: 'EMAIL',
      regex: /.{4}@.{4}/g
    }];
 
    // Определяем ID счетчика в который надо отправить дубликат хита
    var newTrackingId = 'UA-12345-2';
 
    var globalSendTaskName = '_' + model.get('trackingId') + '_originalSendTask';
 
    var originalSendTask = window[globalSendTaskName] = window[globalSendTaskName] || model.get('sendHitTask');
 
    var i, hitPayload, parts, val, oldTrackingId;
 
    model.set('sendHitTask', function(sendModel) {
 
      // Очищаем персональные данные из payload
      hitPayload = sendModel.get('hitPayload').split('&');
   
      for (i = 0; i < hitPayload.length; i++) {
        parts = hitPayload[i].split('=');
     
        // Двойное декодирование для учета кодирования сервера + analytics.js
        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);
   
      // Перезапись ID
      hitPayload = sendModel.get('hitPayload');
      oldTrackingId = new RegExp(sendModel.get('trackingId'), 'gi');
      sendModel.set('hitPayload', hitPayload.replace(oldTrackingId, newTrackingId), true);
      originalSendTask(sendModel);
    });
  };
}

Код достаточно сложный, и сложность его возрастает с каждой добавленной задачей, которую надо выполнить. Это ограничения JavaScript и того факта, что можно выполнить только один customTask.

В конце концов, сложность действий будет зависеть от навыков работы с JavaScript. Вам нужно знать, как браузер выполняет код построчно, и, следовательно, вам нужно будет убедиться, что все, что вы хотите запустить первым, также выполняется браузером первым. Вот почему в приведенном выше примере выполняется очистка PII перед дублированием попадания. Если бы очистка PII произошла ПОСЛЕ дублирования попадания, это было бы излишним, так как это все равно позволило бы PII потенциально поступать в Google Analytics.

Заключение

customTask – одна из самых крутых функций, появившихся в Google Analytics за последнее время. А при совместном использовании с Google Tag Manager она становится еще круче.

Советуем ознакомиться с общей информацией о задачах. Понимание того, как они работают, даст представление о том, как analytics.js собирает и отправляет запросы в Google Analytics.

(Голосов: 4, Рейтинг: 5)
Читайте нас в Telegram - digital_bar

Есть о чем рассказать? Тогда присылайте свои материалы Марине Ибушевой


Новые 
Новые
Лучшие
Старые
Сообщество
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.
Отправить отзыв
ПОПУЛЯРНЫЕ ОБСУЖДЕНИЯ НА SEONEWS
Ссылочный апдейт Google: что изменится для SEO-специалистов в рунете
Тимур
6
комментариев
0
читателей
Полный профиль
Тимур - Понял, спасибо за информацию.
Как продвинуть сайт по коммерческим запросам в ТОП-10 с помощью ресурса Reddit
Roman Saev
8
комментариев
0
читателей
Полный профиль
Roman Saev - Мне удалось за последнее время неплохо продвинуть свой сайт и трафик набрать. Использовал реддит площадку, а так же сервис zenlink.ru для создания ссылочной массы. Как итог, удалось привлечь целевых посетителей и значительно поднять конверсию моего ресурса.
3 основные ошибки, которые допускают владельцы сайтов при продвижении
Виктор Гаврюков
31
комментарий
1
читатель
Полный профиль
Виктор Гаврюков - Не обращай внимания_) Если у тебя хороший ресурс, то ты будешь первоисточником, и все кто своровал, автоматически начнут на тебя ссылаться, точнее, так гугл будет считать_)
Зарабатываем с помощью текстов: как создать уникальный контент и монетизировать сайт
Максим Зубарев
1
комментарий
0
читателей
Полный профиль
Максим Зубарев - Просто каждый должен заниматься своим делом и о нем и писать ))) сапа хороша в ссылках, вот о линкбилдинге их материалы заходят хорошо. Сапа не пишет статьи ))) Поэтому ничего удивительного
Тильда для SEO-продвижения и бизнеса: плюсы и минусы конструктора сайтов
Сергей Садовничий
2
комментария
0
читателей
Полный профиль
Сергей Садовничий - Есть страницы где 79 для мобайла / 97 для десктопа без вообще каких либо заморочек. Есть страницы на Тильда у которых показатели для мобайла 60 - и эти страницы находятся в ТОП 1-3 по всем интересующим ключам. С показателями по скорости 60 Google Search Console заявляет, что страница оптимизирована для мобильных устройств и является удобной для пользователей. Рекомендую в первую очередь делать акцент на контенте, качестве внутренней оптимизации, наличии коммерческих факторов (если это не инфо страница) и над ссылочным а уж потом пытаться подтягивать показатели по PageSpeed Insights. Но как правило страницы выходят в ТОП и необходимости добиться PageSpeed Insights за 80 нет!
Скучное, но эффективное SEO: 3 кита успешной поисковой оптимизации
Bquadro
2
комментария
0
читателей
Полный профиль
Bquadro - Не совсем так) Совет про техническую оптимизацию и структуру сайта равноценен как для коммерческого сайта, так и для информационного. Эти два правила универсальны и влияют на ранжирование в поиске вне зависимости от типа ресурса.
Сравнительная статистика уровня жизни SEO-специалистов в семи странах, включая Россию
Рустам
1
комментарий
0
читателей
Полный профиль
Рустам - Средняя температура по больнице, подсчет даже близко не отображает действительность, особенно учитывая разность цен и уровня зп в разных частях больших стран (США, Канада, Россия)
Как оптимизировать картинки для SEO-продвижения: чек-лист
Алексей Махметхажиев
6
комментариев
0
читателей
Полный профиль
Алексей Махметхажиев - Надо упомянуть про ленивую загрузку lazy load, что её можно сделать с вредом для картинок и их индексации и можно сделать всё правильно. Есть отложка вредная.)
Рост ботных переходов на сайт: как интерпретировать и что делать
Mike
6
комментариев
0
читателей
Полный профиль
Mike - как это проверить? что товары выводится именно на основе спроса, а не по заданным алгоритмам?
Как доработка структуры вывела сайт в ТОП-10 Google и увеличила трафик в 2 раза. Кейс Связной Трэвел
Дмитрий
3
комментария
0
читателей
Полный профиль
Дмитрий - Вероятнее всего было обновление Google и позиции были снижены в связи с низкой скоростью загрузки страниц (так как доработке ведутся не только по SEO, но и в целом по функционалу сайта, появляются новые скрипты). В этот период в Google Search Console увеличилось количество страниц с низкой скоростью загрузки. Мы выявили несколько проблем, которые снижают скорость загрузки страниц и выдали рекомендации по их устранению. Пока данные рекомендации находятся в работе. Также был проведен анализ EAT факторов и проверка сайта на соответствие требованиям Google к YMYL сайта, выданы рекомендации по доработке данных факторов (ждем внедрения наших рекомендаций, поделимся потом результатами).
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
385
Комментариев
373
Комментариев
262
Комментариев
249
Комментариев
171
Комментариев
156
Комментариев
141
Комментариев
121
Комментариев
114
Комментариев
97
Комментариев
97
Комментариев
96
Комментариев
94
Комментариев
80
Комментариев
77
Комментариев
74
Комментариев
67
Комментариев
62
Комментариев
60
Комментариев
59

Отправьте отзыв!
Отправьте отзыв!