Server-side tracking — архитектура, в которой сервер под вашим контролем принимает, проверяет и передаёт measurement events вместо того, чтобы браузер посетителя напрямую отправлял каждый запрос в рекламные и аналитические системы. Для affiliate- или media-buying команды полезная реализация — не просто «поставить server GTM». Нужен сквозной маршрут, где один click ID сохраняется от рекламы до трекера и оффера, а каждая конверсия, payout и смена статуса возвращаются к этому ID.
Сервер может ответить 200 OK, хотя click ID потерян, purchase посчитан дважды или revenue попал не в ту кампанию. Внедрение завершено только тогда, когда контролируемый тест доказывает работу всего пути.
Server-side tracking, server-side tagging и S2S postback
Термины связаны, но не взаимозаменяемы.
| Термин | Что означает | Типичный input | Типичный output |
|---|---|---|---|
| Server-side tracking | Общая архитектура обработки measurement data на серверном слое. | События браузера, PWA, CRM, трекера или backend | Аналитика, рекламные платформы, отчёты и внутреннее хранилище |
| Server-side tagging | Реализация через tag manager, например GTM server container. | Запросы, распознанные client контейнера | Нормализованные события, переданные нужными tags |
| S2S postback | Callback между серверами о конверсии. | Click ID, status, payout, transaction ID | Одна атрибутированная конверсия или смена статуса |
В официальном описании Google server container принимает запросы, превращает их в events и обрабатывает через tags, triggers и variables. Google отдельно объясняет, что server-side tagging дополняет browser collection, а не магически заменяет его. Постбек affiliate-сети уже по смыслу: обычно он сообщает о конверсии после того, как клик покинул трекер. Для базы начните с гайда что такое S2S postback.
Production-маршрут данных
клик по рекламе
→ first-party route / tracker click
→ landing или PWA session
→ offer/advertiser с сохранённым click ID
→ postback / backend conversion
→ normalized event в отчёты и рекламные платформы
Для каждой стрелки запишите имя параметра и тестовое значение. «Мы передаём ID» — не спецификация. Это спецификация:
Meta URL parameter: dc_campaign={{campaign.id}}
Tracker click ID: dc_click_id=dc_01K4N8...
Network storage: aff_sub=dc_01K4N8...
Network callback: click_id={aff_sub}
Canonical event ID: deposit:partner-transaction-9472
Ключ слева принадлежит receiver, макрос справа — sender. Поэтому click_id={aff_sub} может быть правильным. Подробная схема есть в гайде про click ID, sub ID и postback macros.
1. Source context не должен становиться идентичностью клика
Campaign ID, ad set ID, ad ID, placement и creative — dimensions. Они описывают группу визитов, но не один визит. Храните их отдельно, а трекер должен создать или принять стабильный click ID.
Используйте проверенные шаблоны Facebook Ads URL parameters и TikTok Ads macros. Одинаковые фигурные скобки не означают совместимость макросов разных систем.
2. Click ID должен пережить каждый redirect
Частые места потери:
- JavaScript пересобирает offer URL и выбрасывает query string;
- redirect сохраняет UTM, но удаляет уникальный token;
- PWA install/reopen создаёт новую session без исходной attribution;
- поле сети обрезает ID по длине;
- два трекера переименовывают
subidбез задокументированного mapping.
Успешная загрузка финальной страницы ничего из этого не доказывает. Проверьте реальный destination URL и сохранённую запись у receiver.
3. Нормализуйте backend event
{
"click_id": "dc_01K4N8...",
"event_name": "deposit",
"event_id": "deposit:partner-transaction-9472",
"event_time": "2026-08-18T12:04:31Z",
"transaction_id": "partner-transaction-9472",
"value": 45.00,
"currency": "USD",
"status": "approved"
}
Сначала canonical schema, потом отдельные payload для Meta, TikTok и analytics. Не разрешайте каждой интеграции по-своему понимать purchase, deposit, value или currency.
Click ID и event ID решают разные задачи
- Click ID: какому визиту отдать attribution?
- Transaction ID: какая бизнес-транзакция произошла?
- Event ID: browser- и server-копии описывают одно событие?
Один click может дать registration, first deposit и redeposit. Повторный click ID нормален. Один event ID для трёх разных событий — ошибка.
Если Pixel и server API отправляют одну конверсию, используйте одинаковые event name и стабильный event ID. Meta в Conversions API overview описывает CAPI вместе с Pixel и подчёркивает, что CAPI не обходит privacy rules. TikTok в документации deduplication требует одинаковый event_id для пересекающихся Pixel и Events API events.
Не дедуплицируйте только по timestamp: retries, queue delays и две реальные транзакции могут идти рядом. Надёжнее partner transaction ID плюс event type.
Что улучшает server-side tracking — и чего не делает
Google называет privacy control, client performance и data quality среди причин использовать server-side tagging. Для buying-stack это означает:
- validation до delivery;
- единый status/value/currency mapping;
- secrets вне browser JavaScript;
- backend events, которых нет в браузере;
- видимые retries и delivery responses;
- меньше third-party code на landing.
Но server-side tracking не создаёт consent, не делает запрещённые данные разрешёнными, не восстанавливает ID, которого никогда не захватили, и сам не доказывает рекламный uplift. Broken macros, redirects, late callbacks и duplicates могут быть важнее browser restrictions.
План внедрения
1. Inventory producers и consumers
Перечислите Pixel, PWA events, tracker, affiliate network, CRM, payment backend, Meta CAPI, TikTok Events API и analytics. Для каждого зафиксируйте event names, IDs, timestamps/currency, consent, retention, retry behaviour и владельца credentials.
2. Canonical contract
Versioned map должен содержать click_id, event_name, event_id, event_time, transaction_id, status, value, currency, source context и consent state. Отсутствующее value может означать zero, unknown или invalid — определите явно.
3. Idempotent receiver
Проверяйте authentication, mandatory keys и statuses. Храните raw request и normalized result с защитой sensitive data. Повтор той же transaction/event type не создаёт новый revenue.
4. Queue и видимые outcomes
Надёжный pattern: receive → validate → persist → enqueue → deliver. Записывайте attempt count, response class и final state. Отличайте временный rate limit от permanent schema rejection.
5. Pass/fail таблица
| Тест | Ожидаемый факт | Pass? |
|---|---|---|
| Route и fallback | Каждое правило ведёт на правильный destination. | ☐ |
| Первая конверсия | Одно событие на верном click, campaign и offer. | ☐ |
| Duplicate callback | Revenue и totals не удваиваются. | ☐ |
| Смена статуса | История lead → approved/rejected корректна. | ☐ |
| Cost correction | Cost меняется только на нужном уровне. | ☐ |
| Meta/TikTok feedback | Приняты event, value, currency и ID. | ☐ |
| Нет ID | Event quarantined/rejected, не приписан случайно. | ☐ |
| Buyer access | Только assigned data, без raw secrets. | ☐ |
| Export/rollback | Recovery path проверен. | ☐ |
Это разница между «кажется, работает» и releasable measurement system. Частные ошибки разбирает postback troubleshooting.
Какие tools нужны
- tracker/routing layer — click identity, streams, offers, postbacks;
- server tag/event gateway — validation и vendor delivery;
- CRM/backend — business truth, например deposit status;
- analytics/finance — reconciled decisions;
- queue/observability — retries и incident evidence.
Не покупайте overlapping dashboards, оставляя joins между ними без документации. Tracker vs CRM объясняет, почему tracker видит conversion, но не знает, состоялся ли settlement.
DarkCore полезен, когда проблема проходит через эти границы: Streams связывают routing, offers и postbacks; Pixels маппируют events; статусы конверсий сохраняют business state; Analytics оставляет контекст для решений. Это fit, а не универсальный рейтинг: сначала проверьте один реальный campaign path.
FAQ
Server-side tracking означает cookieless?
Нет. Сервер может получать cookies/identifiers и всё равно обязан учитывать consent, platform terms и закон. «Server-side» описывает место processing, а не разрешение.
Он заменяет Meta Pixel или TikTok Pixel?
В обычном рекомендуемом setup — нет. Meta описывает CAPI рядом с Pixel, TikTok — Pixel + Events API с deduplication. Для двух копий одного события нужен одинаковый event ID.
Postback и Conversions API — одно и то же?
Оба server-to-server, но postback обычно возвращает conversion в tracker, а platform API отправляет eligible event в рекламную систему.
Что тестировать первым?
Один click, один offer и одну conversion. Докажите, что тот же click ID дошёл до offer и вернулся в callback; затем duplicate и status update.
Когда сложность не оправдана?
Когда команда не может владеть monitoring, data contract, consent и retries. Тогда начните с узкой managed реализации или почините текущий click-to-postback flow.