Статьи об Интернет маркетинг
Google Analitics 4 Google Ads

Передача серверных конверсий в GA4 через Measurement Protocol

Передача серверных конверсий через Measurement Protocol в Google Analitics 4 + Google Ads Чек-лист настройки

👋 Приветствую, друзья! Это видео — идеальный вариант, если вы хотите грамотно настроить передачу серверных конверсий через Measurement Protocol в Google Analytics 4, а также обеспечить их корректную передачу в Google Ads.

Мы вместе пройдемся по:

  • 🔧 общей модели настройки,
  • ✅ чек-листу реализации,
  • 📜 и техническому заданию для разработчиков, которое вы сможете просто передать своей команде или интегратору.

🎯 Почему это важно?

Потому что классические браузерные методы трекинга всё чаще дают сбои. Вот лишь часть ограничений, с которыми сталкиваются современные маркетологи:

  1. Блокировка сторонних cookies (3rd-party cookies) — всё больше браузеров (Safari, Firefox, Chrome) запрещают сторонние куки, которые использовались для трекинга через пиксели.
  2. Интеллектуальные трекеры-блокировщики — встроенные защиты (например, ITP в Safari, ETP в Firefox) автоматически обрезают или занижают срок жизни cookies.
  3. AdBlock, расширения и VPN — множество пользователей активно используют инструменты, которые полностью обрубают загрузку скриптов аналитики.
  4. Ошибки с JavaScript или низкая скорость загрузки — если тег не загрузился вовремя или пользователь быстро ушёл — событие просто не фиксируется.
  5. iOS 14+ ограничения — всё, что касается трекинга без явного согласия пользователя (особенно в Meta), также может не сработать.

Measurement Protocol решает эти проблемы.

Поскольку события отправляются не через браузер, а напрямую с вашего сервера, они:

  • не блокируются браузером,
  • не зависят от состояния скриптов на странице,
  • не теряются при плохом соединении,
  • и всегда доходят до GA-4 — при условии корректной настройки.

Это делает Measurement Protocol одним из самых надежных способов передачи ключевых событий — особенно таких, как:

  • ✅ Покупка,
  • ✅ Заполнение формы,
  • ✅ Отправка заявки,
  • ✅ Подтверждение оплаты.

Поэтому поставьте этому видео лайк, подпишитесь на канал - будет интересно, полезно и практично!

И по традиции перед началом видео представлюсь - меня зовут Макс Котенко, уже более 8 лет я занимаюсь web-аналитикой, интернет рекламой и в целом digital-маркетингом.

Консультирую предпринимателей, маркетологов, ppc-специалистов и начинающих веб-аналитиков, разрабатываю индивидуальные обучающие программы, внедряю и настраиваю различные маркетинговые и аналитических инструментов - Google Ads, Meta ads, GA-4, Meta-пиксель, прототипирую лендинги и интернет магазины. Детали и запись на консультацию на моем сайте.
План видео

  1. Что такое Measurement Protocol?
  2. Принцип работы Measurement Protocol
  3. Чек-лист передачи события Покупка через Measurement Protocol
  4. Техническое задание: передача события покупки с сервера
  5. Инструмент GA4 Event Builder
  6. Альтернатива: передача через Webhook + Zapier
  7. Связь с Google Ads: как передаются конверсии
  8. Можно ли передавать события в Google Ads напрямую через Measurement Protocol?

1. Что такое Measurement Protocol?

Measurement Protocol — это способ отправлять события и пользовательские действия напрямую с вашего сервера в сервер Google Analytics 4, минуя браузер и любые внешние ограничения.

Пример:

Когда на сайте подтверждается покупка, ващ backend отправляет такой запрос:

