Технический плейбук

Устранение разрыва атрибуции — план для технической команды

📅 19 мая 2026 🔑 Аккаунт: 9667368025 📊 GA4: 389989873 / 375389843

Контекст: что уже доказано

Диагноз подтверждён данными трёх независимых источников (Google Ads API, GA4 API, данные Altegio). Кратко:

  • Реальные онлайн-бронирования барбершопа в апреле 2026 — 1 929/мес (данные Altegio).
  • Google Ads атрибутировал 96 конверсий в том же месяце — разрыв в 20 раз.
  • Атрибутируемые сессии google/cpc в свойстве бронирования 375389843 упали с 3 025 (сен 2025) до 2 285 (апр 2026, −25%), а сессии odessa-mama.cz / referral выросли с 2 660 до 3 628 (+36%) — математически инверсированные кривые, суммарный поток стабилен ~5 700–5 900 сессий/мес.
  • Механизм: GCLID / _gl-параметр линкера GA4 теряется при переходе odessa-mama.cz → n.alteg.io (iframe). Бронирование регистрируется в alteg.io-свойстве как referral, а не cpc.
  • Отягощающий фактор: Consent Mode V2 отсутствует (EU-аккаунт).
Этот плейбук — инструкция для устранения, а не повторная диагностика.

Структура плейбука

Восемь независимых углов расследования / устранения. Каждый самодостаточен — их можно распределить между членами команды и выполнять параллельно (рекомендации по параллелизации — в разделе «Порядок действий»).

Угол Владелец Приоритет
1. GTM/GA4 кросс-доменный линкер на odessa-mama.cz Разработчик + GTM-специалист P0
2. iframe-граница n.alteg.io (ограничение третьей стороны) Разработчик P0
3. Авто-теггинг Google Ads и путь GCLID Менеджер Google Ads P0
4. Consent Mode V2 / CMP Разработчик + GTM-специалист P0
5. Фрагментация GA4-свойств GTM/GA4-специалист P1
6. Конверсионное действие 6555949568: конфигурация Менеджер Google Ads P0
7. Резервный путь: офлайн-импорт конверсий Разработчик + Менеджер Google Ads P1
8. Харнес верификации и измерения восстановления GTM/GA4-специалист P0 (сопровождает всё)

Углы расследования

Угол 1

GTM/GA4 кросс-доменный линкер на odessa-mama.cz

P0

Гипотеза

Тег GA4 на odessa-mama.cz не сконфигурирован для кросс-доменного отслеживания с доменами alteg.io / n.alteg.io. Из-за этого при переходе на iframe бронирования браузер не получает параметр _gl, который содержит идентификатор сессии/клика, и свойство 375389843 начинает новую сессию с источником odessa-mama.cz / referral.

Как проверить

  1. Открыть Google Tag Manager контейнера odessa-mama.cz.
  2. Найти тег типа GA4 Configuration (или Google Tag с Measurement ID G-XXXXXXX для свойства 389989873).
  3. В дополнительных настройках тега найти поле Domains for cross-domain measurement (GTM UI) или параметр linker.domains.
  4. Проверить, есть ли в списке alteg.io и n.alteg.io. Если поле пустое или список не содержит этих доменов — линкер не настроен.
  5. Альтернативная проверка через браузер: открыть odessa-mama.cz в Chrome DevTools → Network. Нажать кнопку бронирования. В момент перехода отфильтровать запросы по n.alteg.io. Проверить URL первого запроса к n.alteg.io: должен содержать параметр _gl=. Если _gl= отсутствует — линкер не работает.
  6. Дополнительная проверка через GA4 DebugView (описана в Угле 8).

Как починить

Вариант A — конфигурация в GTM (рекомендуется, без правки кода):

  1. В контейнере GTM открыть тег GA4 Configuration для свойства 389989873.
  2. Перейти в Additional tag settingsDomains for cross-domain measurement (или Linked domains).
  3. Добавить оба домена: alteg.io и n.alteg.io.
  4. Опубликовать контейнер.

Если используется gtag.js без GTM:

<script>
  gtag('config', 'G-XXXXXXXXXX', {
    linker: {
      domains: ['alteg.io', 'n.alteg.io'],
      accept_incoming: true
    }
  });
