Миграция Server-Side GTM: этапы, хостинг и честный эффект
Переезд на server-side GTM обещает быстрые страницы, меньше заблокированных тегов и чистые данные. Часть этого правда, часть - маркетинг. Гайд разбирает полную миграцию на server-side GTM: как меняется архитектура, как подготовиться и выполнить перенос по шагам, где хостить контейнер, как не получить двойной счёт конверсий и какой выигрыш реально возможен.
Что такое server-side GTM и как устроена миграция?
Google формулирует это прямо:
Server-side tagging in Google Tag Manager allows you to measure user activity across devices and platforms by processing data on a server you control, rather than in the user's browser.
В клиентской схеме каждый вендор грузит в браузер свой JavaScript: Meta Pixel, TikTok Pixel, gtag.js для GA4. После миграции браузер общается с одной точкой - обычно поддоменом вида gtm.yourdomain.com. Серверный контейнер принимает запросы через встроенные клиенты (по умолчанию GA4), преобразует их и отправляет дальше серверными тегами: Meta Conversions API, TikTok Events API, GA4.
Если у вас уже гибридная схема пиксель плюс API, концепция покажется знакомой. Сравнение двух архитектур - в статье server-side tracking vs browser pixel.
Зачем вообще уносить теги из браузера?
Четыре конкретных повода:
- Живучесть кук. Safari ITP удаляет куки, записанные скриптом, после семи дней без взаимодействия с сайтом:
ITP has aligned the remaining script-writable storage forms with the existing client-side cookie restriction, deleting all of a website's script-writable storage after seven days of Safari use without user interaction on the site.
Сервер ставит куки через HTTP-заголовок Set-Cookie, и лимит обходит. Simo Ahava описывает это как конвертацию JS-кук в HTTP-куки с нужным вам сроком жизни, в идеале с флагом HttpOnly.
-
Контроль данных. Прежде чем событие уйдёт в Meta или TikTok, можно отфильтровать персональные данные, захешировать идентификаторы или обогатить событие бэкенд-значениями, которых браузер не видел.
-
Меньше скриптов на странице. Пиксели вендоров перестают тащить собственные JS-файлы; их заменяет одна точка приёма.
-
Скрытые креды. Токены доступа к Conversions API живут на сервере, а не в исходнике страницы.
Для арбитража и платного трафика важнее всего пункты 1 и 2: они напрямую влияют на match quality и надёжность конверсий. Как платформы оценивают сигнал - в разборе Facebook Event Match Quality score.
Чего server-side GTM НЕ чинит?
Здесь честные ожидания важнее всего.
Скорость сайта: в основном миф. Контейнер gtm.js всё ещё загружается в браузере. Вы убираете часть сторонних скриптов, это помогает немного, но начинать миграцию ради Lighthouse не стоит. Практики после переезда отмечают незначительную разницу в скорости; устойчивый выигрыш лежит в другом.
Ad blockers: частично, не автоматически. Первый-party поддомен сам по себе не спасает:
I've gone on record over and over again to say how this is poor justification for using server-side GTM.
Блокировщики режут известные паттерны запросов (gtm.js?id=, /g/collect) независимо от хостнейма. Загрузку контейнера возвращает custom loader или same-origin схема, но это отдельный слой, который надо развернуть сознательно. Stape описывает свой Custom Loader именно так:
The Custom Loader power-up minimizes the impact of ad blockers on your GTM and GA4 scripts by routing them through a path that turns all cookies into first-party cookies.
При этом функции приватности браузеров вроде Safari ITP ограничивают то, что может хранить браузерная сторона; custom loader на это не влияет. Планируйте миграцию ради живучести кук и контроля данных, а стойкость к блокировщикам считайте бонусом, требующим донастройки.
Как подготовиться до миграции?
Самое частое сожаление практиков: перетащить бардак из клиента на сервер как есть. Сделайте сначала это:
- Инвентаризируйте все теги веб-контейнера, удалите те, чьи данные никто не читает.
- Проверьте, что dataLayer шлёт консистентные имена событий и параметры.
- Почините двойное срабатывание в источнике, пока оно не скопировалось на сервер.
- Решите, какие события остаются только в клиенте, а какие пойдут через сервер.
- Убедитесь, что трекер или бэкенд отдаёт ID заказов - без них не работает дедупликация.
Если воронка идёт через Keitaro или другой трекер, сразу спланируйте, как уживутся постбеки и серверные события. Разводка описана в Keitaro Facebook CAPI integration.
Как проходит миграция по шагам?
- Создайте серверный контейнер в GTM Admin и зафиксируйте его дефолтный URL.
- Разверните за своим поддоменом (
gtm.yourdomain.com). Google настоятельно рекомендует первый-party домен в проде: иначе куки становятся third-party и браузеры их режут. - Выберите хостинг (следующий раздел) и впишите deployment URL обратно в GTM.
- Направьте клиентские теги на серверный контейнер. Для GA4 укажите transport URL своего поддомена; остальные вендоры идут тем же путём через GA4 client или кастомные клиенты.
- Пересоберите теги на сервере. Начните с GA4, затем Meta Conversions API и TikTok Events API. Держите payload компактным и передавайте event_id из браузера.
- Погоняйте оба пути параллельно одну-две недели, сверяя количество событий старого и нового маршрута в тестовых инструментах платформ (Meta Test Events tool).
- Переключитесь и приберите: отключите лишние клиентские теги, ещё неделю следите за цифрами.
Во время параллельного прогона следите за атрибуцией. Оба маршрута одновременно раздуют счётчики, если дедупликация ещё не включена - а это то самое место, где валится большинство миграций.
Как дедуплицировать события между веб- и серверным контейнерами?
Правило в справке Meta звучит так:
a Meta Pixel's eventID must match the Conversion API's event_id. In corresponding events, a Meta Pixel's event must match the Conversion API's event_name.
Практическая схема:
dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: 'order-84512'
}
})Тот же transaction_id уходит в серверный payload как event_id. ID генерируется один раз, в браузере, и переиспользуется везде. Двойная генерация (классическая ошибка tag sequencing) даёт два разных ID, и Meta засчитает оба события.
Дедупликация нужна любой гибридной схеме: Meta CAPI, TikTok Events API и похожие API других платформ опираются на общий идентификатор. Механика по платформам разобрана в Facebook Pixel & CAPI event deduplication и в глоссарии Event ID.
Где хостить server-side GTM?
Managed-хостинг: Stape
Для медиабайеров без выделенного инженера рекомендуем Stape (ссылка партнёрская). Старт занимает минуты, а не вечер: создали контейнер, направили CNAME-запись, SSL включён. Цены начинаются с $20/мес за хостинг с логами, есть freemium-тариф для тестов.
Try our freemium plan for sGTM or start with $20/month for hosting, including logs.
Две практические заметки из документации Stape. Биллинг считает входящие запросы: туда попадают загрузки скриптов и трафик ботов, не только живые события, поэтому сверяйте квоту тарифа с реальным трафиком. Дальше подключайте Custom Loader с первого дня: он переводит загрузку gtm.js и gtag.js на ваш домен и снижает блокировку стартового скрипта.
Self-hosting на Google Cloud Run
Google публикует ориентиры для DIY-пути:
In this Cloud Run configuration, each server costs approximately $45 /month (USD). ... We recommend running a minimum of 2 instances to reduce the risk of data loss in case of a server outage.
Итого около $90/мес до расходов на логирование плюс ваше время на провижининг, SSL, мониторинг и обновления. Self-hosting оправдан, когда есть инженерная ёмкость и хочется полного контроля над инфраструктурой. Как точка входа с целью «улучшить трекинг на этой неделе» - плохой вариант.
Другие платформы
Addingwell и TAGGRS предлагают сопоставимый managed-хостинг sGTM с фокусом на ЕС. Если трафик в основном европейский и главное - GDPR-позиционирование, оцените их рядом со Stape. RudderStack тоже всплывает в таких обсуждениях, но решает другую задачу: это customer data platform, тяжеловес для задачи миграции управления тегами.
Сколько стоит server-side GTM?
Статьи расходов:
| Статья | Managed (Stape и аналоги) | Cloud Run (self-hosted) |
|---|---|---|
| База хостинга | От $20/мес | Около $45/мес за инстанс |
| Минимальная отказоустойчивая схема | Покрывается одним тарифом | Два инстанса, около $90/мес |
| Логирование | Зависит от тарифа | Платно свыше 1 млн запросов/мес |
| Усилия на запуск | Минуты | Часы-дни |
| Обслуживание | Провайдер | Вы |
Следите за ловушкой биллинга по запросам на managed-тарифах: хиты краулеров и загрузки скриптов съедают квоту. Настройте алерты, чтобы auto-upgrade не молча не поднял вас на следующий тариф.
Какие ошибки губят большинство миграций?
- Нет общего event_id - конверсии считаются дважды, оптимизация тихо портится неделями. Диагностика - колонка Deduplication в Events Manager у Meta.
- Мусор на входе - мусор на выходе: дублирующиеся триггеры и рваный dataLayer воспроизводятся на сервере один в один.
- Погоня за призрачной скоростью - решение принимайте по качеству данных и живучести сигнала, не по Lighthouse.
- Дефолтные пути загрузки скриптов - блокировщики убьют
gtm.jsдо того, как сервер увидит хоть один запрос. - Резкое переключение - всегда перекрывайте старый и новый маршруты и сверяйте цифры до отключения старого пути.
Стоит ли медиабайеру переходить на server-side GTM?
Для команд, закупающих Facebook или TikTok через трекеры вроде Keitaro, решение обычно сводится к надёжности сигнала: конверсии, переживающие ограничения iOS, более чистый match quality, стабильная разводка постбеков в API. Эти выгоды накапливаются в каждой кампании. Если это ваш затык, планируйте миграцию в этом квартале и стартуйте с Stape, минуя кривую обучения инфраструктуре.
Остальной конвейер тоже держите в автоматизации: пока объёмы малы, активируйте и прогревайте пиксели вручную через Pixel Activator, а при масштабировании передайте разводку конверсий из трекера во все рекламные кабинеты MOST.
Frequently asked questions
Sources
Sources
- Google: An introduction to server-side tagging
- Set up server-side tagging with Cloud Run - Google
- Google: Server-side tagging custom domain
- WebKit: Full Third-Party Cookie Blocking and More
- Meta: Handling Duplicate Pixel and Conversions API Events
- Stape: Custom Loader power-up
- Plan tiers and limits - Stape
