Отслеживание аналитики: Сбор событий с приоритетом конфиденциальности

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

Проблема: Понимание поведения пользователей

Нам необходимо знать:

  • Какие страницы посещают пользователи

  • Какие товары они просматривают

  • Откуда приходит трафик (Google Ads, органический, социальные сети)

  • Какие кампании приводят к конверсиям

Но мы должны избегать:

  • Отслеживания ботов и краулеров

  • Хранения личной идентифицируемой информации (PII)

  • Нарушения правил конфиденциальности

Решение: Клиентское + Серверное отслеживание

Клиентское: JavaScript отслеживание

ID посетителя: Случайный ID, хранящийся в cookie (365 дней)

ID сессии: Случайный ID, хранящийся в sessionStorage (до закрытия браузера)

Параметры кампании: Извлекаются из URL и хранятся в sessionStorage

Отслеживаемые параметры:

  • gclid - Google Click ID (Поисковая реклама)

  • gbraid - Google Ads click ID (Товарная реклама)

  • wbraid - Google Ads click ID (iOS)

  • fbclid - Facebook click ID

  • srsltid - Google organic search result ID

  • utm_source, utm_medium, utm_campaign, utm_term, utm_content

Хранение: Параметры хранятся в cookies (30 минут) для атрибуции кликов по WhatsApp/телефону

Серверное: Обогащение данных

Сервер обогащает события:

Данными GeoIP: Страна, регион, город по IP-адресу

Парсингом User-Agent: Браузер, ОС, тип устройства

Меткой времени: Время сервера (UTC)

Обнаружением ботов: Фильтрация известных бот-агентов

Типы событий

Просмотр страницы: Пользователь посещает страницу

Просмотр товара: Пользователь просматривает страницу товара

Добавление в корзину: Пользователь добавляет товар в корзину

Оформление заказа: Пользователь начинает оформление заказа

Покупка: Пользователь завершает покупку

Клик по WhatsApp: Пользователь нажимает кнопку WhatsApp

Клик по телефону: Пользователь нажимает на номер телефона

Поток данных

sequenceDiagram
    participant User
    participant JS as JavaScript
    participant API as /api/analytics
    participant Firehose as Kinesis Firehose
    participant S3
    
    User->>JS: Visit page
    JS->>JS: Extract URL params
(gclid, utm_*, etc.) JS->>JS: Store in sessionStorage JS->>API: POST event + params API->>API: Enrich with GeoIP API->>API: Parse User-Agent API->>API: Filter bots API->>Firehose: Send enriched event Firehose->>S3: Store in analytics bucket

Обнаружение ботов

Мы фильтруем бот-трафик, используя несколько сигналов:

Шаблоны User-Agent: Известные строки ботов (Googlebot, Bingbot и т.д.)

Шаблоны поведения: Слишком быстро, слишком много запросов

Отсутствие JavaScript: Боты часто не выполняют JS

Куки исключения: tv_exclude=true останавливает всё отслеживание

Защита конфиденциальности

Без PII: Мы никогда не храним имена, email, номера телефонов

Анонимизированные IP: Последний октет удаляется перед хранением

Без межсайтового отслеживания: Куки только первого лица (first-party)

Отказ от отслеживания: Пользователи могут установить куки исключения

Срок хранения данных: События удаляются через 90 дней

Условная загрузка пикселей

Мы загружаем пиксели отслеживания только когда это уместно:

Пиксель Google Ads: Только если присутствует gclid, gbraid или wbraid

Пиксель LinkedIn: Только если присутствует msclkid

Пиксель Facebook: Только если присутствует fbclid

Преимущество: Более быстрая загрузка страниц, меньше нагрузки от отслеживания

Определение источника трафика

Мы определяем источник трафика по параметрам URL:

Google Ads: gclid, gbraid, wbraidutm_source=google_ads

Google Organic: srsltidutm_source=google_search

Facebook: fbclidutm_source=facebook

LinkedIn: msclkidutm_source=linkedin

Прямой заход: Нет параметров → utm_source=direct

Отслеживание конверсий

Мы отслеживаем конверсии по воронке:

Просмотр товараДобавление в корзинуОформление заказаПокупка

Каждый шаг включает:

  • ID посетителя (для атрибуции)

  • ID сессии (для анализа сессии)

  • Параметры кампании (для расчета ROI)

  • Артикул товара (для анализа товаров)

Отслеживание контактов с лидами

Когда пользователи связываются с нами (WhatsApp, телефон, email), мы фиксируем:

Способ связи: WhatsApp, телефон, email

Параметры кампании: Из cookies (30-минутное окно)

Контекст товара: На какой странице товара они находились

Преимущество: Атрибуция офлайн-конверсий к онлайн-кампаниям

Ограничение частоты запросов

Конечная точка аналитики имеет ограничение по частоте:

Лимит: 100 запросов за 10 минут с одного IP

Преимущество: Предотвращает злоупотребления и наводнения ботами

Хранение

События хранятся в S3 через Kinesis Firehose:

Формат: JSON lines (одно событие на строку)

Партиционирование: По дате (год/месяц/день/час)

Сжатие: Gzip

Срок хранения: 90 дней

Запросы

События запрашиваются через AWS Athena:

Схема: Определена в Glue Data Catalog

Запросы: SQL на данных в S3

Варианты использования: ROI кампаний, популярность товаров, источники трафика

Ссылки

Технические концепции

Сервисы AWS

Связанные статьи

Резюме

Наша система аналитики отслеживает поведение пользователей, уважая конфиденциальность:

Клиентская часть:

  • ✅ Извлечение параметров кампании из URL

  • ✅ Хранение в sessionStorage (в рамках сессии)

  • ✅ Хранение в cookies (30 минут для атрибуции)

  • ✅ Отправка событий в API

Серверная часть:

  • ✅ Обогащение данными GeoIP и User-Agent

  • ✅ Фильтрация бот-трафика

  • ✅ Отправка в Kinesis Firehose

  • ✅ Хранение в S3 (партиционировано по дате)

Конфиденциальность:

  • ✅ Без хранения PII

  • ✅ Анонимизированные IP

  • ✅ Куки только первого лица

  • ✅ Доступен отказ от отслеживания

  • ✅ Срок хранения 90 дней

Условная загрузка:

  • ✅ Пиксель Google Ads только при наличии gclid

  • ✅ Пиксель LinkedIn только при наличии msclkid

  • ✅ Пиксель Facebook только при наличии fbclid

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


← Назад к указателю документации