</script>
Важно: параметр accept_incoming: true — обязателен для того, чтобы свойство 375389843 на стороне Altegio принимало входящий _gl и восстанавливало сессию. Если у команды нет доступа к GTM Altegio — этот флаг не поможет (см. Угол 2).

Вариант B — объединение свойств (надёжнее долгосрочно):

Перевести оба домена в единое GA4-свойство. Это требует:

  1. Создания нового GA4-свойства (или реконфигурации 389989873 под два домена).
  2. Добавления обоих доменов в список cross-domain в настройках свойства (Admin → Data Streams → Configure tag settings → Configure your domains).
  3. Перепривязки конверсионного действия 6555949568 к новому свойству.
  4. Длительность: 3–5 рабочих дней (включая период стабилизации данных).

Как верифицировать

  • После публикации: открыть odessa-mama.cz, нажать «Забронировать», проверить URL iframe в DevTools — должен содержать _gl= (значение длинное, вида _gl=1*xyz...).
  • В GA4 DebugView (свойство 375389843): должно появиться событие с session_source = google / cpc для тестового перехода из платного объявления.
  • Полный тест описан в Угле 8.
👤 Владелец: Разработчик odessa-mama.cz + GTM-специалист 🔴 Приоритет: P0 — выполнить в течение рабочей недели
Угол 2

iframe-граница n.alteg.io (ограничение третьей стороны)

P0

Гипотеза

Даже при корректно настроенном линкере на стороне odessa-mama.cz (Угол 1) параметр _gl должен быть принят и обработан Altegio-виджетом на n.alteg.io. Если Altegio использует <iframe> с атрибутом sandbox или иным ограничением — браузер может блокировать передачу куки сессии. Альтернативный сценарий: _gl присутствует в URL iframe, но SPA Altegio его игнорирует и не передаёт в GA4.

Как проверить

Шаг 1 — проверить атрибуты iframe:

В исходном коде страницы odessa-mama.cz (View Source или DevTools → Elements) найти элемент <iframe>, ведущий на n.alteg.io. Проверить атрибуты:

  • Признак проблемы: атрибут sandbox без allow-same-origin — блокирует куки.
  • Признак проблемы: allow-same-origin отсутствует в списке sandbox значений.
  • Признак проблемы: атрибут referrerpolicy="no-referrer" — обрежет referer.

Шаг 2 — проверить URL iframe при загрузке:

DevTools → Network → отфильтровать n.alteg.io:

Состояние Как выглядит URL первого запроса к n.alteg.io
Линкер работает https://n.alteg.io/...?_gl=1*abc123*...
Линкер не передаётся https://n.alteg.io/... (без _gl=)

Если _gl= присутствует в URL — линкер на стороне odessa-mama.cz работает. Следующий вопрос: читает ли Altegio SPA этот параметр и передаёт ли в GA4?

Шаг 3 — проверить gtag на стороне n.alteg.io:

В DevTools → Sources найти загруженные JS-файлы n.alteg.io. Проверить, инициализирован ли там gtag('config', 'G-...') и есть ли параметр accept_incoming: true в конфигурации. Если у команды нет доступа к коду Altegio — этот шаг требует запроса к поддержке Altegio.

Шаг 4 — проверить GA4 DebugView свойства 375389843 во время тест-бронирования:

После нажатия «Забронировать» в DebugView должно появиться событие session_start. Проверить параметр session_source:

  • google / cpc → линкер работает конец-в-конец.
  • odessa-mama.cz / referral → линкер передаётся, но Altegio не принимает _gl.
  • (direct) / (none)_gl вообще не передаётся.

Как починить

Сценарий A: iframe src не содержит _gl= — решается через Угол 1 (настройка линкера на odessa-mama.cz).

Сценарий B: _gl= присутствует в URL iframe, но Altegio не обрабатывает:

Это ограничение третьей стороны — код Altegio вне контроля команды. Действия:

  1. Написать в техподдержку Altegio с конкретным запросом:
