Пользовательские размеры пикселя Facebook отображаются только при первом просмотре страницы

У нас есть одностраничное приложение Angular с пикселем Facebook, которое вводится через GTM. В первой инъекции мы передаем следующее:

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '<OUR ID>'); // Insert your pixel ID here. 
</script>

Обратите внимание, что нет события просмотра страницы. Затем мы отправляем пользовательское событие «виртуальный просмотр страницы» в уровень данных GTM, которое приводит к тегу, который отправляет просмотр страницы в Google Analytics (работает нормально), а также запускает инъекцию следующего кода:

<script>
fbq('track', 'PageView', {
    dim1:{{dim 1 macro}},
    dim2:{{dim 2 macro}},
    dim3:{{dim 2 macro}} 
});
</script>

При КАЖДОМ просмотре страницы указанный выше fbq добавляется к DOM с заполненными надлежащими размерами (путем просмотра источника страницы).

В ПЕРВОМ просмотре страницы HIT в Facebook размеры присутствуют в вызове (при просмотре вкладки сети), но при ПОСЛЕДУЮЩИХ просмотрах страниц обращение отправляется в Facebook, НО никакие измерения не отправляются, даже если они присутствуют в коде добавлен к DOM.

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

Есть ли какие-либо мысли относительно того, почему последующие обращения НЕ включают специальные размеры?


person Carl K    schedule 21.12.2017    source источник


Ответы (2)


Вы пытаетесь обновить полезную нагрузку каждый раз, когда в приложении Angular происходит изменение истории, и снова выполняете код fb с обновленной полезной нагрузкой?

Я бы реализовал datalayer на вашем интерфейсе:

<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'virtualPageView',
  pagePath: '/newPath', //update this path from your angular route,
                        //or use GTMs built in history-change trigger
                        //and a variable that gets the URL fragment
                        //to update your pageview's path variable.
  customDimenson1: 'value1',
  customDimenson2: 'value2',
  customDimenson3: 'value3'
});
</script>

Создайте триггер типа Custom Event с именем virtualPageView. Создайте 4 переменные типа Переменная уровня данных для pagePath, customDimension1-3. Создайте свой собственный HTML-тег, содержащий ваше событие fbq:

<script>
fbq('track', 'PageView', {
    dim1:{{customDimenson1}},
    dim2:{{customDimenson2}},
    dim3:{{customDimenson3}} 
});
</script>

Создайте еще один тег Custom HTML, который запускается по встроенному триггеру Все страницы, поскольку его нужно выполнить только один раз для вашего одностраничного приложения с вашим базовым кодом:

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '<OUR ID>'); // Insert your pixel ID here. 
</script>

У меня были проблемы с SPA для обновленных переменных. Иногда это состояние гонки, иногда - ошибки в GTM или вашем коде. Вы также можете попытаться отложить выполнение, используя таймер 100 мс (плохой совет).

person Underlines    schedule 28.12.2017
comment
Привет, подчеркивает, это то, как я уже реализовал, и, как я уже отмечал, вызов FIRST работает отлично и включает в себя настраиваемые параметры. При любых последующих вызовах никакие измерения не включаются, но попадание все равно попадает в FB. Тот же тег, который создает первый вызов, также выполняет второй вызов. - person Carl K; 30.12.2017
comment
Понятно. Ваш первоначальный вопрос был очень кратким, поэтому я подумал, что, возможно, вы пропустили какие-то шаги. Я помню, что у меня были похожие проблемы с сайтом blacksocks.com, который переместился на страницу SPA. Было много необновляющихся переменных и других проблем. Чтобы узнать больше, мне пришлось бы глубоко покопаться в настройке GTM. Обычно нажатия событий, включая ключ-значение события, должно быть достаточно, чтобы обновить все, что к нему прикреплено. - person Underlines; 03.01.2018
comment
Я как бы опаздываю на вечеринку. Я не смог найти никакой официальной документации для разбивки по нестандартным размерам. Можете ли вы сослаться на такие документы? - person Lulu; 21.04.2020

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

person Carl K    schedule 10.01.2018
comment
Означает ли это, что пользовательские данные передаются только в первом событии PageView для данной страницы или передаются только в первом событии PageView для посетителя на данном веб-сайте? - person RonC; 31.03.2020
comment
@RonC, во время обратной связи было то, что пользовательские данные передаются только при первом событии PageView на данной странице (первое) - person Carl K; 02.04.2020
comment
Это разъяснение помогает. - person RonC; 02.04.2020