UTM-метки GA4 уронили ROAS 3.2→1.8: как вернули 40% конверсий за 2 дня

UTM-метки в GA4 и чистая разметка кампаний Блог
Как 3 ошибки в UTM-разметке уронили ROAS с 3.2 до 1.8 и съели 40% конверсий. Naming rules, QA-чек и связка GA4+Keitaro+CAPI — на кейсе $12k бюджета.

Лили на нутру в DE через FB+TG-связку, бюджет $400/день, ROAS держался на 3.2 первые две недели. Потом цифры в GA4 поплыли: (not set) вырос до 18% сессий, кампании в Traffic acquisition размножились в три раза от реального числа запусков, ROAS по отчётам упал до 1.8. Креативы не менялись, гео то же, оффер тот же. Проблема оказалась в UTM — точнее, в трёх разных написаниях одного и того же источника, которые медиабайеры тащили из шаблонов без сверки.

Разметка трафика для арбитража — это не формальность для отчётности перед клиентом. Это единственный способ понять, какая связка реально работает, когда у тебя 40+ креативов в ротации и параллельно льёшь с трёх кабинетов. Я разберу, как мы вернули чистую аналитику за два дня, и что нужно зафиксировать до первого клика по объявлению.

Откуда берётся хаос: реальный кейс на $12k бюджета

Ситуация: команда из четырёх медиабайеров, общий пул креативов, заливаем нутру на DE/AT/CH. Каждый собирает UTM сам, шаблона нет, у каждого свой вкус. На выходе в GA4 получили такую картину по одному источнику FB:

  • facebook — 4 200 сессий
  • Facebook — 1 850 сессий
  • fb — 3 100 сессий
  • meta_ads — 980 сессий
  • facebook_ads — 720 сессий

Для GA4 это пять разных utm_source. Значения параметров чувствительны к регистру — facebook и Facebook улетают в разные строки отчёта. Когда мы свели всё к единому facebook, общая конверсия по источнику выросла на 40% не потому что трафик стал лучше — просто аналитика начала видеть его целиком. До этого половина конверсий висела в пяти разных строках, и каждая казалась слабой.

Базовый минимум параметров под арбитраж

Из всего зоопарка UTM реально нужны пять штук. Остальное — украшательство, которое забивает URL и ломает шорт-линки.

Что заполнять всегда

  • utm_source — конкретная площадка: facebook, tiktok, google, push_house, propellerads. Без вариаций регистра, без подчёркиваний-дефисов вразнобой.
  • utm_medium — тип трафика: cpc, cpm, paid-social, email, push. Жёстко фиксированный список из 5-7 значений, не больше.
  • utm_campaign — связка по формуле: гео_оффер_воронка_дата. Например: de_nutra-keto_pre-lp_2026-05.
  • utm_content — крео или плейсмент: creo-23_feed, creo-23_reels. Сюда же дробление по placements внутри одной кампании.
  • utm_id — идентификатор кампании из рекламного кабинета. Нужен, если планируешь импорт расходов в GA4 или сверку с Keitaro по cost data.

Чек по EPC и CTR в разрезе крео

Когда utm_content размечен честно, GA4 показывает по каждому крео отдельный EPC. У нас на пробивных крео EPC доходил до $1.40, у проседающих болтался около $0.30 — без чистой разметки эту разницу не увидеть, всё сливается в средний $0.65 по кампании. CTR в FB Ads Manager и сессии в GA4 должны биться с расхождением не больше 5-8%, иначе где-то теряешь данные.

Naming rules: одна таблица на всю команду

Заведи Google Sheet с тремя вкладками: source, medium, campaign-pattern. На каждом запуске байер открывает её и копирует значения, а не сочиняет с нуля. У нас на проде так работает третий год, и за это время мы ни разу не словили мусор в Traffic acquisition.

Формула campaign под партнёрку