«Наш виджет бронирования встроен как iframe с src=https://n.alteg.io/.... Мы используем Google Analytics 4 cross-domain tracking. Параметр _gl присутствует в URL iframe при загрузке (проверено в DevTools). Необходимо подтвердить: (1) обрабатывает ли ваш SPA параметр _gl в URL при инициализации? (2) настроен ли ваш тег GA4 с accept_incoming: true для домена odessa-mama.cz? Если нет — возможно ли включить это в конфигурации виджета или через настройки аккаунта Altegio?»
  1. Если Altegio не может поддержать cross-domain — активировать резервный путь (Угол 7: офлайн-импорт конверсий).

Сценарий C: iframe sandbox блокирует куки:

Убрать ограничительные атрибуты или добавить allow-same-origin в значение sandbox.

Как верифицировать

URL первого запроса к n.alteg.io содержит _gl= AND в GA4 DebugView свойства 375389843 событие session_start атрибутируется как google / cpc (а не referral).

👤 Владелец: Разработчик odessa-mama.cz. При обнаружении ограничения Altegio — эскалация к менеджеру аккаунта Altegio 🔴 Приоритет: P0 — выполнить параллельно с Углом 1
Угол 3

Авто-теггинг Google Ads и путь GCLID

P0

Гипотеза

Авто-теггинг Google Ads добавляет параметр gclid к URL целевой страницы после клика по объявлению. Если авто-теггинг отключён или параметр gclid теряется на промежуточных редиректах — GA4 не может восстановить атрибуцию даже при работающем линкере.

Как проверить

Факт из API (источник: live GAQL-запрос к аккаунту 9667368025, session 2039):
customer.auto_tagging_enabled = TRUE — авто-теггинг включён. Эта часть в порядке.

Проверка выживаемости gclid до кнопки бронирования:

  1. Кликнуть платное объявление (или добавить ?gclid=testvalue к URL landing page для проверки механики без траты бюджета).
  2. Проверить URL landing page в адресной строке: должен содержать ?gclid= (или &gclid=).
  3. Нажать кнопку «Забронировать».
  4. Проверить URL открывшегося iframe n.alteg.io: должен содержать _gl=....

Если gclid есть в landing URL но _gl= нет в iframe URL — проблема в линкере (Угол 1).
Если gclid отсутствует в landing URL — проверить Tracking Template и редиректы.

Проверка Tracking Template:

Google Ads → выбрать кампанию → Settings → Additional settings → URL options → Tracking Template. Если установлен tracking template с промежуточным редиректом на сторонний click-tracker — убедиться, что этот tracker пробрасывает {gclid} на финальный URL. Если нет — GCLID теряется до попадания пользователя на сайт.

Проверка Parallel Tracking:

Google Ads → Account Settings → Parallel Tracking. Если включён с кастомным click measurement URL — аналогичная проверка пробрасывания gclid.

Как починить

  • Авто-теггинг включён (подтверждено) — действий не требует.
  • Если Tracking Template фильтрует gclid: добавить {gclid} как явный ValueTrack параметр в URL.
  • Если используется промежуточный click-tracker: убедиться что он пробрасывает gclid на {lpurl}.

Как верифицировать

После клика на объявление: URL целевой страницы содержит gclid=. GA4 DebugView на odessa-mama.cz показывает page_location с gclid= в параметрах.

👤 Владелец: Менеджер Google Ads 🔴 Приоритет: P0 — быстрая проверка, 20–30 минут
Угол 4

Consent Mode V2 / CMP

P0

Гипотеза

Чехия входит в ЕС. Без корректной реализации Consent Mode V2 пользователи, отклонившие cookies, полностью выпадают из атрибуции и не дают даже смоделированных конверсий. Google начал принудительно применять это требование с января 2026 — что совпадает с началом обвала конверсий. По данным отраслевых исследований, 30–70% пользователей в ЕС отклоняют cookies.

Как проверить

Шаг 1 — наличие consent defaults в коде сайта:

В исходном коде odessa-mama.cz (View Source) или в GTM Preview проверить — вызывается ли до загрузки GA4-тега:

gtag('consent', 'default', {
  'ad_storage': 'denied',
  'analytics_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied'
});

Если этого вызова нет до инициализации GA4 — CM V2 не реализован. Признак в GTM: тег типа «Consent Initialization» с триггером «Consent Initialization - All Pages».

Шаг 2 — проверить наличие CMP:

