Главная боль каждого аналитика или как связать источник посетителя с юзером

Главная боль каждого аналитика или как связать источник посетителя с юзером

Проработав веб-аналитиком более двух лет, я пользовался как готовыми/привычными для нас решениями для сбора и работы с данными (от Яндекс Метрики до BQ), так и решениями собранными вручную. Опыт показал, что все способы имеют один пробел, который портит всю малину. Я решил рассказать вам о проблеме, которая не дает спокойно жить, а затем поделюсь действенным методом ее устранения. Уверен, будет интересно!

На чем строится аналитика?

В построении аналитики важную роль играет этот перечень данных:

  • количество посетителей ресурса
  • источники входящего трафика
  • контакты зарегистрированных пользователей
  • количество покупок
  • сумма заказов

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

Слабое место аналитики

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

  • их количество
  • выборку персональных данных
  • активность покупок
  • и их сумму

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

Без этой связи аналитик не сможет оценить эффективность методов продвижения, используемые в проекте. Эту проблему иногда пытаются решить через UserID, привязав первоначальный идентификатор гостя к данным регистрации. Но такая методика сложна и трудоемка.

Связываем источник и зарегистрированного пользователя

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

Когда посетитель заходит на сайт, его браузер записывает информацию о том, откуда он пришел и какие действия совершал. По умолчанию разные порталы используют эти сведения, чтобы улучшить взаимодействие с посетителем и предложить ему релевантные услуги. Но для нас Cookies послужат БД с источниками посетителя.

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

Работает это так: когда посетитель совершает действие на ресурсе (например, отправляет форму обратной связи или регистрируется), активируется скрипт, который “вытягивает” из cookies информацию об источнике и заполненные поля с почтой/телефоном и добавляет ее в Google таблицу. Все это делается через Google tag Manager.

Алгоритм действий

  1. Настраиваем триггер в GTM (отправка формы/регистрация)
  2. В Google Таблицах через расширение Apps Script создаем webhook, пример с пояснениями дальнейших действий:
// 1. В переменной SHEET_NAME введите имя листа // 1. В переменной SHEET_KEY введите ключ таблицы var SHEET_NAME = "Название листа"; var SHEET_KEY = "Ключ таблицы"; // 2. Опубликовать - Развернуть как веб-приложение // // 3. Введите название проекта // Project Version - Новое // Запускать приложение от моего имени (Me) // Доступ к приложению есть у всех, включая анонимных пользователей (Anyone, even anonymous) // // 4. Скопируйте "Текущий URL-адрес веб-приложения" и опубликуйте его в собственном теге Google Tag Manager. Тип тега “Пользовательское изображение”с добавлением нужных данных для сбора. Пример: https://script.google.com/macros/s/Идентификатор развертывания?JS-Email={{JS-Email}}&JS-Phone={{JS-Phone}}&Cookie-GA-ClientID={{Cookie-GA-ClientID}}&Cookie-YM-ClientID={{Cookie-YM-ClientID}}&Page-URL={{Page URL}}&Referrer={{Referrer}}&Cookie-Sb-FirstAdd={{Cookie-Sb-FirstAdd}}&Cookie-Sb-CurrentAdd={{Cookie-Sb-CurrentAdd}} // // 5. Вставьте имена столбцов на листе, соответствующие именам параметров передаваемых вами данных формы (в точном соответствии с регистром) var SCRIPT_PROP = PropertiesService.getScriptProperties(); // класс, позволяющий хранить данные в парах "ключ-значение" // Если вы не хотите раскрывать методы GET или POST, вы можете закомментировать соответствующую функцию function doGet(e){ return handleResponse(e); } function doPost(e){ return handleResponse(e); } function handleResponse(e) { var lock = LockService.getPublicLock(); lock.waitLock(30000); // Подождать до 30 секунд, пока завершатся другие процессы try { // Запись данных - вы можете использовать несколько альтернативных адресатов var doc = SpreadsheetApp.openById(SHEET_KEY); var sheet = doc.getSheetByName(SHEET_NAME); // Предполагается, что заголовок находится в строке 1, но вы можете переопределить header_row в данных GET / POST var headRow = e.parameter.header_row || 1; var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; var nextRow = sheet.getLastRow()+1; // Получаем следующую строку var row = []; // Перебираем столбцы заголовков for (i in headers){ if (headers[i] == "Timestamp"){ // Особый случай, если вы используете столбец Timestamp row.push(new Date()); } else { // Иначе используется имя заголовка для получения данных row.push(e.parameter[headers[i]]); } } // Наиболее эффективно устанавливать значения в виде массива [] sheet.getRange(nextRow, 1, 1, row.length).setValues([row]); // Возвращаем успешный результат в виде JSON return ContentService .createTextOutput(JSON.stringify({"result":"success", "row": nextRow})) .setMimeType(ContentService.MimeType.JSON); } catch(e){ // В случае ошибки вернуть это return ContentService .createTextOutput(JSON.stringify({"result":"error", "error": e})) .setMimeType(ContentService.MimeType.JSON); } finally { // Снимаем блокировку, чтобы другие процессы могли продолжить работу lock.releaseLock(); } }

Следующий шаг – связать получившуюся БД с таблицей данных о зарегистрированных пользователях. На любом проекте есть табличная база данных, в которой содержится информация о всех действиях юзера после регистрации (есть готовые решения). Связью этих таблиц выступит номер телефона и/или электронная почта.

В итоге вы получите обогащенную базу, в которой будет содержаться вся необходимая информация о том, откуда пришел ваш клиент и какие действия он совершил. Для визуализации используем Looker Studio (она же Google Студия Данных).

Конечно, возможны и некоторые погрешности. На результат могут повлиять очищенные куки, режим инкогнито или прокси-сервер клиента. Но эта погрешность минимальна и не помешает оценить эффективность продвижения и оценить/сформировать маркетинговую гипотезу.

Что дает такой метод?

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

  • LTV
  • Конверсию посетитель – регистрация по источникам
  • Конверсию пользователь – покупка по источникам
  • Среднее количество оплат
  • Средний чек
  • и т.д.

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

Вы можете подумать, а почему сразу из кук не тянуть эту информацию в БД проекта… Я тоже задаюсь этим вопросом, но так как я не программист, и не встречал подобного, предлагаю то что знаю и проверено на практике.

Итог

Итак, используя куки посетителей, можно существенно расширить аналитические возможности и стимулировать развитие проекта, не вкладывая в развертывания аналитики много средств.

Как думаете, почему на рынке до сих пор нет готовых решений?

Буду рад обратной связи!

77
1 комментарий

полезная статья. спасибо

3