lamapixel
0%
E-commerce · 9 min чтения

Почему в GA4 не сходится выручка: слой данных, согласие и дубликаты

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

Почему в GA4 не сходится выручка: слой данных, согласие и дубликаты

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

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

Сначала выясните, происходило ли измерение хоть когда-нибудь

Экспорт контейнера Google Tag Manager описывает намерение, а не поведение. Он не содержит и не может содержать ни одного факта о том, что тег когда-либо срабатывал. Контейнер может быть собран образцово и при этом весь год молчать.

В последний день августа 2026 мы разбирали два контейнера живых аккаунтов, и в обоих была поломка ровно этого рода.

Первый контейнер был наш собственный. Одиннадцать тегов, десять событий GA4, базовый тег на правильном триггере, форма разделена на form_start и form_submission_success, а квалификация заявки отправляется прямо в событии. Настройка лучше среднего аккаунта, который приходит к нам на аудит. И при этом: ценность конверсии не отправляется ни в одном из десяти событий, тегов Google Ads в контейнере ноль, а согласие у всех одиннадцати тегов имеет значение «не задано». Форма при этом спрашивает про бюджет, и ответ доходит до GA4, где и заканчивается.

Второй контейнер принадлежал клиенту, и его поломка была ещё тише. Тег конверсии был настроен правильно, цель и условие имели смысл. Только вот на сайте вызов dataLayer.push не встречается ни разу ни на одной из семи проверенных страниц. Контейнер ждёт данных, которые некому отправить, а в интерфейсе при этом всё зелёное.

Проверка, которая это решает, занимает две минуты: GA4, Отчёты > Взаимодействия > События, период три месяца назад, и посмотреть на количество у purchase, add_to_cart и begin_checkout. Ноль означает, что все остальные рассуждения смысла не имеют.

У слоя данных шесть шагов, а не один

Большинство магазинов измеряет purchase и ничего до него. Это как иметь кассу без торгового зала: вы знаете, сколько продали, и не знаете, где люди ушли.

Рекомендованная последовательность событий для e-commerce длиннее: view_item_list, view_item, add_to_cart, view_cart, begin_checkout, add_shipping_info, add_payment_info, purchase (документация Google Analytics для разработчиков, измерение e-commerce).

Практический минимум - четыре: view_item, add_to_cart, begin_checkout, purchase. Только из них возникает соотношение между шагами, то есть единственное число, с которым можно работать. Само по себе число покупок говорит, каким вышел месяц, но не говорит, что с этим делать.

Ценность без валюты - не ценность

Две вещи, которые выглядят формальностью и ею не являются:

Валюта отправляется вместе с ценностью. Документация говорит прямо: параметр currency задаётся на уровне события, когда вы отправляете value. Без валюты ценность - число без единицы измерения, и отчёт о выручке перестанет иметь смысл в момент, когда вы продадите первый заказ за границу.

transaction_id обязателен у покупок и кредит-нот. Без него не работает удаление дубликатов, о котором следующий раздел.

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

Дублирующиеся покупки: GA4 их отфильтрует, но у этого два условия

Классический сценарий: покупатель обновляет страницу благодарности или возвращается на неё из истории браузера, и покупка засчитывается снова.

Google Analytics дедуплицирует события purchase с одинаковым ID транзакции. Но два условия, на которых это держится, упускают из виду (справка Analytics):

  1. Дедупликация работает только у веб-потоков данных, а не у приложений.
  2. Пустой transaction_id хуже, чем никакого. Google Analytics дедуплицирует все события purchase со значением transaction_id="", так что из тысячи заказов останется один, и числа провалятся так, что это выглядит остановкой продаж.

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

Что с этим делают: ID транзакции берут из номера заказа, а не из случайного числа, сгенерированного на странице. Отправляют один раз при создании заказа, а не при каждом показе страницы. И если номера заказа нет, событие не отправляется.

Согласие срезает данные тихо, и моделирование эту дыру не закроет

У режима согласия две формы, и разница между ними денежная.

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

Расширенный режим: теги загружаются сразу со статусом «отклонено» и до решения пользователя отправляют пинги без cookie. Из них возникает модель, специфичная для конкретного рекламодателя, то есть более точная (справка Google Ads).

А теперь число, которое меняет всё рассуждение для обычного чешского магазина. Чтобы моделирование конверсий вообще запустилось, нужно 700 кликов по рекламе за семь дней, причём отдельно для каждой комбинации страны и группы доменов (справка Google Ads).

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

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