Открыть odessa-mama.cz в новом инкогнито-окне. Должен появиться GDPR-баннер с возможностью выбора «Принять» / «Отклонить». Если баннера нет — CMP отсутствует.

Шаг 3 — проверить смоделированные конверсии в GA4:

GA4 Admin → Data Settings → Data Collection → Modeling. Если раздел недоступен или показывает «Not eligible» — CM V2 не настроен.

Шаг 4 — проверить Enhanced Conversions в Google Ads:

Google Ads → Tools → Conversions → Settings → Enhanced Conversions for Web. Если не включено — смоделированные конверсии для пользователей с ad_storage: denied не активированы.

Как починить

Шаг A — установить consent defaults в GTM:

Создать тег типа Custom HTML с триггером Consent Initialization - All Pages (или All Pages с высоким приоритетом срабатывания — до GA4 Config). Содержимое тега:

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'analytics_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'wait_for_update': 500
  });
</script>

Этот тег должен срабатывать до тега GA4 Configuration. Проверить порядок в GTM Tag Sequencing.

Шаг B — интегрировать CMP:

Подключить CookieBot, Usercentrics, Didomi или аналогичный GDPR-совместимый CMP. CMP при принятии cookies должен вызывать:

gtag('consent', 'update', {
  'ad_storage': 'granted',
  'analytics_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted'
});

Большинство CMP имеют готовую интеграцию с GTM через Consent Mode API.

Шаг C — включить Enhanced Conversions в Google Ads:

Google Ads → Tools → Conversions → Settings → Enhanced Conversions for Web: включить.

Юридический аспект (независимо от рекламы): отсутствие механизма согласия нарушает GDPR (Regulation EU 2016/679) и ePrivacy Directive, применимые в Чехии. Это требование действует вне зависимости от состояния рекламных кампаний. Ответственность лежит на операторе сайта.

Как верифицировать

  • В режиме инкогнито нажать «Отклонить cookies» — в Chrome DevTools Application → Storage → Cookies: куки _ga и _gcl_aw не должны устанавливаться.
  • В GTM Tag Assistant: тег Consent Initialization срабатывает первым в цепочке.
  • Через 14 дней после внедрения: в Google Ads → Campaigns проверить наличие столбца «Modeled conversions» с ненулевыми значениями.
👤 Владелец: Разработчик сайта odessa-mama.cz + GTM-специалист 🔴 Приоритет: P0 — независимо от статуса линкера; юридическое требование ЕС
Угол 5

Фрагментация GA4-свойств

P1

Гипотеза

Текущая архитектура: два отдельных GA4-свойства для двух доменов одного бизнеса — 389989873 (odessa-mama.cz) и 375389843 (alteg.io). Конверсионное действие 6555949568 привязано к свойству 375389843. Ни одно из свойств, вероятно, не сконфигурировано с указанием доменов другого — что создаёт структурную точку сбоя.

Как проверить

Проверить конфигурацию cross-domain в свойстве 375389843:

GA4 Admin → Data Streams → выбрать Web-поток → Configure tag settings → Configure your domains. Проверить: есть ли в списке домен odessa-mama.cz? Если нет — свойство не настроено принимать линкер от odessa-mama.cz.

Проверить конфигурацию cross-domain в свойстве 389989873:

Аналогично: должны присутствовать alteg.io и n.alteg.io.

Проверить связку GA4 → Google Ads:

GA4 Admin → свойство 375389843 → Product Links → Google Ads Links. Должна быть активная связка с аккаунтом 9667368025. Это обязательное условие для импорта конверсионного действия 6555949568.

Как починить

Краткосрочное решение (параллельно с Углом 1):

  1. В GA4 Admin свойства 375389843 → Data Streams → Configure tag settings → Configure your domains: добавить odessa-mama.cz.
  2. В GA4 Admin свойства 389989873 → Data Streams → Configure tag settings → Configure your domains: добавить alteg.io и n.alteg.io.

Это позволяет обоим свойствам обрабатывать cross-domain _gl-параметр корректно.

Долгосрочное решение (рекомендуется, снижает риск повторного разрыва):

