Утилитные переменные в GTM: возвращаем функции, а не значения
Пользовательская переменная JavaScript в Google Tag Manager — это анонимная функция с return. По умолчанию она не принимает параметров, но это легко обойти, если заставить её возвращать другую функцию. Тогда внешний код вызывает внешнюю функцию без аргументов, получает «фабрику» и уже ей передаёт всё, что нужно: ID счётчика, название события, путь к dataLayer. Результат — переиспользуемая утилита вместо десятка копипастных переменных.
Чек-лист внедрения:
— Определитесь, какие параметры повторяются чаще всего: ID серверного контейнера GA4, имя GTM-контейнера, префиксы событий, значения по умолчанию.
— Создайте пользовательскую переменную Custom JavaScript, внутри которой напишите `function() { return function(param) { ... }; }`. Внешняя функция возвращает внутреннюю — внутренняя уже умеет принимать аргументы.
— В местах вызова пишите `{{Utility}}(value)` — так тег получит конкретное значение, а утилита останется общей для всего контейнера.
— Храните утилиту в одном месте. Если меняется логика (например, формат event label) — правите одну переменную, а не пятнадцать тегов.
— Для server-side контейнера это особенно полезно: переносите валидацию client_id (идентификатор пользователя в GA4), нормализацию UTM-меток и сбор расширенных параметров кампании в одну точку.
— Именуйте переменные по принципу «что делает» — `NormalizeCampaign`, `BuildGA4Event`, `ValidateClientId`. Через полгода вы скажете себе спасибо.
— Документируйте вход и выход: какие параметры принимает, что возвращает, какие делает допущения. Без этого утилита превращается в чёрный ящик.
Когда пригодится: при миграции на server-side, когда одинаковая логика нужна в десятках тегов, и при работе в команде, где каждый разработчик должен понимать поведение переменной без чтения исходников.
— @ServerSideTrackingRuPro
Server-side tracking
@ServerSideTrackingRuPro
Утилитные переменные в GTM: возвращаем функции, а не значения
Этот пост опубликован в Telegram-канале Server-side tracking. Подписаться можно по ссылке: @ServerSideTrackingRuPro.