Як інтегрувати Google Ads із сайтом: основні способи та інструменти


Замовник або маркетолог ставить завдання: «Підключи Google Ads до сайту». На перший погляд – просто вставити скрипт у <head>. Насправді між «тег встановлено» і «Google Ads отримує коректні дані про конверсії» є кілька кроків, кожен із яких легко зробити неправильно.

Інтегрувати Google Ads із сайтом можна п'ятьма способами: тег Google (gtag.js), Google Tag Manager (GTM) із dataLayer, серверний GTM, імпорт конверсій із Google Analytics 4 і Google Ads API.

Нижче – що кожен із них вимагає від розробника: який код і куди вставляти, як не зламати відстеження конверсій блоком згоди, коли клієнтського GTM недостатньо і як перевірити все до запуску рекламних витрат.

Google Ads

Auto-tagging Google Ads та параметр gclid

Спершу попросіть маркетолога перевірити в Google Ads: Адміністратор → Налаштування облікового запису → Автоматичне позначення тегами. Якщо воно вимкнене, до рекламних URL не додається gclid (Google Click Identifier) – і стратегіям Smart Bidding (Target CPA, Target ROAS, Maximize Conversions) нічого зчитувати. Код може бути ідеальним, а даних не буде.

Друга перевірка – вже з боку розробника: чи зберігається gclid до моменту конверсії. У SPA (React, Vue, Angular із client-side routing) роутер може замінити URL без параметрів. Рішення – зберегти значення в sessionStorage під час першого завантаження:

const gclid = new URLSearchParams(window.location.search).get('gclid');

if (gclid) sessionStorage.setItem('gclid', gclid);

Далі GTM або тег конверсії зчитує gclid із sessionStorage, а не з URL.

Consent Mode v2: блок згоди має стояти до тегу Google

З березня 2024 року Google вимагає від рекламодавців, які працюють з аудиторією ЄС/ЄЕЗ і Великої Британії, передавати сигнали згоди у форматі Consent Mode v2. Без них Google Ads не використовує дані таких користувачів для ремаркетингу, а Smart Bidding втрачає моделювання конверсій. Для суто українського сайту вимоги немає – але як тільки з'являються трафік або продажі в ЄС, це стає обов'язковим.

У v2 до ad_storage і analytics_storage додалися ad_user_data і ad_personalization. Усі чотири мають бути визначені до завантаження тегу Google або GTM (офіційний огляд Consent Mode). Завдання розробника – виставити стан за замовчуванням першим скриптом у <head>:

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'analytics_storage': 'denied',
    'wait_for_update': 500 // мс: дати CMP час підвантажити збережений вибір
  });
</script>

<!-- тільки після цього — gtag.js або GTM-контейнер -->

Після вибору в банері CMP (consent management platform – Cookiebot, Usercentrics, OneTrust) викликає gtag('consent', 'update', {...}) з тими самими чотирма ключами.

Три місця, де найчастіше виникають помилки:

  • У GTM блок consent default ставиться в код сайту або підключається через шаблон CMP із тригером «Consent Initialization – All Pages» – він спрацьовує раніше за «All Pages». Зі звичайним тригером тег Google може відпрацювати до того, як стан згоди визначено.
  • Advanced, не Basic. В Advanced-режимі тег Google завантажується завжди, а за «denied» надсилає лише знеособлені cookieless-пінги (запити без cookie) – на них Google моделює втрачені конверсії. У Basic теги Google не завантажуються до згоди, і моделювання немає.
  • Enhanced Conversions залежать від ad_user_data. Якщо CMP оновлює лише ad_storage, хешовані email і телефон не надсилаються.

З 15 червня 2026 року ціна помилки зросла: для ресурсів GA4, зв'язаних із Google Ads, параметр ad_storage у Consent Mode став єдиним контролем над рекламними даними – налаштування Google Signals в Analytics на них більше не впливає. Перевірка – вкладка Consent у режимі попереднього перегляду GTM.

Тег Google (gtag.js): найпростіший варіант

Два блоки у <head> – одразу після consent default і до інших скриптів:

<script async src="https://www.googletagmanager.com/gtag/js?id=AW-XXXXXXXXX"></script>

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'AW-XXXXXXXXX');
</script>

AW-XXXXXXXXX маркетолог бере з кабінету: Інструменти (значок гайкового ключа) → Менеджер даних → Тег Google → Керувати.

Другий блок – синхронний і навмисно стоїть одразу після першого: не додавайте йому атрибут defer і не переміщуйте в кінець <body>, тег має зафіксувати gclid до будь-якої навігації.

Той самий тег формує аудиторії ремаркетингу для пошукових, медійних кампаній і Performance Max. Конверсія реєструється в Google Ads у момент цільової дії – покупки або надсилання форми:

gtag('event', 'conversion', {
  'send_to': 'AW-XXXXXXXXX/YYYYYYYYYYYY', // ID + мітка конверсії
  'value': 1490,
  'currency': 'UAH',
  'transaction_id': 'ORDER-2847' // унікальний ID проти дублювання
});