Объединить оба домена в единое GA4-свойство:

  1. Создать новый data stream в свойстве 389989873 для домена n.alteg.io (или создать новое свойство).
  2. В список доменов добавить оба: odessa-mama.cz и n.alteg.io.
  3. Перепривязать конверсионное действие 6555949568 к событию booked из объединённого свойства.
  4. Параллельный запуск старого и нового свойств минимум 2 недели для сравнения данных перед переключением.

Как верифицировать

После настройки: в GA4 DebugView тест-бронирования сессия в свойстве 375389843 показывает session_source = google / cpc.

👤 Владелец: GTM/GA4-специалист 🟠 Приоритет: P1 — выполнить в течение 2 недель. Конфигурация доменов в обоих свойствах — фактически P0, делается за 15 минут и является обязательным условием для работы Угла 1.
Угол 6

Конверсионное действие 6555949568: конфигурация

P0

Гипотеза

Конверсионное действие «odessa-mama.cz -alteg.io - GA4 (web) booked» активно и является первичной целью Smart Bidding. Большинство технических параметров (окно атрибуции 90 дней, MANY_PER_CLICK) — рабочие. Модель атрибуции требует проверки в UI (API возвращает UNKNOWN). Главная проблема: аккаунт перегружен шумовыми первичными целями (8 действий вместо рекомендуемых 2–3), что деградирует сигнал для алгоритма.

Данные из API (источник: live GAQL-запрос к аккаунту 9667368025, session 2039)

Конфигурация конверсионного действия 6555949568:

Параметр Значение API Расшифровка
status 2 ENABLED — активен
primary_for_goal TRUE Первичная цель Smart Bidding
attribution_model 1 UNKNOWN — API не возвращает читаемую модель; фактическая модель требует проверки в UI
click_through_lookback_window_days 90 Окно атрибуции по кликам: 90 дней
view_through_lookback_window_days 1 Окно по показам: 1 день
counting_type 3 MANY_PER_CLICK — каждый клик может порождать несколько конверсий

Справка по enum attribution_model (Google Ads API v21, ресурс ConversionAction):

Значение Константа Значение
0UNSPECIFIEDНе задан
1UNKNOWNAPI не может вернуть значение (≠ Data-Driven)
100EXTERNALВнешняя атрибуция
101GOOGLE_ADS_LAST_CLICKLast Click
102FIRST_CLICKFirst Click
103LINEARLinear
104TIME_DECAYTime Decay
105POSITION_BASEDPosition-Based
106DATA_DRIVENУправляемая данными
Инженерная заметка: поле attribution_model_settings.attribution_model = 1 означает UNKNOWN — это технический артефакт API, не признак Data-Driven модели. DATA_DRIVEN соответствует значению 106. Фактическую модель атрибуции для действия 6555949568 необходимо проверить вручную в UI:

Google Ads → Tools & Settings → Conversions → «odessa-mama.cz -alteg.io - GA4 (web) booked» → Attribution model

90-дневное окно и MANY_PER_CLICK — подходящие настройки для сервисного бизнеса с повторными визитами. Модель атрибуции требует верификации.

Проблема: перегруженность Smart Bidding шумовыми первичными целями.

Полный список ENABLED конверсионных действий с primary_for_goal = TRUE (из live API, session 2039):

ID Название attribution_model lookback (клик) Рекомендация
6555949568 odessa-mama.cz -alteg.io - GA4 (web) booked UNKNOWN (1) — проверить UI 90 дней Оставить PRIMARY
883097740 Calls from ads LAST_CLICK (101) 30 дней Оставить PRIMARY
816780702 Clicks to call LAST_CLICK (101) 30 дней Перевести в SECONDARY
804194344 Local actions - Directions LAST_CLICK (101) 30 дней Перевести в SECONDARY
804306621 Local actions - Other engagements LAST_CLICK (101) 30 дней Перевести в SECONDARY
887101386 Store visits UNKNOWN (1)* 30 дней Перевести в SECONDARY
7456294537 YouTube follow-on views LAST_CLICK (101) 30 дней Перевести в SECONDARY
807483557 Звонок с обьявления LAST_CLICK (101) 30 дней Перевести в SECONDARY или REMOVED (дублирует 883097740)

*Store visits (887101386): attribution_model=1 — значение UNKNOWN по API v21 enum. Store Visits используют собственную методологию Google; фактическая модель атрибуции через этот API-field не читается.

