Зачем это всё?
- Избавляемся от семплирования при построении отчетов.
- Теперь нет ограничений на кастомные поля: что нужно отправляйте/получайте/взаимодействуйте.
- Можно использовать эти данные, как условия для триггеров: просмотры страниц, совершение действия. Сопоставляем с имейлом и отправляем письма/пуши.
- Для системы рекомендаций: также интересуются/покупают.
- Анализируйте поведение пользователей: как они ходят по вашему сайту, в разрезе каждой сессии и вообще, за все время!
- Анализируйте источники трафика, смотрите последовательности, каналы, которые ведут к конверсиям.
- Отслеживайте мошенников в CPA-сетях. Тут вы увидите внезапные переходы, например, когда человек просто учит новые Слова в тренажере, а страница перезагружается и проставляются партнерские куки.
- И сказка для маркетологов — кастомные списки ремаркетинга. Выделяете сегмент по поведению, выгружайте cid и отправляйте в GA.
Как ga собирает данные — техническая сторона
Вы добавляете код, который предоставляет вам GA, или создаете тег через Google Tag Manager.
Когда этот код срабатывает в браузере пользователя, создается объект ga с трекером. Далее через этот трекер фиксируется взаимодействие — просмотр страницы.Фиксируется взаимодействие, значит отправляется информация на сервер Google Analytics используя Measurement Protocol.
Если максимально упростить: информация на сервер GA передается через GET-запрос формата:
Как строятся отчеты в google analytics
Чтобы отобразить отчеты в интерфейсе Google Analytics (далее GA), происходит следующее: сбор данных, обработка данных, формирование отчета.
Сбор данныхПо протоколу Measurement Protocol GA собирает информацию о всех взаимодействиях: просмотры страниц, пользовательские события, транзакции.
Обработка информацииНа основании полученной информации о взаимодействиях (просмотры страниц, другие события) GA:
Формирование отчета
Когда вы открываете отчет через веб-интерфейс GA или по API, в зависимости от выбранного отчета, система достает данные из хранилища и возвращает информацию.
Как это сделать
Выберите вариант, через который у вас подключен счетчик Google Analytics:
Стандартный код установки analytics.js имеет вид:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXXX-X', 'auto');
ga('send', 'pageview');
</script>
Дорабатываем задание customTask, в итоге получается:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXXX-X', 'auto');
// определяем customTask
ga('set', 'customTask', function(tracker) {
// Сохраняем стандартную функцию sendHitTask.
var originalSendHitTask = tracker.get('sendHitTask');
// Вносим изменения в функцию sendHitTask
tracker.set('sendHitTask', function(model) {
// отправляем стандартный запрос на www.google-analytics.com/collect
originalSendHitTask(model);
// создаем новый запрос для отправки в своё хранилище
var custom_tracking_url = 'ССЫЛКА НА ВАШ ПРИНИМАЮЩИЙ СКРИПТ',
hitPayLoad = '?' model.get('hitPayload'),
user_agent = '&user_agent=' encodeURIComponent(navigator.userAgent),
referrer = '&referrer=' encodeURIComponent(document.referrer);
var final_tracking_url = custom_tracking_url hitPayLoad user_agent referrer
document.createElement("img").src = final_tracking_url;
});
});
ga('send', 'pageview');
</script>
В итоге получается, что мы добавили новую задачу в трекер Google Analytics и при каждом взаимодействии информация будет отправляться не только в Google Analytics, но и на вашу точку входа.
Настройка хранилища
Для простоты я в качестве хранилища возьму Таблицы Гугл. Конечно, для большого количества данных это вообще не вариант. Но мы тут с технологией знакомимся, поэтому для примера подойдет.
Создаем таблицу, задаем имена колонкам. Имена должны соответствовать названию параметров из Query String, которые будет отправлять трекер Google Analytics:
Открываем редактирование скриптов:
Добавляем скрипт, который при каждом GET-запросе будет парсить Query String и добавлять значения в таблицу:
function doGet(e) {
record_data(e);
}
var SCRIPT_PROP = PropertiesService.getScriptProperties();
function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
SCRIPT_PROP.setProperty("key", doc.getId());
}
function record_data(e) {
try {
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = doc.getSheetByName('Sheet1'); // select the responses sheet
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow() 1; // get next row
var row = [ new Date() ]; // first element in the row should always be a timestamp
// loop through the header columns
for (var i = 1; i < headers.length; i ) { // start at 1 to avoid Timestamp column
if(headers[i].length > 0) {
if(!e.parameter[headers[i]]) {
e.parameter[headers[i]] = '';
}
row.push(e.parameter[headers[i]]); // add data to row
}
}
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
}
catch(error) {
Logger.log(e);
}
finally {
return;
}
}
Запускаем функцию setup() и даем доступы на выполнение скрипта:
В опции “Who has access to the app” выбираем “Anyone, even anonymous”.
В итоге вы получите ссылку вашего Web App:
Скопируйте ссылку и перенесите ее в скрипт CustomTask, в переменную custom_tracking_url.
Теперь при всех настроенных взаимодействиях данные будут попадать не только в GA, но и в ваше хранилище.
Посмотрите как это работает в реалтайме:
- Откройте таблицу.
- Откройте тестовый сайт.
- Походите по сайту следите за обновлениями в таблице.
Не все данные
Так как некоторые данные (например, IP-адрес) прилетают не через гет параметр, а в заголовках запроса можно их парсить на стороне принимающего скрипта.
С source / medium — тоже можно поработать, достать его из Pageurl и раскидать по разным колонкам.
На этом останавливаться не будем, думаю, что мысль понятна.
Собираем сырые данные
Мы уже разобрались, как GA отправляет себе данные. Было бы здорово дублировать эти данные и сохранять их себе в хранилище.
Написать парсер, который будет собирать все параметры, которые собирает Google Analytics, подключить ко всем событиям… Нет, никаких велосипедов!
Прежде чем отправить информацию, скрипт GA выполняет серию заданий. Как раз отправка информации на сервер — это одно из заданий. И к нашей радости, эти задания можно модифицировать — отправлять данные не только в Google, но и на произвольный URL.