Проблема
Нужно отследить событие авторизации пользователя через data layer push, но есть нюанс. На проекте пользователи переходят с лендинга на основной сайт и совершают множество действий, перезагружают страницу. В результате событие срабатывает многократно, хотя нужно зафиксировать только первый визит авторизованного пользователя.
Как ограничить срабатывание тега одним разом за сессию средствами GTM?
Решение
Нужно использовать Cookies (куки) или SessionStorage браузера, чтобы «запомнить» факт срабатывания тега.
Шаг 1: Создаем переменную для чтения Cookie
Сначала нам нужно дать возможноость GTM проверять, была ли уже установлена метка.
- Заходим в Variables (Переменные).
- Создаём новую User-Defined Variable.
- Тип: 1st Party Cookie (Собственный файл cookie).
- Name (Имя cookie): даём уникальное имя, например login_event_tracked. (она дальше используется в коде!)
- Называем переменную в GTM, например: Cookie - login_event_tracked.
Шаг 2: Создаем блокирующий триггер (Исключение)
Этот триггер будет запрещать тегу срабатывать, если кука уже существует
- Заходим в Triggers (Триггеры).
- Создаем новый триггер.
- Тип: Custom Event (Пользовательское событие) (или тот тип, который вы используете для основного тега, но проще сделать универсальный блокировщик).
- Тип Custom Event, имя события: .*
- Использовать регулярные (use regex matching) выражения: ставим галку, чтобы он проверялся на всех хитах.
- В условиях активации (This trigger fires on) выбираем Some Custom Events.
- Условие: Cookie - login_event_tracked equals (равно) true.
- Называем триггер: Blocker - Login Already Tracked.
Шаг 3: Создаем тег для установки Cookie
Этот тег будет создавать «метку» сразу после того, как ваше целевое событие сработает в первый раз
- Заходим в Tags.
- Создаем новый тег типа Custom HTML.
- Вставляем следующий код (он ставит куку на 30 минут, время можно менять):
<script> (function() { var d = new Date(); // 30 * 60 * 1000 = 30 минут. Можно изменить на нужное время. d.setTime(d.getTime() + (30 * 60 * 1000)); var expires = "expires="+ d.toUTCString(); // Устанавливаем куку 'login_event_tracked' со значением 'true' document.cookie = "login_event_tracked=true; " + expires + "; path=/; domain=." + location.hostname.replace(/^www\./i, ""); })(); </script>
Если нужно, чтобы метка жила только пока открыт браузер (до закрытия вкладки/браузера), уберите строки с расчетом времени и переменную expires из document.cookie.
Важно: Не добавлять к этому тегу никаких триггеров. Мы будем запускать его через "Sequencing" (последовательность).
- Называем тег: Util - Set Login Cookie.
Шаг 4: Настраиваем основной тег
Теперь объединяем всё вместе в вашем основном теге (который отправляет данные о логине).
- Открываем основной тег (который срабатывает на Data Layer Push, пример Yandex Visit with Login).
- Добавляем исключение:
- Скролим вниз до раздела Triggering
- Находим Exceptions (Исключения).
- Добавляем созданный в Шаге 2 триггер: Blocker - Login Already Tracked.
- Настраиваем последовательность (Tag Sequencing):
- Скролим до Advanced Settings (Расширенные настройки) -> Tag Sequencing.
- Ставим галочку Fire a tag after {Имя тега} fires (Запускать тег после срабатывания...).
- Выбираем тег из Шага 3: Util - Set Login Cookie.