Итого PRIMARY: 8 действий. Цель — 2 (booked + Calls from ads).

Как починить

В Google Ads UI: Tools & Settings → Conversions → выбрать каждое из 6 шумовых действий → Edit → Goal and action optimization → Secondary action (не Primary).

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

Важно: Smart Bidding переобучится после изменения первичных целей. Нестабильность показателей в течение 5–7 дней — нормальна.

Как верифицировать

Google Ads → Tools → Conversions: в столбце «Goal» только booked и Calls from ads имеют статус Primary.

👤 Владелец: Менеджер Google Ads 🔴 Приоритет: P0 — выполнить в течение рабочей недели
Угол 7

Резервный путь: офлайн-импорт конверсий

P1

Гипотеза

Если Altegio — закрытая система, которая не может передавать _gl-параметр (ограничение iframe или политика провайдера) — cross-domain атрибуция через GA4 физически невозможна. В этом случае единственный надёжный путь — Google Ads Click Conversion (Offline Conversion Import): фиксировать gclid на стороне odessa-mama.cz в момент перехода к бронированию, хранить его, а подтверждённое бронирование загружать в Google Ads как офлайн-конверсию.

Архитектура резервного пути

[Клик на рекламу]
      |
      v
[Landing page odessa-mama.cz]
  URL: ?gclid=CjwK...
      |
      v
[JavaScript capture_gclid.js]
  gclid = new URLSearchParams(location.search).get('gclid');
  if (gclid) {
    localStorage.setItem('gclid', gclid);
    localStorage.setItem('gclid_ts', Date.now());
    // TTL: 90 дней (соответствует lookback window)
    document.cookie = `gclid=${gclid}; max-age=7776000; path=/; SameSite=Lax`;
  }
      |
      v
[Нажатие кнопки "Забронировать"]
  gclid = localStorage.getItem('gclid') || getCookie('gclid');
  // Проверить TTL: Date.now() - gclid_ts < 90*24*3600*1000
  // Если Altegio поддерживает кастомные URL-параметры:
  iframe.src = `https://n.alteg.io/...?ref_gclid=${gclid}`;
      |
      v
[Altegio: бронирование подтверждено]
  Webhook / API callback при событии booking.confirmed.
  Если Altegio возвращает ref_gclid в payload — отлично.
  Если нет — postMessage из iframe при завершении бронирования.
      |
      v
[Backend / Google Sheets / Webhook processor]
  Хранение: gclid, conversion_time, booking_id, value (опционально).
      |
      v
[Google Ads: Offline Conversion Import]
  Ежедневная загрузка через CSV или API.

Данные для импорта (обязательные поля)

Поле Источник Пример
gclid localStorage / cookie odessa-mama.cz CjwKCAiA...
conversion_action Resource name действия в Google Ads customers/9667368025/conversionActions/6555949568
conversion_date_time Altegio webhook timestamp 2026-05-19 14:30:00+02:00
conversion_value Опционально 450 (CZK)
currency_code CZK

Окно импорта: Google Ads принимает офлайн-конверсии в течение 90 дней от клика. Это соответствует текущему click_through_lookback_window_days = 90 действия 6555949568 (подтверждено live API, session 2039).

Запрос к Altegio (для резервного пути)

При обращении в техподдержку Altegio запросить:

  1. Поддерживает ли виджет кастомные параметры в iframe src (например, ?ref_gclid=)?
  2. Возвращает ли webhook booking.confirmed кастомные параметры, переданные при инициализации виджета?
  3. Отправляет ли SPA postMessage при завершении бронирования, и включает ли это событие данные о booking_id?

Механизм импорта

Вариант 1 — CSV загрузка (самый простой):

Google Ads → Tools → Conversions → Uploads → Upload file.

Формат файла:

Parameters:TimeZone=+0200
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
CjwK...,odessa-mama.cz -alteg.io - GA4 (web) booked,"2026-05-19 14:30:00+02:00",450,CZK

Загружать ежедневно. Можно автоматизировать через Google Sheets → Apps Script.

Вариант 2 — Google Ads API (производственный):

from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_dict(credentials)
service = client.get_service("ConversionUploadService")

