2

Я использую Диспетчер тегов Google уже несколько недель. Недавно у меня был специальный запрос, и я не нашел ответа. Возможно ли, что несколько контейнеров имеют один и тот же файл данных? В Js-коде из двух контейнеров я попытался указать такое же имя для datalayer: результат довольно удивителен ... Все теги в каждом контейнере выполняются дважды.GTM - Один файл для нескольких контейнеров

В частности, я пытаюсь отправить событие в двух тегах, которые находятся в двух разных контейнерах. Я бы хотел избежать максимального бесчисленного числа звонков на мой onclick (отсюда идея наличия единого слоя данных)

ответ

0

Это может быть очевидно (и я его не тестировал), но вы пытались сделать копию вашего DataLayer? Если вы просто добавите под своей переменной datalayer задание

dataLayer2 = dataLayer 

и сконфигурировать второй контейнер для пользовательских данныхLayer2? Это, несомненно, будет PITA с динамически выдвинутыми переменными, но все, что отображается при загрузке страницы, должно работать.

+0

метод push в dataLayer перезаписывается после того, как GTM загружает async, поэтому будущие нажатия срабатывают немедленно, а не циклируют массив снова и снова, поэтому ваше предложение может не работать. –

3

Можно использовать один и тот же файл данных для нескольких контейнеров. Также можно включить второй контейнер через первый (как тег).

Но правило «Все страницы» будет срабатывать один раз для каждого контейнера, содержащегося на странице. Поэтому, если у вас есть 3 контейнера, каждый тег, запущенный на «Все страницы», будет запущен 3 раза. (То же самое верно для других событий, таких как «gtm.js» ...)

Мы нашли простое решение этой проблемы. Просто включать «page_loaded» событие на каждой странице и изменить «Все страницы» правила соответственно:

<script> 
var dataLayer = []; 
</script> 
<!-- Google Tag Manager --> 
<!-- End Google Tag Manager --> 
<script> 
dataLayer.push({"event": "page_loaded"}); 
</script> 

page_loaded событие будет активироваться только один раз, независимо от количества контейнеров, используемых на этой странице.

0

Одним из способов, который, кажется, работает для нас до сих пор, является переименование переменной datalayer второго контейнера, например, Eike. GTM позволяет изменить имя переменной, когда она инициализирует, как описано здесь: https://developers.google.com/tag-manager/devguide#renaming

Для отслеживания событий на обоих контейнерах вам придется вручную толкать друг:

var data = {some:'data'}; 

dataLayer.push(data); 
otherDataLayer.push(data); 

Вы можете иметь различные триггеры каждый из контейнеров для выборочных событий отслеживания огня для GA или других.

Смежные вопросы