Как работает событие `gtm.start` (диспетчер тегов Google) в многостраничных и одностраничных гибридных приложениях?

Используемые сокращения:

  • GTM = менеджер тегов Google
  • MPA = многостраничное приложение
  • SPA = одностраничное приложение (React)

Планируемая структура приложения:

  • MPA инициализирует GTM и уровень данных и отправляет событие gmt.start при каждой загрузке страницы (т. е. при навигации пользователя).
  • SPA является самостоятельной страницей в подпути основного сайта и инициализируется: GTM через <script src = { https://www.googletagmanager.com/gtm.js id=${ GOOGLE_TAG_MANAGER_ID } } async /> и слой данных, а также вручную отправка события gtm.start через dataLayer.push
  • И MPA, и SPA используют один и тот же идентификатор контейнера GTM.
  • Насколько я понимаю, при каждой загрузке страницы (будь то страница MPA или SPA) уровень данных необходимо повторно инициализировать (потому что он будет стерт при загрузке страницы)

Я не совсем понимаю, каковы последствия многократного вызова gtm.start (один раз для каждой страницы в MPA и один раз для SPA)?

Другими словами, как именно работает gtm.start? В описанной настройке каждая загрузка страницы будет воссоздавать слой данных и отправлять gtm.start (это происходит каждый раз, когда пользователь перемещается по страницам MPA + один раз в SPA при загрузке страницы). Это правильный способ сделать это или это запутает отслеживание GTM?

С другой стороны, мне ясно, что мне нужно по-разному управлять просмотрами страниц между MPA и SPA - это не мой вопрос.

«Я понял, что мне нужно по-разному управлять просмотрами страниц между MPA и SPA» — на самом деле нет, в этом нет необходимости. Просто не полагайтесь на ключ события gtm.start, вместо этого отправляйте аналогичные события на уровень данных и используйте их.

Eike Pierstorff 05.04.2023 17:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как именно работает gtm.start?

gtm.start является ключом внутри gtm.js события. gtm.jsgtm.js — это первое событие, которое передается в dataLayer, что свидетельствует об успешном отображении фрагмента контейнера GTM на странице.

gtm.start содержит отметку времени, которая представляет собой момент времени, когда ваш скрипт контейнера GTM начал загрузку. Если вы посмотрите на фрагмент контейнера, вы действительно увидите, как gtm.start нажимается. Изображение добавлено в конце

[подробнее здесь]


QQ: Насколько я понимаю, при каждой загрузке страницы (будь то страница MPA или SPA) уровень данных необходимо повторно инициализировать (потому что он будет стерт при загрузке страницы)

Фрагмент контейнера обрабатывает это автоматически, и вам не нужно где-либо повторно инициализировать dataLayer вручную. Просто убедитесь, что фрагмент контейнера добавлен на все страницы.

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


В описанной настройке каждая загрузка страницы будет воссоздавать уровень данных и отправлять gtm.start (это происходит каждый раз, когда пользователь перемещается по страницам MPA + один раз в SPA при загрузке страницы). Это правильный способ сделать это или это запутает отслеживание GTM?

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

Другие вопросы по теме