Підходить для лендингів і статичних сайтів. Якщо платформ кілька – GTM.

Google Tag Manager: контейнер, Conversion Linker і dataLayer

Менеджер тегів Google (GTM) – найпоширеніший спосіб інтеграції Google Ads із сайтом: контейнер для тегів всіх платформ (Google Ads, Google Analytics 4, Meta Pixel, TikTok Pixel). Розробник ставить його один раз, далі маркетолог керує тегами з інтерфейсу.

Два фрагменти – у <head> після consent default і одразу після відкривного <body>:

<!-- <head> -->
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXX');
</script>

<!-- одразу після <body> -->
<noscript>
  <iframe
    src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX"
    height="0"
    width="0"
    style="display:none;visibility:hidden">
  </iframe>
</noscript>

Conversion Linker (тег зв'язування конверсій) – перший тег, який має бути в контейнері. Він зберігає gclid у cookie і передає його між сторінками; без нього ланцюжок «клік → цільова сторінка → оформлення» втрачає ідентифікатор. Якщо маркетолог каже «конверсії не відстежуються» – спершу перевірте саме це.

dataLayer – зона відповідальності розробника: масив, у який сайт передає події, а GTM їх зчитує. Виклик додається на сторінці підтвердження або після успішного POST:

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

window.dataLayer.push({
  event: 'purchase', // GTM слухатиме саме цю назву
  ecommerce: {
    transaction_id: 'ORDER-2847', // ОБОВ'ЯЗКОВО: унікальний ID
    value: 1490,
    currency: 'UAH',
    items: [
      {
        item_id: 'SKU-001',
        item_name: 'Назва товару',
        price: 1490,
        quantity: 1
      }
    ]
  }
});

Три деталі, без яких відстеження не працює:

  • transaction_id не опціональний. Без нього, якщо є і тег Google Ads, і імпорт із GA4, одна покупка зарахується двічі – і Smart Bidding вчитиметься на завищених даних.
  • Назва події чутлива до регістру. purchasePurchase. Узгодьте з маркетологом до реалізації.
  • window.dataLayer = window.dataLayer || [] – завжди перед .push(). Інакше виклик до завантаження GTM дасть TypeError. З ініціалізацією події накопичуються в масиві, і GTM зчитає їх після старту.

Після цього маркетолог створює в GTM змінні (ecommerce.value, ecommerce.transaction_id, ecommerce.currency), тригер Custom Event purchase і тег конверсії Google Ads.

Серверний GTM (sGTM, server-side tagging): коли клієнтського контейнера недостатньо

Усе описане вище працює в браузері, і кожен крок можна перервати: блокувальник не завантажить GTM-контейнер, Safari (Intelligent Tracking Prevention, ITP) обріже cookie, встановлену через JavaScript, до 7 днів, корпоративний DNS-фільтр відкине запит до googleadservices.com. Частина реальних конверсій так і не потрапляє у звіти Google Ads.

Серверний GTM переносить логіку на власну інфраструктуру:

Браузер (веб-контейнер)
→ https://gtm.example.com (серверний контейнер)
→ Google Ads / GA4 / Meta CAPI

Браузер надсилає подію на піддомен сайту – для блокувальників і ITP це first-party запит. Cookie _gcl_aw і FPID надходять через Set-Cookie як HttpOnly, і 7-денне обмеження на них не поширюється.

dataLayer і веб-контейнер залишаються – веб-контейнер просто пересилає подію на сервер замість Google.

Що робить розробник:

  1. Розгортає серверний контейнер – Cloud Run через майстер у GTM («Automatically provision tagging server»; для продакшену Google радить мінімум 2 інстанси, щоб не втрачати дані в разі збою сервера; кожен – близько $45 на місяць, тобто від ~$90) або офіційний Docker-образ gcr.io/cloud-tagging-10302018/gtm-cloud-image на своєму сервері.

  2. Піддомен і TLSgtm.example.com A-записом на домені сайту. CNAME на сторонній домен не підходить: Safari трактує CNAME-cloaking як third-party і знову обрізає cookie.

  3. Перенаправляє веб-контейнер – у тегу конфігурації Google вказує:

    server_container_url: 'https://gtm.example.com'
    
  4. Завантажує gtm.js з власного домену – вмикає клієнт «Google Tag Manager: Web Container» і замінює www.googletagmanager.com у сніпеті на свій піддомен. Без цього sGTM захищає дані, але не завантаження самого GTM.

Решту маркетолог робить у серверному контейнері: клієнт GA4, тег Google Ads Conversion Tracking і серверний Conversion Linker.

Перевірка – власний режим попереднього перегляду серверного контейнера.

sGTM виправданий для e-commerce зі значною часткою iOS, для сайтів з аудиторією в ЄС і всюди, де розходження між замовленнями в CRM і конверсіями в Google Ads стає помітним (на практиці орієнтир – від 20–30%). Для лендингу з формою – надлишково.

Enhanced Conversions (розширене відстеження конверсій): хешовані дані з форм

Механізм дозволяє атрибутувати конверсію навіть без cookie: після надсилання форми email і телефон хешуються SHA-256 у браузері, Google звіряє хеш з акаунтами авторизованих користувачів.

Реалізовувати SHA-256 не потрібно – це робить GTM через змінну «Дані, надані користувачами». Розробник надає CSS-селектор поля (input[type="email"]) або передає дані в dataLayer:

window.dataLayer.push({
  event: 'purchase',
  user_data: {
    email: document.querySelector('input[type="email"]').value,
    phone_number: document.querySelector('input[type="tel"]').value
  },
  ecommerce: {
    /* ... */
  }
});

Оригінальні дані нікуди не зберігаються. Chrome зберіг сторонні cookie (Google відмовився від їх видалення у квітні 2025 року, а в жовтні 2025 року закрив Privacy Sandbox), але Safari і Firefox блокують їх за замовчуванням, а користувачі з ЄС відхиляють у банерах згоди – тому Enhanced Conversions лишаються гарантією атрибуції.

Пам'ятайте: за ad_user_data: 'denied' дані не надсилаються.

Імпорт із GA4 і Google Ads API

Якщо GA4 вже підключено, маркетолог може зв'язати акаунти й імпортувати ключові події як конверсії Google Ads без нових тегів.

Розробнику важливо одне: якщо за одним dataLayer.push({ event: 'purchase' }) спрацьовує і GA4, і тег Google Ads у GTM – покупка зарахується двічі.

Правило: одне джерело на подію; додатково передавайте transaction_id – за ним Google Ads відкине дублікат.

Для інтеграції з CRM, ERP і аналітичними панелями є Google Ads API: звіти, керування кампаніями; завантаження офлайн-конверсій (угода закрита в CRM через тиждень після кліку) з 15 червня 2026 року перенесено в окремий Data Manager API.

Потрібен керуючий обліковий запис (MCC) і маркер розробника – самостійне отримання передбачає підтвердження бюджету і перевірку Google, на що йде кілька тижнів.

Якщо клієнту потрібне готове MCC-підключення з верифікованою інфраструктурою, розгляньте агентські рекламні акаунти Google Tech4You: кабінети підключені до верифікованого MCC, мають вищий рівень довіри платформи і резервну інфраструктуру.

Порівняння способів інтеграції

Спосіб Хто впроваджує Де ставиться код Коли підходить
Тег Google (gtag.js) Розробник <head> кожної сторінки Лендинг, одна платформа
GTM + dataLayer Розробник (один раз) <head> + <body> + логіка сайту Кілька платформ, e-commerce
Серверний GTM Розробник + DevOps Власний піддомен, Cloud Run / Docker iOS-трафік, ЄС, розходження CRM vs Ads
GA4 + імпорт Маркетолог Без коду GA4 вже є, швидкий старт
Google Ads API Розробник Серверна інтеграція CRM-інтеграція, офлайн-конверсії

Consent Mode v2 і Enhanced Conversions – не окремі способи, а шар поверх будь-якого з них.

Як перевірити відстеження конверсій Google Ads

Попередній перегляд GTM: «Попередній перегляд» → URL сайту → виконати цільову дію → переконатися, що подія purchase у списку, тег Google Ads має статус Fired, параметри ecommerce.* передані, на вкладці Consent очікуваний стан.

Якщо Not Fired – назва події не збігається, push() раніше за ініціалізацію GTM, або тег заблоковано згодою.

Статуси дій-конверсій у кабінеті Google Ads:

  • «Не перевірено» – нормальний стан для нового тегу до першої конверсії або тестової події.
  • «Неактивний» – конверсії не надходять, необхідно перевірити налаштування тегу.
  • «Активний» – дані успішно реєструються системою.

Примітка щодо затримки даних: Перші конверсії у звітах Google Ads з'являються приблизно через 3 години (при атрибуції за останнім кліком). Для моделі атрибуції на основі даних (Data-driven) затримка може становити до 15 годин.

Чек-лист:

  • gclid зберігається до моменту конверсії (для SPA – резерв у sessionStorage)
  • consent default – перший скрипт у <head>; CMP оновлює всі чотири параметри
  • GTM-контейнер у <head> і <body>, перед іншими скриптами
  • window.dataLayer = window.dataLayer || [] ініціалізовано глобально
  • dataLayer.push({ event: 'purchase' }) після підтвердження замовлення, з унікальним transaction_id
  • Назва події збігається з тригером GTM
  • Conversion Linker є в контейнері (для sGTM – і в серверному)
  • Попередній перегляд пройдено: тег Fired, параметри передані, згода коректна

Решта – теги, атрибуція, кампанії – зона відповідальності маркетолога. Завдання розробника в інтеграції Google Ads із сайтом одне: щоб дані надходили коректно і вчасно.

Tech4You


2026-09-16

Зворотний зв'язок
Вхід