{
  "client_id": "123456789.987654321", 
  "non_personalized_ads": false,
  "events": [
    {
      "name": "purchase",
      "params": {
        "transaction_id": "ORDER_12345",
        "affiliation": "Online Store",
        "value": 249.99,
        "currency": "USD",
        "tax": 19.99,
        "shipping": 10.00,
        "coupon": "SUMMER2025",
        "items": [
          {
            "item_id": "SKU_001",
            "item_name": "Solar Panel Kit",
            "affiliation": "Online Store",
            "coupon": "SUMMER2025",
            "currency": "USD",
            "discount": 20.00,
            "index": 1,
            "item_brand": "SunPower",
            "item_category": "Energy",
            "item_variant": "Large",
            "price": 199.99,
            "quantity": 1
          },
          {
            "item_id": "SKU_002",
            "item_name": "Battery Storage",
            "price": 50.00,
            "quantity": 1
          }
        ]
      }
    }
  ]
}
GA4 принимает это событие как будто оно пришло с фронта — и отображает его в DebugView, отчётах и может использовать для целей ретаргетинга и оптимизации.

2. Принцип работы Measurement Protocol

Пользователь совершает действие на сайте
👉 Например, оформляет заказ и нажимает кнопку «Оплатить»


Сервер обрабатывает заказ
👉 После успешной оплаты backend подтверждает заказ и получает данные: transaction_id, сумма, список товаров и т.д.


Формируется событие в формате JSON

👉 Сервер собирает все параметры события (client_id, items, value, currency, и т.д.)
в нужной структуре под GA4


Отправка события на endpoint GA4

👉 POST-запрос отправляется на:
https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_API_SECRET


Событие попадает в GA4 через Measurement Protocol
👉 Оно отображается в DebugView и попадает в стандартные отчёты GA4
(как будто его отправил GTM или gtag.js)


Событие можно использовать в Google Ads как конверсию
👉 Если настроен импорт конверсий из GA4 — событие автоматически попадёт в Google Ads
В теле запроса необходимо указать следующее:

  • client_id: уникальный идентификатор клиента. Это отличается от app_instance_id в Firebase. Используйте gtag.js('get') .
  • user_id: необязательно. Уникальный идентификатор пользователя. Может содержать только символы UTF-8. Дополнительную информацию об этом идентификаторе см. в разделе User-ID для кросс-платформенного анализа .
  • consent : необязательно. Узнайте, как настроить параметры согласия .
  • timestamp_micros : необязательно. Время эпохи Unix в микросекундах для событий и свойств пользователя в запросе. Если не указано, по умолчанию используется время запроса .
  • events : массив элементов событий. Вы можете включить несколько событий в один запрос.
  • Чтобы активность пользователя отображалась в таких отчетах, как Realtime , engagement_time_msec и session_id должны быть указаны как часть params event . Параметр engagement_time_msec должен отражать время взаимодействия с событием в миллисекундах.

Важно: нужен либо client_id (из cookie _ga), либо user_id, иначе событие не будет привязано к сессии.

3.Чек-лист передачи события Покупка через Measurement Protocol

1. 🔧 Сформировать событие и проверить его в Event Builder:

Перейти на GA4 Event Builder
Заполнить поля
:
  • measurement_id
  • api_secret
  • client_id (из _ga куки)
  • event_name = purchase
  • params:
  • transaction_id
  • value
  • currency
  • items[] (массив с товарами: item_id, item_name, price, quantity)

Отправить тест в GA через кнопку Send to GA
Проверить попадание события в Отчете "Обзор в режиме реального времени"

2. Составить и реализовать техническое задание с помощью разработчиков

3.Провеcти отладку события

  • Проверить событие в GA4 DebugView
  • Проверить наличие события в Realtime или Events Report
  • Убедиться, что параметры transaction_id, value, currency, items передаются корректно
  • Настроить дедупликацию, если используются параллельно события с веба
Отправить тест в GA через кнопку Send to GA
Проверить попадание события в Отчете "Обзор в режиме реального времени"

4. Техническое задание для разработчика: передача события "purchase"

# 🛠️ Техническое задание: Передача события «Покупка» в Google Analytics 4 (через Measurement Protocol + UTM)

## 📌 Цель

Настроить серверную отправку события **purchase** в GA4 с помощью Measurement Protocol, включая полные eCommerce-параметры и UTM-метки.

---

## 📥 Что нужно от разработчика

### ✅ 1. Сбор и подготовка данных на сервере

При подтверждении покупки собрать следующие данные:

* `client_id` (из куки `_ga`, например `GA1.1.123456789.987654321` → `123456789.987654321`)
* `transaction_id`, `value`, `currency`, `tax`, `shipping`, `coupon`
* Массив товаров `items[]` с деталями по каждому товару:

  * `item_id`, `item_name`, `item_brand`, `item_category`, `price`, `quantity`, `discount`, `coupon`, `variant`
* Значения UTM-меток (если они были в URL визита):

  * `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`

### ✅ 2. Подготовка и отправка запроса

**Endpoint:**

```
POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=XXXXXXXXXX
```

**Заголовки:**

```
Content-Type: application/json
```

**Пример тела запроса (JSON):**

```json
{
  "client_id": "123456789.987654321",
  "events": [
    {
      "name": "purchase",
      "params": {
        "transaction_id": "T_12345",
        "value": 199.00,
        "currency": "USD",
        "tax": 19.99,
        "shipping": 10.00,
        "coupon": "SUMMER2025",
        "event_id": "abc123-uuid",  // 👈 Уникальный ID для дедупликации
        "items": [
          {
            "item_id": "SKU_001",
            "item_name": "Solar Panel Kit",
            "affiliation": "Online Store",
            "coupon": "SUMMER2025",
            "currency": "USD",
            "discount": 20.00,
            "index": 1,
            "item_brand": "SunPower",
            "item_category": "Energy",
            "item_variant": "Large",
            "price": 199.99,
            "quantity": 1
          }
        ],
        "source": "facebook",
        "medium": "cpc",
        "campaign": "spring_sale",
        "term": "solar_panels",
        "content": "ad_variant_1"
      }
    }
  ]
}

✅ Как работает дедупликация в GA4:

Google использует пару параметров для идентификации события:

event_name — название события (например, "purchase")

event_id — уникальный идентификатор события (одинаковый на клиенте и на сервере)

Если в течение короткого периода времени (обычно ~1 минута) приходит два события с одинаковыми event_name и event_id, Google учтёт только первое.

🔧 Что реализовать в проекте (в формате ТЗ):
📥 На клиенте (сайт, GTM, gtag):
При генерации события (например, "purchase") создать уникальный event_id.

Можно использовать crypto.randomUUID() или uuidv4() (если есть библиотека).

Передавать event_id в GA4 событии:

gtag('event', 'purchase', {
  transaction_id: 'T12345',
  value: 199.00,
  currency: 'USD',
  event_id: 'abc123-uuid'
});
📤 На сервере (Measurement Protocol):
Отправлять тот же event_id, что и на клиенте.

Пример JSON тела запроса:

{
  "client_id": "123456789.987654321",
  "events": [
    {
      "name": "purchase",
      "params": {
        "transaction_id": "T12345",
        "value": 199.00,
        "currency": "USD",
        "event_id": "abc123-uuid"
      }
    }
  ]
}
📌 Примечание:
event_id должен быть одинаковым в клиентском и серверном вызове.

Лучше всего его генерировать на бекенде и "вкладывать" в dataLayer или HTML как hidden input, чтобы клиентская часть тоже могла его использовать.

💡 Зачем это всё?
Без event_id GA4 будет считать события с клиента и сервера отдельно, что приведёт к двойному учёту конверсий и искажению данных в отчетах и Google Ads.

## 🧭 Обработка UTM-меток

* UTM-метки нужно **сохранять при первом заходе пользователя на сайт** (через JS и localStorage/cookie).
* При оформлении заказа передавать значения этих меток на сервер.
* Включить их в `params` JSON, как показано выше.

### Важно:

UTM-метки в Measurement Protocol **не попадают в отчёты GA4 как source/medium**, если только:

1. Они не были захвачены ранее через клиентский `gtag`/GTM
2. Или не используются как **Custom Dimensions** (нужно создать в интерфейсе GA4)

---
❗ Важно:

В GA4 нельзя использовать utm_* как параметры в Measurement Protocol. Вместо этого нужно использовать:

source
medium
campaign
term
content


## 🔎 Проверка корректности:

* Протестировать JSON через [GA4 Event Builder](https://ga-dev-tools.google/ga4/event-builder/)
* Проверить событие в DebugView GA4
* Убедиться, что все параметры передаются, особенно `client_id`, `transaction_id`, `items[]`
* Настроить дедупликацию, если используется параллельный client-side трекинг

---

## 🎯 Дополнительно

* Возможна отправка `user_id` (если клиент авторизован)
* Можно добавить `timestamp_micros` для ретроспективной передачи событий


## ✅ Готово

После выполнения все события будут попадать в GA4 надёжно и независимо от браузерных ограничений. Готово к использованию в рекламных системах.

✅ Исходные данные:

https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_API_SECRET

Расшифровка параметров линка:

https://www.google-analytics.com/mp/collect - это endpoint (адрес), на который отправляется событие в GA4 через Measurement Protocol

measurement_id=G-XXXXXXXXXX - ID потока данных GA4 (находится в интерфейсе GA4, начинается на G-)

api_secret=YOUR_API_SECRET - секретный ключ, созданный в настройках потока GA4 для разрешения API-запросов

🔧 Пример запроса:

POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXX&api_secret=XXXXXXXX

Content-Type: application/json

{
  "client_id": "123456789.987654321",
  "events": [
    {
      "name": "purchase",
      "params": {
        "transaction_id": "T_12345",
        "value": 199.00,
        "currency": "USD",
        "tax": 19.99,
        "shipping": 10.00,
        "coupon": "SUMMER2025",
        "items": [
          {
            "item_id": "SKU_001",
            "item_name": "Solar Panel Kit",
            "affiliation": "Online Store",
            "coupon": "SUMMER2025",
            "currency": "USD",
            "discount": 20.00,
            "index": 1,
            "item_brand": "SunPower",
            "item_category": "Energy",
            "item_variant": "Large",
            "price": 199.99,
            "quantity": 1
          }
        ],
        "utm_source": "facebook",
        "utm_medium": "cpc",
        "utm_campaign": "spring_sale",
        "utm_term": "solar_panels",
        "utm_content": "ad_variant_1"
      }
    }
  ]
}

🔍 Откуда брать client_id:

  • Из cookies _ga, если событие происходит на сайте
  • Или генерировать user_id, если сервер знает пользователя

🧪 Проверка:

  • Использовать GA4 Event Builder
  • Проверить в DebugView Google Analytics

Как отправляются Post-запросы с сервера

🧪 Postman — это незаменимый инструмент для тестирования серверных запросов.

Он позволяет вручную отправить событие в GA4 через Measurement Protocol, посмотреть ответ от сервера и убедиться, что всё работает корректно до того, как разработчики начнут интеграцию на сайте или backend-сервисе.

На практике такие запросы чаще всего отправляют с сервера с помощью cURL в PHP, requests в Python, axios в Node.js или встроенного HttpClient в Java — и как раз Postman помогает отладить логику и структуру JSON до перехода к реальной разработке.
Запросы с сервера (включая POST для GA4, Meta, CRM и т.д.) обычно отправляют через HTTP-клиенты, встроенные в язык программирования или его библиотеки. Вот как это делают на практике:

🔧 1. Серверный код в популярных языках

🐘 PHP — через cURL (очень распространено)

$ch = curl_init('https://www.google-analytics.com/mp/collect?measurement_id=...&api_secret=...');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_exec($ch);
curl_close($ch);

🐍 Python — через requests (самый популярный способ)

import requests
response = requests.post('https://www.google-analytics.com/mp/collect?...', json=payload)

🟨 Node.js — через axios или fetch

import requests
response = requests.post('https://www.google-analytics.com/mp/collect?...', json=payload)

☕ Java — через HttpClient или OkHttp

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://www.google-analytics.com/mp/collect?..."))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
    .build();

🌐 2. Визуальные/no-code решения

  • Zapier / Make / n8n: позволяют отправлять POST-запросы с помощью drag-and-drop блоков
  • Google Apps Script (например, отправка из Google Sheets)
  • Webhook-редакторы внутри CRM или Tilda/Webflow

📌 Ключевые моменты при отправке:

  • Указывают правильный Content-Type: application/json
  • Используют POST-метод
  • Формируют тело запроса в формате JSON
  • Подключают API-ключи или секреты, если требуется авторизация

6. Связь с Google Ads

  • GA4, получая событие purchase, может отправлять конверсии в Google Ads через встроенную линковку аккаунтов
  • Настроив экспорт конверсий из GA4 в Ads, вы увидите это событие в интерфейсе Google Рекламы
Главное — событие должно быть корректно передано, с transaction_id, value и currency

7. Можно ли напрямую отправлять события в Google Ads через Measurement Protocol?

Нет, Measurement Protocol работает только с GA4. Для Google Ads требуется:
  • Использовать Google Ads Conversion Tracking API (другой протокол)
  • Или настроить экспорт событий из GA4
📌 Вывод:
  • GA4 собирает событие purchase через Measurement Protocol
  • Далее оно отправляется в Google Ads как конверсия (если настроен экспорт)
  • Альтернатива — использовать Enhanced Conversions через gtag или API

🧪 Инструмент GA4 Event Builder

Сервис GA4 Event Builder позволяет:
  • Собрать структуру события вручную
  • Проверить JSON
  • Отправить его в GA4 и отследить в DebugView
Полезен для тестов и понимания структуры события перед реализацией на проекте.

🧩 Что такое client_id?

Это уникальный идентификатор браузера/устройства пользователя, который Google Analytics использует для распознавания посетителей. В браузерной версии client_id обычно хранится в cookie _ga.

✅ Варианты получения client_id:

🔹 1. Получение из cookie _ga (для браузерных сайтов)

Самый распространённый способ.
📍 Как получить:
js
CopyEdit
function getClientIdFromGaCookie() {
const gaCookie = document.cookie.split('; ')
.find(row => row.startsWith('_ga='));
if (!gaCookie) return null;

const gaValue = gaCookie.split('=')[1];
const parts = gaValue.split('.');
if (parts.length >= 4) {
return `${parts[2]}.${parts[3]}`;
}
return null;
}
⚙️ Что сделать:
  • Разработчики вставляют этот JS в сайт
  • При отправке формы или покупки — client_id сохраняется в hidden-поле или отправляется на сервер

🔹 2. Получение через Google Tag Manager

Если используется GTM и gtag, можно создать Custom JavaScript переменную:
js
CopyEdit
function() {
return window.ga && ga.getAll
? ga.getAll()[0].get('clientId')
: null;
}

🔹 3. Получение через gtag('get') API

Если сайт работает на gtag.js, можно использовать API:
js
CopyEdit
gtag('get', 'G-XXXXXXXXXX', 'client_id', function(clientID) {
// передать на сервер
});

🔹 4. Генерация client_id на сервере (в крайнем случае)

Если невозможно получить cookie, можно сгенерировать client_id вручную:
python
CopyEdit
import uuid

def generate_client_id():
return f"{uuid.uuid4().int >> 64}.{uuid.uuid4().int >> 64}"
⚠️ Такой ID не будет привязан к сессии GA, но поможет связать действия на сервере.

🔹 5. Передача через hidden input в форме

Если на сайте есть форма оформления заказа, можно добавить:
html
CopyEdit
<input type="hidden" name="client_id" id="client_id">
<script>
document.getElementById("client_id").value = getClientIdFromGaCookie();
</script>

📌 Важно:

  • client_id всегда должен иметь формат: X.Y (например, 123456789.987654321)
  • Если пользователь залогинен — можно добавить user_id (опционально)
  • Храните client_id в сессии или базе, чтобы повторно использовать
Друзья, мы разобрали процесс настройки Api-конверсий с помощью Zaiper и серверного webhook.

Если видео было полезным - поставьте ему лайк и подпишитесь на канал. Здесь я публикую исключительно полезный практический контент, который существенно повышает ваши IT cкилы и улучшает онлайн проекты.

Если интересуют услуги по создание веб-сайтов, настройки веб аналитики, интернет рекламы и в целом диджитал-маркетингу - стратегия и оптимизация. Обращайтесь, детали и запись на консультацию на моем сайте.

Да прибудет с вами Богиня Удачи! До скорых встреч!

Услуги по настройке web-аналитики и интернет рекламы, а также индивидуальные консультации здесь:

https://mahadevmax.co.ua

Web-аналитика (GTM, GA-4)

Google Ads Facebook Ads

Комплексный digital-маркетинг

WEB-Разработка

https://mahadevmax.co.ua