SO-AGENCY · КАЗАХСТАН

События GA4 через GTM и dataLayer: пример заявки

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

Аналитика / UTMso-agency · 06.10.20265 мин чтения
Откройте кабинет перед началом

Войдите в рабочий аккаунт и выберите нужный проект. Затем выполняйте шаги ниже.

Открыть Google Analytics ↗
Что получится после настройки

Подтверждение сервера создаёт один dataLayer-сигнал; GTM отправляет generate_lead с проверенными параметрами, а не событие каждого клика.

Что подготовить перед началом

  • Установите рабочий веб-контейнер GTM и один тег Google с G-ID нужного GA4.
  • Дайте разработчику доступ к обработчику успешного ответа формы; подготовьте тестовую заявку, которая появляется в CRM.
  • Согласуйте событие lead_success в dataLayer и событие generate_lead в GA4; запишите безопасные параметры form_id и lead_type.
01Успешный ответ формы
02dataLayer: lead_success
03GTM: generate_lead
04GA4: один лид

Учебная схема процесса; не скриншот рекламного кабинета.

Официальный пример интерфейса DebugView Google для проверки событий.
Официальный пример интерфейса DebugView Google для проверки событий. Источник ↗

01Определите технический контракт

В интерфейсеОписание формы → успешный ответ API заявки

Запишите точное условие результата: HTTP-успех и подтверждённое создание заявки по контракту сервера. Ответ 200 со статусом ошибки бизнеса не считается лидом. Названия dataLayer и GA4 могут различаться: lead_success запускает триггер GTM, а generate_lead поступает в отчёты. Такая схема отделяет приложение от конкретного получателя аналитики.

  1. Укажите, какой ответ означает принятую заявку, и какое поле содержит уникальный request_id.
  2. Опишите параметры form_id, lead_type и optional value/currency; исключите данные пользователя.
  3. Назначьте единственный обработчик отправки аналитики, чтобы глобальный слушатель и компонент формы не отправляли одно событие одновременно.
Пример заполнения

Для консультации form_id=consultation, lead_type=appointment. Телефон остаётся в CRM и не попадает в уровень данных.

Проверка

Разработчик и аналитик одинаково трактуют успех, ошибку и повторный ответ сервера.

02Добавьте push после подтверждения

В интерфейсеКод приложения → обработчик успешно созданной заявки

Инициализируйте массив через window.dataLayer || [], сохраняя уже накопленные сообщения. Не присваивайте новый пустой массив после загрузки GTM. Поместите event и параметры в один push, чтобы GTM обработал значения вместе с нужным событием. Учебная функция ниже вызывается вашим обработчиком после реального успеха.

  1. Передайте функции объект ответа с устойчивым request_id и признаком ok.
  2. Сохраняйте ID уже обработанного ответа, чтобы повторный callback в пределах страницы не отправил дубликат.
  3. Для защиты при обновлении используйте согласованное хранение обработанного ID или архитектуру формы; Set в примере действует только до перезагрузки.
Пример заполнения

API повторно вернул тот же request_id: функция пропускает повтор. Новая заявка с другим ID отправляется.

Пример кода
const measuredRequests = new Set();
function onLeadAccepted(result) {
  if (!result.ok || !result.request_id) return;
  if (measuredRequests.has(result.request_id)) return;
  measuredRequests.add(result.request_id);
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({
    event: 'lead_success',
    form_id: 'consultation',
    lead_type: 'appointment'
  });
}
// Вызывать после подтверждения сервера, не на click/submit.
Замените демонстрационные идентификаторы на значения своего проекта.
Проверка

На уровне данных нет имени, email, телефона или текста обращения.

03Создайте переменные уровня данных

В интерфейсеGTM → Переменные → Пользовательские переменные → Создать

Переменная считывает значение из сообщения уровня данных. Создайте отдельную переменную для каждого параметра и используйте точное имя из контракта. Пустое значение обычно означает опечатку, неверный момент чтения или отсутствие параметра в push. Не извлекайте телефон из поля формы для отправки в GA4.

  1. Выберите тип Переменная уровня данных.
  2. Для первой укажите имя form_id, версию уровня данных 2 и название «DLV — form_id».
  3. Создайте «DLV — lead_type» с именем lead_type; для стоимости создавайте переменные только при согласованном бизнес-смысле.
Пример заполнения

form_id в push и имя переменной совпадают посимвольно; Form_ID является другим ключом.

Проверка

В Preview → событие lead_success → Variables видны consultation и appointment.

04Создайте точный триггер

В интерфейсеGTM → Триггеры → Создать → Конфигурация триггера → Пользовательское событие

Триггер реагирует на event из push, а не на имя события GA4. Для одной подтверждённой формы достаточно точного имени lead_success. Регулярное выражение добавляйте только при осознанной работе с несколькими событиями: слишком широкое условие может отправлять лид по любому сообщению формы.

  1. Введите имя события lead_success без кавычек.
  2. Оставьте точное совпадение; выберите все пользовательские события этого имени либо добавьте фильтр form_id для конкретной формы.
  3. Назовите триггер «CE — lead_success» и сохраните.
Пример заполнения

Для отдельного тега консультации добавьте условие DLV — form_id равно consultation.

Проверка

Клик по отправке, form_start и ошибочный submit не удовлетворяют триггеру.

05Соберите тег GA4

В интерфейсеGTM → Теги → Создать → Google Аналитика: событие GA4

