Як інтегрувати 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 недостатньо і як перевірити все до запуску рекламних витрат.

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 вчитиметься на завищених даних.
- Назва події чутлива до регістру.
purchase≠Purchase. Узгодьте з маркетологом до реалізації. - 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.
Що робить розробник:
-
Розгортає серверний контейнер – Cloud Run через майстер у GTM («Automatically provision tagging server»; для продакшену Google радить мінімум 2 інстанси, щоб не втрачати дані в разі збою сервера; кожен – близько $45 на місяць, тобто від ~$90) або офіційний Docker-образ
gcr.io/cloud-tagging-10302018/gtm-cloud-imageна своєму сервері. -
Піддомен і TLS –
gtm.example.comA-записом на домені сайту. CNAME на сторонній домен не підходить: Safari трактує CNAME-cloaking як third-party і знову обрізає cookie. -
Перенаправляє веб-контейнер – у тегу конфігурації Google вказує:
server_container_url: 'https://gtm.example.com' -
Завантажує 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 із сайтом одне: щоб дані надходили коректно і вчасно.