Диспетчер тегов Google не отслеживает клики по ссылкам на изображения и значки

В Google Tag Manager я настроил его на отслеживание некоторых данных по кликам на элементах, содержащих определенный класс, и запись события в Google Analytics. Кажется, он отлично работает для текстовых ссылок, но у меня возникают проблемы, если внутри ссылки есть другой тег для изображения, значка и т. д. Например, следующее будет работать нормально:

<a href = "link.html" class = "track_this" data-tracking-info = "my info">Click here</a>

Но это не сработает:

<a href = "link.html" class = "track_this"  data-tracking-info = "my info">
  <span class = "icon click-here"></span>
</a>

И что-то вроде этого будет работать, если вы нажмете на текст, но не если вы нажмете на иконку:

<a href = "link.html" class = "track_this"  data-tracking-info = "my info">
  <span class = "icon click-here"></span> Click Here
</a>

Я знаю, что мог бы добавить класс "track_this" в диапазон для значка, но в более сложных сценариях он становится ДЕЙСТВИТЕЛЬНО беспорядочным. Например, представьте себе миниатюру изображения со значком и некоторый текст под ним, заключенный в один тег a. Мне нужно было бы поместить этот класс и информацию об отслеживании в тег изображения, диапазон для значка, div для текста и т. д.

Есть лучший способ сделать это? Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
4 192
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Я мог бы сказать об этом более определенно, если бы увидел, как настроен ваш GTM, но я предполагаю, что вы используете триггер «Все элементы» для захвата этих кликов по ссылкам и фильтруете «Классы кликов» или «Элемент кликов». Проблема заключается в том, что когда тег ссылки (<a></a>) содержит другой элемент, например, <span>, даже если это вызывает открытие вашей ссылки, элемент, который GTM регистрирует как получение клика, является диапазоном, а не ссылкой.

Если вы хотите исправить это, есть два варианта, любой из которых должен работать.

Первый — переключиться на использование типа триггера «Click — Just Links» и фильтровать по классу «track_this». Для этого триггера GTM позволяет событиям щелчка «пузыриться» до тех пор, пока они не попадут в элемент ссылки, а затем он проверяет ваш триггер на этой ссылке, а не на элементе, на который был нажат. Простое использование этого типа триггера должно работать для всех трех ваших образцов.

Другой вариант — использовать более продвинутый фильтр с триггером «Click — All Elements». Если вы измените триггер так, чтобы он срабатывал при «Некоторых кликах», а затем установите условие, что «Элемент клика соответствует селектору CSS»:

.track_this, .track_this *

затем он зарегистрирует щелчок по любому элементу, который имеет класс track_this, так же как щелчок по любому элементу внутри этих элементов.

У меня тот же вопрос, но этот ответ не работает для меня, и я не знаю, почему. В моем случае у меня есть <ul>, который содержит несколько <li>. Мне нужно отслеживать, когда пользователь щелкает любой из этих элементов <li>. В каждом <li> есть другие элементы html. <li> имеет идентификатор "producto-destacado". Есть предположения?

Paula 20.07.2020 01:50

Эту проблему также можно решить, используя немного javascript и «Определяемую пользователем переменную» в диспетчере тегов. Это решение предназначено для обработки более сложных компонентов пользовательского интерфейса.

Объяснение

Google Analytics + Менеджер тегов записывают очень конкретный элемент или узел, на который нажимает пользователь. Этот элемент хранится в GA как переменная «Click Element». Таким образом, в более сложных ситуациях пользовательского интерфейса пользователь может щелкнуть несколько элементов для выполнения одного действия. Например. Вот кнопка со значком и текстом.

<div
   class = "button"
   id = "PARENT_ID"
   onClick = () =>  ... 
>
   <span id = "CHILD_ONE">
      icon
    </span>
    <span id = "CHILD_TWO">
      text
     </span>
</div>

В этом случае пользователь может щелкнуть любой из трех id выше. Все три активируют действие onClick. Однако Google Analytics не заботится о onClick. Он заботится только о том, какой конкретный элемент был нажат. IE: PARENT_ID, CHILD_ONE или CHILD_TWO.

Решение «Пользовательская переменная».

  1. В диспетчере тегов перейдите в «Переменные». (Меню левой колонки.)
  2. Добавьте новую «Пользовательскую переменную».
  3. Выберите тип переменной «Пользовательский JavaScript».

Добавлять:

function() {
  if ({{Click Element}}.id != "") {
    return {{Click Element}}.id;
  }
  if ({{Click Element}}.parentNode.id != "") {
    return {{Click Element}}.parentNode.id;
  }
   if ({{Click Element}}.parentNode.parentNode.id != "") {
    return {{Click Element}}.parentNode.parentNode.id;
  }
  return {{Click Element}}.parentNode.parentNode.parentNode.id;
}

Этот скрипт будет искать DOM на три уровня вверх от любого дочернего элемента (узла) и искать соответствующий тег id. ПРИМЕЧАНИЕ. Click Element — это имя переменной, используемое Google Analytics. Это gtm.element, на который нажал пользователь.

Настройте конфигурацию диспетчера тегов, чтобы использовать новую «Пользовательскую переменную».

Customer Variable Tag Configuration

Теперь используйте родительский идентификатор для настройки триггеров. В моем примере PARENT_ID будет возвращен id, даже если пользователь нажмет на CHILD_ONE или CHILD_TWO. Поэтому выберите «содержит» PARENT_ID.

------ Дополнительные соображения -----

Это решение работает только в пределах трех родительских уровней. Также маловероятно, что можно захватить элемент, выходящий за рамки того, что предполагалось.

В более сложных компонентах пользовательского интерфейса может быть предпочтительнее добавлять теги id к каждому элементу. Если вы используете интерфейсную структуру, такую ​​​​как React, я бы предложил сделать идентификатор тега динамической опорой и добавить его ко всем дочерним компонентам.

ПРИМЕЧАНИЕ. Google Analytics часто меняется. Это решение GA4 + Tag Manager.

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