我们有一个单页Angular应用程序,其中包含通过GTM注入的Facebook像素。在第一次注射中,我们通过以下内容:
<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时,维度中存在维度(通过查看网络标签),但在SUBSEQUENT网页浏览中,点击会发送到Facebook,但不会发送任何维度,即使它们存在在附加到DOM的代码中。
在大多数情况下,这些维度不会更改命中,但可能会根据用户在整个会话期间执行的操作而更改。
关于为什么随后的点击不包括自定义尺寸的任何想法?
答案 0 :(得分:0)
每次在Angular应用程序中发生历史记录更改时,您是否尝试更新有效负载,并使用更新的有效负载再次执行fb代码?
我会在你的前端实现一个数据层:
<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>
使用名称 virtualPageView 创建自定义事件类型的触发器。 为 pagePath , customDimension1-3 创建数据层变量类型的4个变量。 创建包含fbq事件的自定义HTML标记:
<script>
fbq('track', 'PageView', {
dim1:{{customDimenson1}},
dim2:{{customDimenson2}},
dim3:{{customDimenson3}}
});
</script>
创建另一个自定义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或您的代码中的错误。您还可以尝试使用100ms计时器延迟执行(不良建议)。
答案 1 :(得分:0)
收到官方Facebook团队的反馈,似乎这是设计的。在使用Pageview事件的任何后续调用中,将不会在有效内容中发送自定义数据。