Хорошая структура utm_campaign: гео_вертикаль-оффер_тип-воронки_когорта. Пример боевой:

  • de_nutra-keto_white-pre-lp_w22 — Германия, кето-оффер, белый прелендинг, 22-я неделя.
  • at_gambling-1xbet_direct_w22 — Австрия, гемблинг 1xBet, прямой залив без прелендинга.
  • ch_dating-mainstream_quiz-lp_w22 — Швейцария, мейнстрим-дейтинг, квиз-прелендинг.

Длина строки 30-45 символов — золотая середина. Короче — теряешь контекст, длиннее — ломаются короткие ссылки и неудобно фильтровать в отчётах.

Список разрешённых medium

Зафиксируй максимум 7 значений и больше не добавляй: cpc, cpm, paid-social, push, email, referral, direct. Всё. Если байер хочет добавить новый medium — это решается на созвоне с тимлидом, а не правкой в URL на ходу.

Конфликт с Keitaro и Conversions API

Если поверх GA4 крутится Keitaro как трекер и FB Conversions API как серверный слой — три системы должны видеть одни и те же значения source/medium/campaign. Иначе атрибуция расходится: в кабинете FB кампания крутится под одним именем, в Keitaro у неё своя метка, в GA4 третий вариант. Я видел проекты, где из-за рассинхрона между этими тремя слоями ROAS считался с погрешностью 35%.

Решение простое: utm_campaign в ссылке = название кампании в FB Ads Manager = поток в Keitaro. Один и тот же идентификатор протаскивается насквозь. Conversions API при этом тоже отправляет campaign_id, который мэтчится с utm_id — тогда серверные конверсии красиво приземляются в нужный канал, а не уходят в Direct/None.

Контроль качества до запуска

На проверку одной ссылки уходит 90 секунд. На разбор грязной аналитики через месяц залива — 6-8 часов работы аналитика. Поэтому QA-ритуал у нас обязательный для каждого нового потока:

  1. Открываешь готовый URL в инкогнито, смотришь, что все 5 параметров реально подставились в адресной строке.
  2. Проверяешь регистр: только lowercase, никаких Facebook или CPC.
  3. Кликаешь по ссылке, ждёшь 60 секунд, идёшь в GA4 Realtime → видишь свой визит с правильными source/medium/campaign.
  4. Сверяешь параметры в Keitaro — клик должен прилететь с теми же метками, что и в GA4.
  5. Если льёшь с FB — проверяешь, что utm_id в ссылке совпадает с campaign_id из Ads Manager API.

Что делать, если аналитика уже грязная

Полностью восстановить старые данные не получится — GA4 не позволяет переписывать события задним числом. Но привести новый трафик в порядок можно за два дня. Алгоритм рабочий, проверен на 5М кликов:

  1. Выгружаешь из GA4 топ-50 значений по source, medium, campaign за последний месяц.
  2. Группируешь дубли вручную в табличке: facebook/Facebook/fb → facebook.
  3. Закрепляешь финальный словарь в naming rules, рассылаешь команде.
  4. Все новые ссылки собираешь только через генератор на базе этого словаря (Campaign URL Builder + допвалидация).
  5. Через 14 дней снимаешь срез — доля (not set) должна упасть ниже 3%, число уникальных source — стабилизироваться.

Чек-лист перед запуском кампании

  • Все 5 параметров (source/medium/campaign/content/id) заполнены
  • Значения только в нижнем регистре
  • source/medium взяты из утверждённого списка, не выдуманы на ходу
  • campaign следует формуле гео_оффер_воронка_когорта
  • utm_id совпадает с ID кампании в рекламном кабинете
  • Тестовый клик отображается в GA4 Realtime с правильными метками
  • Метки сходятся между GA4, Keitaro и Conversions API
  • Длина итогового URL не больше 200 символов (иначе ломаются короткие ссылки в TG)

UTM — это не магия и не отчётность для галочки. Это дисциплина, которая решает, увидишь ты честный ROAS по связке или будешь сливать бюджет на крео, которое в реальности конвертит, но прячется в (not set). Заведи таблицу naming rules сегодня — через месяц скажешь спасибо.

Оцените статью
BoostClicks
Информационные партнёры Инфо партнёры