Обычные теги работают напрямую из браузера пользователя, что создает несколько проблем: блокировщики рекламы блокируют запросы, данные теряются.
Server Side GTM решает эти проблемы: события отправляются через собственный сервер, обходя блокировщики, повышая точность данных и соответствие требованиям GDPR.
Решил, что пора переходить на Server Side сторону силы.
Настройка Server Side GTM
Google Analytics
Создайте Google Analytics для сайта. Отдельное properties, web. Как обычно. Потом перейдите в меню Администратор → Data Streams. Откройте настройки сайта и скопируйте Measurement Id (вида G-5CAAAANNNN). Сохраните его себе, он нам еще пригодится.

Серверный контейнер
Перейдите в Google Tag Manager. Создайте серверный контейнер. При создании вам предложат Automatically provision tagging server — выберите этот пункт. Будет создан сервер в Google Cloud Run. Бесплатно до 2 млн событий в месяц. Через этот сервер будут проходить все события.

Привязка домена
Если нужно, привяжите собственный домен к Cloud Run: Domain mappings → Add mapping → в Base domain указать основной домен (не поддомен), верифицировать через Google Search Console. Затем добавить CNAME запись на ghs.googlehosted.com в редакторе DNS.

Тег GA4 на сервере
В серверном контейнере есть Client — он создается по умолчанию. А еще нужно создать тег Google Analytics: GA4 и прописать в его свойствах Measurement ID, который мы сохранили из Google Analytics. По умолчанию этот тег срабатывает при событии All Pages и отправляет данные в Google Analytics. Но потом мы добавим сюда еще событий.

Веб контейнер
Дальше создаем веб контейнер. Копируем и вставляем код для отслеживания на сайт по инструкции. Проверяем, что все работает.

Переменная с URL сервера
В веб контейнере создадим настройку для связи с нашим сервером. Переходим в Переменные и создаем User-Defined Variables. Тип Google Tag: Configuration Settings, параметр: server_container_url, значение: https://sst.site.com (URL сервера).

Google Tag
Затем в веб контейнере создаем Google Tag. Он будет связывать сайт с сервером. В Tag ID прописываем тот самый Measurement Id из Google Analytics. В Configuration settings выбираем {{Google Tag Configuration Settings}} — переменную, в которой хранится URL нашего сервера. Прописываем все события на которые тег должен тригериться.

Расширение для проверки фронта
База готова. Чтобы проверить работу тега, установите официальное расширение Tag Assistant из Google Chrome. Перейдите на сайт и откройте его. Если все сделали правильно, то запросы будут идти не на стандартный URL, а на ваш сервер. Это важно!

Превью сервера
И еще нужно проверить работу сервера. Зайдите в серверный контейнер и нажмите превью. Потом вызовите любое событие на сайте. В превью вы должны увидеть, что он видит запросы с сайта.

С сайта события нужно передавать через DataLayer. Все данные о событии собираются в один объект и отправляются в DataLayer. Как именно это делать — зависит от движка сайта.
Тег для Meta
Чтобы передавать события в Meta, нужно на сервере создать новый тег через кнопку «Discover more tag types in the Community Template Gallery» и выбрать там, например, GDPR Ready Meta/Facebook CAPI by Sirdata. Ввести API token, ID пикселя и повесить вызов тега на все события.

Согласие
Запрос на сервер Meta может не уходить, если у вас нет баннера с активным согласием пользователя на сбор данных о куках. Эту опцию можно отключить в настройке Experimental: send CAPI data (and pixel from server when adblocker is detected) without consent using a cookieless ID instead of cookies.

Разрешенные домены
В настройках Datasets нужно разрешить принимать данные от своего домена.

Test ID
Вы можете скопировать Test ID в настройки тега, и тогда будете видеть события в лайв режиме со всеми параметрами. Не забудьте удалить его после настройки, иначе события не будут засчитываться.

Успешный запрос
Если запрос ушел, то в логах будет URL Meta в Outgoing HTTP Requests from Server. А если на него кликнуть, то можно посмотреть и параметры, которые отправляются в Meta. В Meta в Overview параметры могут появляться с задержкой до 30 минут.

Тег для TikTok
Чтобы передавать события в TikTok, нужно на сервере создать новый тег через кнопку «Discover more tag types in the Community Template Gallery» и выбрать там, например, TikTok Events API (Official). Ввести Pixel ID, Access Token. Event Name сделать переменной {{Event Name}}.

Test ID
Вы можете скопировать Test ID в настройки тега, и тогда будете видеть события в лайв режиме со всеми параметрами. Не забудьте удалить его после настройки, иначе события не будут засчитываться.

