НВ / analytics
Обучение / Веб-аналитика

ПРАКТИЧЕСКИЙ РАЗБОР · GTM / DATALAYER

Событие новое.
Почему данные старые?

Как параметры предыдущего действия попадают в следующее событие — и почему проверка одного клика не обнаруживает проблему.

Базовый и средний уровень · Учебный пример · 9 октября 2026

1. Заявка записалась не на ту услугу

Представим сайт с несколькими формами. Посетитель сначала выбрал аудит аналитики, а затем отправил общий вопрос через другую форму. Вторая заявка не относится к конкретной услуге, но в отчёте она тоже попала в «Аудит аналитики».

Число обращений выглядит правдоподобно. Ошибка скрывается в распределении: одна услуга получает чужие заявки. На таких данных команда может ошибочно решить, что спрос на неё вырос.

Упрощённая последовательность на одной странице:

window.dataLayer = window.dataLayer || [];

// Сначала выбрана консультация по аудиту.
window.dataLayer.push({
  event: 'service_selected',
  service_type: 'analytics_audit'
});

// Затем отправлена другая, общая форма.
// Услуга не указана — прежнее значение не очищено.
window.dataLayer.push({
  event: 'lead_created',
  form_id: 'general_question'
});

Если тег на событии lead_created читает переменную уровня данных service_type, он может получить analytics_audit. Во втором сообщении нет новой услуги, но прежнее значение осталось в состоянии GTM.

2. Сообщение и состояние GTM — не одно и то же

Сообщение в dataLayer описывает то, что сайт передал в конкретный момент. GTM обрабатывает эти сообщения и хранит значения, к которым обращаются переменные. Новое событие само по себе не очищает все предыдущие параметры.

Первое действиеПередали услугу «Аудит»
Следующее действиеПередали только имя формы
Отправка тегаПрочитали прежнюю услугу

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

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

3. Что означают «Версия 1» и «Версия 2»

Это настройка переменной уровня данных в GTM, а не версия GA4 и не необходимость обновить весь контейнер. Одно из различий — способ чтения имён с точками.

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'service_selected',
  service: {
    type: 'analytics_audit',
    placement: 'sidebar'
  }
});

Здесь service — группа параметров, а type — значение внутри неё. Чтобы прочитать его, создайте переменную уровня данных версии 2 с именем service.type.

Как читать имя service.type
НастройкаЧто означает точка
Версия 1Часть буквального имени ключа service.type. Это не обращение к полю внутри объекта service.
Версия 2Переход внутрь структуры: взять поле type из объекта service.

У версии 2 есть ещё одна важная особенность: вложенные объекты могут объединяться при последовательных обновлениях. Если позже передать только новое service.type, ранее заданное поле service.placement может сохраниться.

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

4. Опишите каждое действие достаточно полно

Для нашей формы договоримся: каждое событие создания заявки содержит имя формы и выбранную услугу. Если услуга не выбиралась, передаём специальное значение not_selected. Это наша договорённость в примере, а не встроенная команда GTM.

// Вызывать после подтверждённого создания новой заявки.
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'lead_created',
  form_id: 'general_question',
  service_type: 'not_selected'
});

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

Различайте «не выбрана» и «неизвестна». Если пользователь не должен был выбирать услугу — это нормальный сценарий. Если сайт обязан был передать её, но не смог, это ошибка качества данных. Не скрывайте оба случая под одним значением по умолчанию.

Нужно ли очищать всё?

Не перезаписывайте весь window.dataLayer пустым массивом, пытаясь убрать один параметр. Это может нарушить работу существующей настройки. Обновляйте нужные поля и согласуйте с разработчиком, какие значения относятся к странице, а какие — только к текущему действию.

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

5. Проверяйте последовательность, а не один экран

  1. Откройте GTM Preview и начните с новой загрузки страницы.
  2. Воспроизведите первое действие: выберите аудит.
  3. Без перезагрузки отправьте общую форму.
  4. Выберите именно второе событие на шкале Preview. Посмотрите его сообщение и значения переменных, которые использует тег.
  5. Проверьте параметры исходящего запроса и полученного события в GA4. Отсутствие ошибки в Preview ещё не доказывает правильность отчёта.
Минимальные сценарии приёмки
ПоследовательностьЧто должно уйти со второй заявкой
Аудит → общий вопросОбщая форма, услуга not_selected
Общий вопрос → аудитФорма аудита, услуга analytics_audit
Одна услуга → другаяДанные второй услуги
Повторное открытие формы без отправкиНового события заявки нет
Переход между экранами без перезагрузкиДанные текущего действия, без параметров предыдущего

Повторите проверки в обратном порядке. Если ошибка возникает только после определённого действия, тестирование с постоянным обновлением страницы может её скрыть.

6. Почему в консоли всё может выглядеть правильно

Разработчик показывает второе сообщение: в нём нет старой услуги. Аналитик показывает событие в отчёте: старая услуга есть. Оба могут смотреть на реальные данные, но на разные этапы их обработки.

Проверяйте цепочку: что отправил сайт, какое значение вернула переменная, что передал тег и что получила аналитика. Не считайте последний элемент массива dataLayer готовым содержимым события GA4: теги могут брать значения из нескольких источников.

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

Что должно измениться после исправления

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

Главный вопрос при приёмке: «Эти данные относятся к тому, что человек сделал сейчас?» Он помогает находить ошибки, которые не заметны по общему числу событий.

Вернуться к основам dataLayer

Продолжить изучение

Передадим подробности обращения в Яндекс.Метрику и разберём, как читать результат.

Заявки есть. Какие именно?