click_conversion = client.get_type("ClickConversion")
click_conversion.gclid = "CjwK..."
click_conversion.conversion_action = (
    "customers/9667368025/conversionActions/6555949568"
)
click_conversion.conversion_date_time = "2026-05-19 14:30:00+02:00"
click_conversion.currency_code = "CZK"
click_conversion.conversion_value = 450.0

request = client.get_type("UploadClickConversionsRequest")
request.customer_id = "9667368025"
request.conversions.append(click_conversion)
request.partial_failure = True

response = service.upload_click_conversions(request)

Условие активации

Резервный путь активируется если после выполнения Углов 1–2 GA4 DebugView по-прежнему показывает session_source = odessa-mama.cz / referral — т.е. Altegio физически не принимает _gl.

Офлайн-импорт можно развернуть параллельно с GA4 линкером как страховку — это не конфликт, это дополнительный слой атрибуции.

Как верифицировать

Google Ads → Tools → Conversions → Uploads: статус загрузки Successful без ошибок. Через 3–5 дней после первой загрузки: в отчёте кампаний в столбце All Conversions появятся конверсии, атрибутированные к реальным кликам.

👤 Владелец: Разработчик odessa-mama.cz (localStorage capture + Altegio webhook integration). Менеджер Google Ads (настройка conversion action для офлайн-загрузки, мониторинг uploads) 🟠 Приоритет: P1 — спроектировать в течение первой недели; реализовать если Углы 1–2 не восстановят атрибуцию за 14 дней
Угол 8

Харнес верификации и измерения восстановления

P0 (сопровождает всё)

Гипотеза

Без структурированного тест-протокола невозможно определить, какое из исправлений сработало, и убедиться что атрибуция восстановилась полностью. Этот харнес выполняется после каждого существенного изменения из Углов 1–6.

Инструменты

  • Chrome DevTools (Network, Elements, Application → Storage → Cookies / LocalStorage)
  • GA4 DebugView — открыть для обоих свойств (389989873 и 375389843) одновременно
  • Google Tag Assistant (расширение Chrome)
  • Google Ads → Tools → Conversions → Diagnostics (для проверки получения конверсии)

Процедура тест-бронирования

Шаг 1 — подготовка:

Открыть Chrome в режиме инкогнито (чистые куки). Включить GA4 DebugView для обоих свойств.

Шаг 2 — симуляция платного клика:

Вариант A: кликнуть на реальное платное объявление Google Ads (URL будет содержать gclid=).

Вариант B (без траты бюджета): открыть страницу с параметрами:
https://odessa-mama.cz/?gclid=testvalue123&utm_source=google&utm_medium=cpc

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

Шаг 3 — контрольные точки на главном сайте:

Что проверить Ожидаемый результат (исправлено)
URL landing page Содержит gclid=
Application → Cookies → odessa-mama.cz Присутствует _ga и _gcl_aw
GA4 DebugView 389989873 page_view, session_source = google / cpc
Tag Assistant Тег GA4 Config срабатывает, linker.domains содержит alteg.io

Шаг 4 — переход к бронированию:

  1. Нажать «Забронировать».
  2. DevTools → Network → отфильтровать n.alteg.io.
  3. Проверить URL первого запроса:
Состояние URL запроса к n.alteg.io
Линкер работает (цель) https://n.alteg.io/...?_gl=1*abc...
Линкер не передаётся (текущий баг) https://n.alteg.io/... (без _gl=)

Шаг 5 — контрольные точки в iframe / свойстве бронирования:

Что проверить Ожидаемый результат (исправлено) Текущий симптом (сломано)
GA4 DebugView 375389843: session_start session_source = google / cpc session_source = odessa-mama.cz / referral
Атрибуты iframe в DevTools → Elements Нет sandbox без allow-same-origin Возможно присутствие ограничений

Шаг 6 — завершить бронирование:

Дойти до финального шага бронирования (события booked в GA4 375389843).

Что проверить Ожидаемый результат
GA4 DebugView 375389843: событие booked session_source = google / cpc
session_id параметр Совпадает с сессией на odessa-mama.cz

Шаг 7 — проверить Google Ads Conversion Diagnostics:

Google Ads → Tools → Conversions → выбрать действие 6555949568 → Diagnostics. Через 24–48 часов после тест-бронирования должно появиться событие со статусом Received без ошибок.

Критерии успеха по углам

Угол Критерий успеха
1 (линкер GTM) URL iframe содержит _gl= при переходе на n.alteg.io
2 (Altegio iframe) GA4 DebugView 375389843: session_source = google / cpc
3 (GCLID) URL landing page содержит gclid= после клика на объявление
4 (CM V2) Consent defaults срабатывают до GA4; через 14 дней — Modeled conversions в Google Ads
5 (GA4 свойства) В обоих свойствах настроен список cross-domain доменов
6 (конв. действие) В Google Ads Conversions: PRIMARY только booked и Calls from ads
7 (офлайн) Upload статус Successful; конверсии в отчётах через 3–5 дней

Измерение восстановления (7–14 дней после фикса)

Сравнивать с baseline апреля 2026. Все данные ниже — из live API-запросов session 2038–2039.

Метрика Baseline апрель 2026 Ориентир через 14 дней
Конверсии Google Ads (действие 6555949568) 96/мес ≥400/мес (уровень до деградации)
google/cpc сессии в свойстве 375389843 2 285/мес ≥3 000/мес
odessa-mama.cz / referral в 375389843 3 628/мес ≤2 000/мес (снизятся по мере восстановления атрибуции)
Сумма обоих источников ~5 913/мес ~5 900/мес (трафик не должен измениться — только перераспределение атрибуции)
Реальные бронирования (Altegio) ~1 929/мес Без изменений (атрибуция не влияет на реальный спрос)
Примечание по срокам: GA4 импортирует события в Google Ads с задержкой до 48 часов. Smart Bidding переобучается 5–7 дней после изменения первичных целей. Метрики «до/после» смотреть в окне 14 дней, не через 24 часа.
👤 Владелец: GTM/GA4-специалист (проведение тест-бронирований, интерпретация DebugView). Менеджер Google Ads (Conversion Diagnostics, мониторинг восстановления в Google Ads) 🔴 Приоритет: P0 — запускать после каждого существенного изменения из Углов 1–6

Порядок действий для команды

Параллельный старт (День 1–2, могут выполняться одновременно)

Следующие углы независимы и не блокируют друг друга:

GTM-специалист

  • Угол 1 — настройка кросс-доменного линкера в GTM на odessa-mama.cz + добавление доменов в GA4 Admin (частично Угол 5).

Менеджер Google Ads

  • Угол 3 — быстрая проверка auto-tagging и Tracking Template (30 минут; auto-tagging подтверждён включённым, нужна только проверка gclid выживаемости).
  • Угол 6 — очистка первичных конверсионных целей (8 → 2 PRIMARY).

Разработчик

  • Угол 4 — начало работ по Consent Mode V2 defaults в GTM.

После публикации GTM (Угол 1)

  • Немедленно запустить Угол 8 — тест-бронирование + DebugView.

После тест-бронирования (День 2–3)

Результат DebugView определяет приоритет следующего шага:

Если session_source = google / cpc в свойстве 375389843:
Кросс-доменный линкер восстановлен. Продолжать мониторинг 7–14 дней (Угол 8). Угол 7 (офлайн-импорт) перевести в режим «спроектировать как страховку» без срочной реализации.
Если session_source = odessa-mama.cz / referral (после успешного Угла 1):
_gl= передаётся в URL iframe, но Altegio не принимает. Параллельно: отправить запрос в Altegio (Угол 2) + начать разработку офлайн-импорта (Угол 7). Срок реализации Угла 7 — 1 неделя.

Параллельно в течение 2 недель

  • Угол 4 (CM V2) — независимо от статуса линкера; не блокирует другие треки.
  • Угол 5 (конфигурация доменов GA4) — административная работа, 15–30 минут.
  • Угол 7 (проектирование офлайн-импорта) — даже при успешном Угле 1 рекомендуется как дополнительный уровень защиты.

Углы 1, 2, 3, 4, 6 не зависят друг от друга и могут выполняться в один день разными специалистами. Угол 8 — сквозной, запускается после каждого изменения. Угол 5 — административная предпосылка для Угла 1 (добавить домены в GA4 Admin до публикации GTM).