Войдите в рабочий аккаунт и выберите нужный проект. Затем выполняйте шаги ниже.
Подтверждение сервера создаёт один dataLayer-сигнал; GTM отправляет generate_lead с проверенными параметрами, а не событие каждого клика.
Что подготовить перед началом
- Установите рабочий веб-контейнер GTM и один тег Google с G-ID нужного GA4.
- Дайте разработчику доступ к обработчику успешного ответа формы; подготовьте тестовую заявку, которая появляется в CRM.
- Согласуйте событие lead_success в dataLayer и событие generate_lead в GA4; запишите безопасные параметры form_id и lead_type.
Учебная схема процесса; не скриншот рекламного кабинета.

01Определите технический контракт
Запишите точное условие результата: HTTP-успех и подтверждённое создание заявки по контракту сервера. Ответ 200 со статусом ошибки бизнеса не считается лидом. Названия dataLayer и GA4 могут различаться: lead_success запускает триггер GTM, а generate_lead поступает в отчёты. Такая схема отделяет приложение от конкретного получателя аналитики.
- Укажите, какой ответ означает принятую заявку, и какое поле содержит уникальный request_id.
- Опишите параметры form_id, lead_type и optional value/currency; исключите данные пользователя.
- Назначьте единственный обработчик отправки аналитики, чтобы глобальный слушатель и компонент формы не отправляли одно событие одновременно.
Для консультации form_id=consultation, lead_type=appointment. Телефон остаётся в CRM и не попадает в уровень данных.
Разработчик и аналитик одинаково трактуют успех, ошибку и повторный ответ сервера.
02Добавьте push после подтверждения
Инициализируйте массив через window.dataLayer || [], сохраняя уже накопленные сообщения. Не присваивайте новый пустой массив после загрузки GTM. Поместите event и параметры в один push, чтобы GTM обработал значения вместе с нужным событием. Учебная функция ниже вызывается вашим обработчиком после реального успеха.
- Передайте функции объект ответа с устойчивым request_id и признаком ok.
- Сохраняйте ID уже обработанного ответа, чтобы повторный callback в пределах страницы не отправил дубликат.
- Для защиты при обновлении используйте согласованное хранение обработанного 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Создайте переменные уровня данных
Переменная считывает значение из сообщения уровня данных. Создайте отдельную переменную для каждого параметра и используйте точное имя из контракта. Пустое значение обычно означает опечатку, неверный момент чтения или отсутствие параметра в push. Не извлекайте телефон из поля формы для отправки в GA4.
- Выберите тип Переменная уровня данных.
- Для первой укажите имя form_id, версию уровня данных 2 и название «DLV — form_id».
- Создайте «DLV — lead_type» с именем lead_type; для стоимости создавайте переменные только при согласованном бизнес-смысле.
form_id в push и имя переменной совпадают посимвольно; Form_ID является другим ключом.
В Preview → событие lead_success → Variables видны consultation и appointment.
04Создайте точный триггер
Триггер реагирует на event из push, а не на имя события GA4. Для одной подтверждённой формы достаточно точного имени lead_success. Регулярное выражение добавляйте только при осознанной работе с несколькими событиями: слишком широкое условие может отправлять лид по любому сообщению формы.
- Введите имя события lead_success без кавычек.
- Оставьте точное совпадение; выберите все пользовательские события этого имени либо добавьте фильтр form_id для конкретной формы.
- Назовите триггер «CE — lead_success» и сохраните.
Для отдельного тега консультации добавьте условие DLV — form_id равно consultation.
Клик по отправке, form_start и ошибочный submit не удовлетворяют триггеру.
05Соберите тег GA4
Выберите G-ID того же потока, куда работает базовый тег Google. В название события впишите generate_lead; параметры создайте отдельными строками. Переменные выбирайте через меню GTM, чтобы в поле оказалось {{DLV — form_id}}, а не буквальное название переменной. Для произвольного лида не предполагается автоматическая дедупликация по transaction_id.
- Укажите идентификатор измерения и имя generate_lead.
- Добавьте параметр form_id со значением переменной DLV — form_id и lead_type со своей переменной.
- Назначьте триггер CE — lead_success; сохраните тег «GA4 — generate_lead».
В отправленном событии form_id=consultation. Для purchase transaction_id используется по отдельному контракту заказа.
В конфигурации нет второго кликового триггера, который повторяет ту же заявку.
06Выполните положительный и отрицательные тесты
Проверьте сообщения уровня данных до оценки отчёта. Сначала отправьте корректную заявку и найдите ровно один lead_success. Затем откройте выбранное событие и сверяйте параметры. Для отрицательных сценариев используйте пустую обязательную форму, сетевую ошибку, двойное нажатие и повторный callback.
- На успешном событии проверьте Data Layer и значения пользовательских переменных.
- В Tags Fired найдите один GA4-тег заявки; проверьте отсутствие аналогичного тега на клике.
- Убедитесь, что ошибки не создают lead_success; повторите тест после перехода между страницами SPA.
Двойное нажатие заблокировано интерфейсом; серверная идемпотентность возвращает один ID, аналитика отправляет один результат.
Для каждого теста записаны ожидаемые и реальные числа событий.
07Проверьте GA4 и ключевое событие
В DebugView проверьте имя generate_lead и значения параметров. Если событие видит GTM, но GA4 его не получает, проверьте G-ID, запрос отправки, согласие и фильтры. После подтверждения отмечайте событие как ключевое. Для отчёта по form_id зарегистрируйте подходящий пользовательский параметр; имя параметра должно совпадать с отправляемым.
- Найдите событие своего устройства и раскройте параметры.
- Отметьте generate_lead как ключевое, если это основной подтверждённый результат бизнеса.
- В Пользовательские определения создайте параметр области Событие для form_id; учитывайте обработку новых данных после регистрации.
Две формы имеют одинаковое generate_lead, но различаются form_id; отчёт сравнивает именно источники заявок.
Ключевое событие соответствует записи CRM; автоматический form_submit не считается второй такой же заявкой.
08Опубликуйте и согласуйте Ads
Выпустите версию только после прохождения тестов. В обычной вкладке повторите одну заявку и сопоставьте её с CRM. При импорте GA4 в Ads согласуйте роль конверсии: прямой тег Ads и импорт GA4 для одной формы не должны независимо считаться двумя основными лидами. Выберите один основной источник результата.
- Опишите в версии контракт lead_success → generate_lead и проверенные формы.
- Проверьте измерение без Preview и без постоянного debug_mode на всех пользователях.
- В рекламном аккаунте проверьте состав целей кампании и статус основного/вторичного действия.
Прямой лид 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.
Официальные источники
- Создание аккаунта и контейнера · Google ↗
- Установка веб-контейнера · Google ↗
- События GA4 в GTM · Google ↗
- Уровень данных dataLayer · Google ↗
- DebugView · Google ↗
- Ключевые события · Google ↗
Материал написан своими словами по указанным справкам. Примеры и рекомендации so-agency адаптированы к задачам бизнеса; доступность функций и интерфейс могут отличаться.
Нужна помощь с настройкой?
Опишите сайт, платформу и проблему. Обсудим конкретный состав работ.
Следующий шаг
Как установить Google Analytics 4 на сайт
GA4 собирает действия посетителей сайта. Чтобы отчёты помогали бизнесу, сначала подключите сбор, а затем отдельно настройте действия, которые означают обращение или покупку.
Читать инструкцию ↗Аналитика / UTMЧто такое GTM и как установить Google Tag Manager
GTM — кабинет для управления тегами сайта. Сам по себе контейнер не заменяет GA4 или Метрику: в нём вы настраиваете нужные теги, условия запуска и данные.
Читать инструкцию ↗Аналитика / UTMКак установить счётчик Яндекс Метрики
Метрика показывает посещения, источники и настроенные цели. Счётчик следует установить на все нужные страницы, а полезные действия настроить отдельно.
Читать инструкцию ↗