Малоизвестная вещь, которая объясняет массу «пропавших» строк в отчётах.

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

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

GA4 и Google Ads не сойдутся никогда, и это описано

Разница между числом конверсий в Google Ads и в Analytics - не ошибка настройки. Google сам перечисляет ряд причин (справка Google Ads), и четыре из них объясняют большую часть практики:

  • Google Ads относит конверсию ко дню показа рекламы, остальные инструменты - ко дню конверсии. Когда кто-то кликнул в понедельник и купил в четверг, оба числа верны и всё же различаются.
  • Конверсия может быть засчитана и через 90 дней после клика, так что вчерашнее число не окончательное и через три недели будет выше.
  • Недействительный трафик отфильтровывается. Часть конверсий Google удалит, оценив источник как спам.
  • Обработка данных занимает 24-48 часов. Сравнивать раньше смысла нет.

К этому добавляются настройка подсчёта конверсий (каждая против одной), конверсии между устройствами и конверсии после просмотра.

Практический вывод, который стоит запомнить: кампании оптимизируют по конверсиям в Google Ads. Analytics нужен, чтобы видеть поведение и путь, а не чтобы спорить с Google Ads о числе.

Три ловушки, которые выглядят мелочью. Все три из нашего аккаунта

Последний раздел о нас, а не о клиентах. Это мы нашли 31. 8. 2026 в собственном контейнере, и это поучительнее чужих примеров.

Событие называется portfolio_view_75, а измеряет 50 процентов. У триггера задана минимальная видимость 50 %, а имя обещает 75 %. Через полгода на это число кто-нибудь сошлётся как на «дочитали портфолио на три четверти». Дешевле переименовать событие, чем менять порог.

Событие engaged_30s срабатывает на каждой странице сайта. У таймера условие, подходящее к любому адресу, так что через тридцать секунд событие уходит и со статьи в блоге. Само по себе не вредит. Опасно это в единственный момент: если такое событие пометить в GA4 как ключевое и импортировать в Google Ads, ставки начнут оптимизироваться на читателей, которые никогда ничего не запросят.

Cookie с идентификатором клика, которую никто не читает. Собственный тег сохраняет gclid на 90 дней, и ни один другой тег, переменная или скрытое поле формы эту cookie не читает. Выглядит как работающее офлайн-измерение, а на деле пустое место. Либо значение подставляется в форму, либо тег удаляется - промежуточное состояние худшее.

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

Двадцатиминутная проверка, после которой ясно, какую из шести причин вы решаете

Порядок по шагам. Ничто из этого ничего не меняет и ничего не ломает.

  1. GA4, Отчёты > Взаимодействия > События, три месяца назад. Есть ли там purchase, add_to_cart и begin_checkout с ненулевым количеством?
  2. Там же число purchase против числа заказов в администрации за тот же период. Разница выше двадцати процентов отправляет к шагу 3.
  3. Число purchase выше числа заказов? Дубликаты, см. раздел о transaction_id. Ниже? Отсутствующее измерение или согласие.
  4. Браузер, инструменты разработчика, вкладка Console, завершить тестовый заказ и вывести dataLayer. Есть ли там событие purchase с value, currency и непустым transaction_id?
  5. GA4, Администратор > Ключевые события. Только ли те, что означают сделку?
  6. GA4, расширить период до года и проверить, появились ли ранее отсутствовавшие строки. Если да, это были пороговые значения.
  7. Google Ads, Цели > Конверсии > Сводка, столбец с ценностью конверсии. Ноль при живых конверсиях означает, что ценность не отправляется.

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

Бухгалтерия и Analytics не сойдутся никогда. Цель не в совпадении, цель - знать величину разницы и её причину, потому что этим можно управлять, а совпадением чисел нет.

Нужен разбор вашего контейнера

Пришлите нам экспорт контейнера Google Tag Manager и адрес магазина. Вернём перечень того, что измеряется, что измеряется неверно и что делает вид, что измеряется. Сразу предупредим, что экспорт контейнера не докажет, срабатывал ли тег когда-либо, - это проверяется только в GA4, и это первое, что мы у вас попросим.

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

Напишите на info@lamapixel.com или звоните +420 775 599 009.

Нужна помощь?

Напишите нам - вместе найдём решение.

Назначить консультацию →