Онлайн-школа в Алматы продаёт курс по аналитике за 25 000 ₸ и тратит на рекламу в Instagram 120 000 ₸ в неделю (цифры в уроке условные). В понедельник таргетолог присылает отчёт из GA4: с рекламы пришло 40 заявок, по 3 000 ₸ каждая. Менеджер открывает CRM и находит с теми же метками только 34. Владелец пишет в рабочий чат: «Кто из вас врёт?»
Может быть, никто. GA4 считает, сколько раз сработало событие, а CRM - сколько заявок сохранилось. Эти числа совпадут, только если событие отправляется ровно тогда, когда заявка сохранена. В этом уроке вы запишете такое условие для одной формы, проверите её на ошибках и повторных отправках и научитесь сверять две цифры, не назначая виноватого.
Два исхода отправки формы
Email не заполнен
Форма подсветила ошибку.
Новых заявок в CRM: 0
Событий generate_lead: 0
Сервер сохранил заявку
В CRM появилась заявка 017.
В DebugView один generate_lead.
form_name = course_signup
generate_lead отправляют, когда сервер ответил, что заявка сохранена.
Событие фиксирует то, что можно увидеть
GA4 записывает события, и Google делит их на четыре группы. Часть из них тег собирает сам или вместе с улучшенной статистикой (enhanced measurement): session_start, прокрутку, отправку формы. Рекомендованные и специальные события нужно настраивать, иначе их не будет, и заявка как раз из них. Так что тег GA4 на сайте ещё не значит, что заявки считаются.
Для заявки у Google есть рекомендованное событие generate_lead. В списке рекомендованных событий оно описано как отправка формы или запроса информации. Название подсказывает смысл, но не говорит, в какой момент событие отправлять. Этот момент выбираете вы, и он должен оставлять след, который можно проверить: нажатие кнопки, ответ сервера «сохранено», статус «оплачено» в CRM.
Школе подходит ответ сервера. Нажатие кнопки - ещё не заявка: поле email могло остаться пустым, сервер мог вернуть ошибку. По той же причине для заявки не годится form_submit из улучшенной статистики: он срабатывает при отправке формы и не ждёт, что ответит сервер. У следующих этапов свои события: заявку, которую менеджер признал целевой, передают как qualify_lead, оплату - как purchase. Если сложить всё это в один generate_lead, через месяц никто не скажет, что он считал.
Даже правильно настроенное событие - не то же самое, что заявка. Заявка лежит в CRM, пока её не удалят, а событие - это сигнал из браузера, и он может не дойти. Допустим, на сайте стоит баннер cookies, а режим согласия настроен в базовом варианте. Тогда человек, который отказался от аналитики, оставит заявку, а GA4 о ней не узнает. Поэтому список заявок ведут в CRM, а GA4 нужен, чтобы видеть, откуда люди пришли и что делали на сайте.
План измерения для одной заявки
Прежде чем открывать GTM, запишите план измерения. У школы он начат в настройке GA4 через GTM: четыре строки с page_view, form_start, generate_lead и параметром form_name. Строке с заявкой нужно больше подробностей, чем остальным: по ней разработчик настроит событие, а вы через месяц вспомните, что именно считает отчёт. Если её расписать, получится семь строк:
| Что описываем | generate_lead у школы |
|---|---|
| Вопрос | Сколько заявок на курс принесла за неделю реклама в Instagram |
| Условие | Сервер ответил, что заявка сохранена в CRM |
| Событие | generate_lead, в GA4 отмечено ключевым событием |
| Параметр | form_name со значением course_signup |
| Не считается заявкой | Ошибка в форме, повторный клик, обновление страницы «Спасибо» |
| Источник | UTM-метки сохраняются в скрытых полях формы и попадают в CRM |
| Как проверяем | Прогон формы в DebugView и запись в CRM |
Параметр form_name нужно зарегистрировать в GA4, иначе в отчётах его не будет, а generate_lead - отметить ключевым событием. Оба шага описаны в уроке про GA4.
Имя, телефон и email в параметры не кладут. Google запрещает передавать в Analytics персональные данные, и запрет касается и параметров событий, и адреса страницы. Если после отправки форма открывает /thanks?phone=..., телефон уйдёт в GA4 вместе с page_view.
Самая полезная строка плана - «Не считается заявкой». Без неё разработчику незачем отказываться от события на кнопке: так быстрее, и в предварительном просмотре всё сработает, а лишние события всплывут только через неделю.
Что не должно считаться заявкой
Как форма работает на самом деле, видно, только если пройти её руками: один раз правильно, а потом со всеми ошибками, которые сделает живой человек. Для каждого случая заранее запишите, сколько заявок должно появиться в CRM и сколько событий в GA4:
| Случай | Новых заявок в CRM | Событий generate_lead |
|---|---|---|
| Форма заполнена правильно | 1 | 1 |
| Email не заполнен, форма подсветила ошибку | 0 | 0 |
| Сервер не сохранил заявку | 0 | 0 |
| Два быстрых клика по «Отправить» | 1 | 1 |
| Страницу «Спасибо» обновили или открыли снова | 0 | 0 |
| Тот же человек отправил форму ещё раз на следующий день | 1 или 0, по правилу CRM | 1 |
Ошибку сервера руками не вызвать. Попросите разработчика сломать сохранение на тестовой копии сайта или хотя бы показать в коде, что событие уходит после успешного ответа, а не до него.
Последняя строка - единственная, где расхождение заложено заранее. GA4 считает отправки формы. CRM, если она склеивает повторы по номеру телефона, считает людей. Ошибки тут нет, просто единицы разные.
Как проверить в DebugView
DebugView показывает события с вашего устройства сразу, не дожидаясь обработки отчётов. Режим отладки включают через предварительный просмотр GTM, так же как при настройке GA4.
Откройте рядом три окна: сайт в предварительном просмотре, DebugView («Администратор» → «Просмотр данных» → «DebugView») и CRM. Пройдите случаи из таблицы по порядку. У школы после правильной отправки в CRM появилась заявка 017, а в ленте DebugView - один generate_lead. Нажмите на него: в параметрах будет form_name со значением course_signup. Пустой email не должен добавить в ленту generate_lead, а два быстрых клика - больше одного события.
DebugView отвечает на один вопрос: ушло ли событие с вашего устройства в нужный момент и с нужными параметрами. Что приходит с телефонов клиентов, видно только при сверке с CRM.
У проверки есть побочный эффект: события, отправленные во время теста, попадут в обычные отчёты как настоящие заявки. Google советует отфильтровывать трафик разработки. В «Администраторе» откройте «Сбор и редактирование данных» → «Фильтры данных», создайте фильтр типа «Трафик разработки» с действием «Исключить» и переведите его в состояние «Активно». Фильтр убирает только события, отправленные в режиме отладки, поэтому проверяйте форму в предварительном просмотре GTM: тестовую заявку с обычной вкладки он пропустит в отчёты. И работает он только с новыми данными: тесты, которые прошли до него, останутся в отчётах.
Откуда пришла заявка
Чтобы отделить заявки с рекламы от остальных, ссылки размечают. Метки для Meta школа ставит по общей схеме UTM: utm_medium=paid_social, кампания course_start, в utm_content название объявления.
GA4 читает метки из адреса страницы сам. CRM их не увидит, пока форма не сохранит их в скрытых полях вместе с телефоном. Если форма стоит не на той странице, куда пришёл человек, метки при входе сохраняют в cookie, а форма берёт их оттуда.
Если меток нет, в CRM так и пишут: источник неизвестен. Менеджер, который ставит «Instagram» на глаз, вредит сверке больше пустого поля, потому что угаданный источник потом от настоящего не отличить. В плане отдельно запишите, какой источник сохраняет CRM: первый переход с метками или последний. С атрибуцией GA4 это не одно и то же, и в отдельной заявке ответы могут не совпасть.
40 событий и 34 заявки: сверка
Таргетолог разделил 120 000 ₸ на 40 событий и получил CPL 3 000 ₸. По CRM выходит 120 000 / 34 = 3 529 ₸ за заявку. По этой цифре владелец решает, продлевать ли кампанию, так что 529 ₸ разницы на каждой заявке - не мелочь.
Сказать, что CRM потеряла шесть заявок, нельзя: по двум итоговым числам причину не определить. Лишние шесть событий могли взяться из повторных отправок, которые CRM склеила, из тестовых заявок коллег, которые менеджер потом удалил, или из кликов с пустым email, если тег висит на кнопке. А могло быть и так: лишних событий восемь, и ещё две настоящие заявки не дошли до GA4 из-за отказа в баннере cookies. Итог в обоих случаях один и тот же, 40 против 34.
Сверяют по шагам:
- Возьмите одинаковый период: те же семь дней в обеих системах и один часовой пояс.
- Разложите
generate_leadи заявки из CRM по дням. Если расходятся только дни, когда команда тестировала форму, первым делом нужен фильтр трафика разработки. - Пройдите случаи из таблицы исключений в DebugView.
- Найдите в CRM заявки с одинаковым телефоном и заявки без источника за ту же неделю.
Школа прошла эти шаги, и на третьем выяснилось, что generate_lead висит на клике по кнопке: пустой email дал событие, а заявки не было. Сколько лишних событий дал клик по кнопке, сколько повторы и сколько заявок GA4 потерял на отказах в баннере, по прошлой неделе уже не узнать. Разработчик перевесил событие на ответ сервера, а следующую неделю сверят заново.
Подгонять цифры коэффициентом не надо. «В CRM на 15% меньше, умножаем GA4 на 0,85» убирает расхождение из отчёта, а не с сайта: тег по-прежнему считает клики, только этого больше никто не видит.
В отчёте клиенту подпишите три вещи: что считали (заявка - запись в CRM с меткой paid_social), в каких единицах (отправки формы или люди, по правилу CRM) и за какой период. С такой подписью на вопрос «кто врёт» отвечает сама таблица.
Задание: план измерения для своей формы
Возьмите форму, к которой у вас есть доступ: тестовый сайт из недели 1 трека «Старт», сайт знакомого бизнеса или свой. Если CRM нет, вместо неё подойдёт таблица или почта, куда приходят заявки.
Выполнено 0 из 6
Если пустая форма дала generate_lead, событие висит на клике или на form_submit. Его перевешивают на событие dataLayer, которое сайт отправляет после ответа сервера. Если событие добавилось при обновлении страницы «Спасибо», тег срабатывает на просмотр этой страницы, и лечится это так же. Когда два быстрых клика создали две заявки и два события, GA4 считает верно, а чинить нужно форму: кнопка должна блокироваться после первого нажатия. А если DebugView пустой, дело не в условии, а в подключении: посмотрите, сработал ли тег Google, свой ли в нём идентификатор G- и не отказались ли вы от аналитики в баннере cookies.
Покажите обе таблицы и скриншоты клиенту до запуска рекламы. Когда через месяц цифры GA4 и CRM разойдутся, у вас уже будет документ, где записано, что считается заявкой.
Видео: события и DebugView
Видео на русском, из серии уроков по GA4: какие бывают события и как подключить DebugView.