Выберите G-ID того же потока, куда работает базовый тег Google. В название события впишите generate_lead; параметры создайте отдельными строками. Переменные выбирайте через меню GTM, чтобы в поле оказалось {{DLV — form_id}}, а не буквальное название переменной. Для произвольного лида не предполагается автоматическая дедупликация по transaction_id.

  1. Укажите идентификатор измерения и имя generate_lead.
  2. Добавьте параметр form_id со значением переменной DLV — form_id и lead_type со своей переменной.
  3. Назначьте триггер CE — lead_success; сохраните тег «GA4 — generate_lead».
Пример заполнения

В отправленном событии form_id=consultation. Для purchase transaction_id используется по отдельному контракту заказа.

Проверка

В конфигурации нет второго кликового триггера, который повторяет ту же заявку.

06Выполните положительный и отрицательные тесты

В интерфейсеGTM → Preview → сайт; Tag Assistant → Data Layer, Variables, Tags

Проверьте сообщения уровня данных до оценки отчёта. Сначала отправьте корректную заявку и найдите ровно один lead_success. Затем откройте выбранное событие и сверяйте параметры. Для отрицательных сценариев используйте пустую обязательную форму, сетевую ошибку, двойное нажатие и повторный callback.

  1. На успешном событии проверьте Data Layer и значения пользовательских переменных.
  2. В Tags Fired найдите один GA4-тег заявки; проверьте отсутствие аналогичного тега на клике.
  3. Убедитесь, что ошибки не создают lead_success; повторите тест после перехода между страницами SPA.
Пример заполнения

Двойное нажатие заблокировано интерфейсом; серверная идемпотентность возвращает один ID, аналитика отправляет один результат.

Проверка

Для каждого теста записаны ожидаемые и реальные числа событий.

07Проверьте GA4 и ключевое событие

В интерфейсеGA4 → Администратор → Просмотр данных → DebugView; События

В DebugView проверьте имя generate_lead и значения параметров. Если событие видит GTM, но GA4 его не получает, проверьте G-ID, запрос отправки, согласие и фильтры. После подтверждения отмечайте событие как ключевое. Для отчёта по form_id зарегистрируйте подходящий пользовательский параметр; имя параметра должно совпадать с отправляемым.

  1. Найдите событие своего устройства и раскройте параметры.
  2. Отметьте generate_lead как ключевое, если это основной подтверждённый результат бизнеса.
  3. В Пользовательские определения создайте параметр области Событие для form_id; учитывайте обработку новых данных после регистрации.
Пример заполнения

Две формы имеют одинаковое generate_lead, но различаются form_id; отчёт сравнивает именно источники заявок.

Проверка

Ключевое событие соответствует записи CRM; автоматический form_submit не считается второй такой же заявкой.

08Опубликуйте и согласуйте Ads

В интерфейсеGTM → Отправить → Опубликовать; Google Ads → Цели → Конверсии

Выпустите версию только после прохождения тестов. В обычной вкладке повторите одну заявку и сопоставьте её с CRM. При импорте GA4 в Ads согласуйте роль конверсии: прямой тег Ads и импорт GA4 для одной формы не должны независимо считаться двумя основными лидами. Выберите один основной источник результата.

  1. Опишите в версии контракт lead_success → generate_lead и проверенные формы.
  2. Проверьте измерение без Preview и без постоянного debug_mode на всех пользователях.
  3. В рекламном аккаунте проверьте состав целей кампании и статус основного/вторичного действия.
Пример заполнения

Прямой лид Ads основной, импорт GA4 вторичный для сравнения; стратегия получает один бизнес-результат.

Проверка

Сохранена версия контейнера и контрольный маршрут для повторного теста после изменения формы.

Пример для бизнеса

Учебный вызов после успешной отправки: window.dataLayer = window.dataLayer || []; window.dataLayer.push({event: 'lead_success', form_name: 'callback'}); Это код события, а не готовая установка всей аналитики.

Частые ошибки

  • Лид отправляется по нажатию кнопки до валидации.
  • Одна заявка запускает два тега.
  • Персональные данные попадают в параметры GA4.

Вопросы по настройке

Можно ли вместо dataLayer просто отслеживать кнопку?

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

Дедуплицирует ли GA4 lead по event_id?

Не рассчитывайте на произвольный параметр как автоматическую защиту. Предотвращайте повторную отправку в приложении; правила покупки с transaction_id не переносите автоматически на generate_lead.

Официальные источники

Материал написан своими словами по указанным справкам. Примеры и рекомендации so-agency адаптированы к задачам бизнеса; доступность функций и интерфейс могут отличаться.

Нужна помощь с настройкой?

Опишите сайт, платформу и проблему. Обсудим конкретный состав работ.

Следующий шаг

Написать в WhatsApp

Как используются ваши данные

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

При отправке заявки через Telegram данные передаются владельцу so-agency с использованием Telegram Bot API. При выборе WhatsApp откроется переписка с подготовленным текстом; отправку сообщения подтверждаете вы.

На сайте установлен Google Tag Manager для управления аналитикой. События успешной заявки, открытия контактов и перехода в проекты передаются без имени, телефона и текста обращения. Сервисы аналитики могут использовать технические данные устройства и cookies в зависимости от настроек подключённых тегов.

Сайт не сохраняет заявки в публичном доступе и не просит пароли от рекламных кабинетов. По вопросам данных: +7 708 900 77 26.

Напишите в WhatsApp

Откройте камеру телефона и наведите её на QR-код. Откроется чат с so-agency.

QR-код: чат WhatsApp so-agency+7 708 900 77 26
Открыть WhatsApp на компьютере ↗

Сообщение отправите вы — чат открывается без автоматической рассылки.