Facebook Pixel + Google Tag Manager + fbq活动

时间:2017-10-27 10:26:19

标签: javascript google-tag-manager facebook-pixel

我使用Google跟踪代码管理器来提供Facebook Pixel。

然后,我使用像这样的代码来发射事件

  <body>
...
        <script>
            fbq('track', 'ViewContent', { 
                content_type: 'product',
                content_ids: ['1234'],
                content_name: 'ABC Leather Sandal',
                content_category: 'Shoes',
                value: 0.50,
                currency: 'USD'
            });
        </script>
    </body>

但是当代码执行时,由于Facebook Pixel异步加载而fbq尚不可用,因此出现错误。

  

未捕获的ReferenceError:未定义fbq

我该怎么办?

4 个答案:

答案 0 :(得分:5)

使用标签排序功能。这允许以预定义的顺序触发标记,其中后续标记在执行之前等待先前的标记。

创建一个加载FB init代码的标记。在标签触发选项中选择“每页一次”(您只需加载一次,即使它被多个标签使用)。

转到您的Facebook活动代码。在高级设置中查找标签排序选项。将其设置为:

enter image description here

(其中Facebook init是加载FB库的标签,我说你使用标准的bootstrap代码)。启用最后一个复选框后,如果您的安装标记失败,则不会触发。

由于FB引导代码将使用命令队列设置fbq对象,因此您现在可以将数据推送到fbq;即使库仍在下载,数据也将进入命令队列,并且在下载库时将执行调用。

标记序列确保在事件之前设置fbq对象。如果这是您唯一的FB活动,您可以省去麻烦,只需将加载器粘贴到事件代码上方即可。

答案 1 :(得分:1)

7月5日12:48的 Vir us 的解决方案对我来说就像一种魅力!谢谢:-)

编辑:就我而言,我需要在Wordpress网站上实现类似的功能,在该网站上,GTM加载在带有FB Pixel的标题中。因此,打开 标记后放置的代码如下:

<script>
    function waitForFbq(callback){
        if(typeof fbq !== 'undefined'){
            callback()
        } else {
            setTimeout(function () {
                waitForFbq(callback)
            }, 100)
        }
    };

    waitForFbq(function() {
        fbq('track', 'ViewContent', {content_name: '<?php the_title(); ?>'});
    });
</script>

答案 2 :(得分:0)

有相同的错误-最终,所有问题都与排序有关。

当通过WP插件在wordpress网站上的标签管理器中使用像素时,默认情况下将像素加载到页脚中,因此主体中无法识别在页脚中声明之前使用的fbq变量: Google Tag Manager for WordPress options

我尝试了不同的设置,最后放弃了使用插件-只需使用页面构建器的脚本部分(Thrive Architect = TA)将其插入标题部分即可: Custom script setting in TA 现在一切正常!

答案 3 :(得分:0)

无法获得Eike的工作方法,很难,我确定那是正确的方法。

最后得到以下“解决方法”(基本上只是等到fbq初始化):

<script>
    function waitForFbq(callback){
        if(typeof fbq !== 'undefined'){
            callback()
        } else {
            setTimeout(function () {
                waitForFbq(callback)
            }, 100)
        }
    }

    waitForFbq(function () {
        fbq('track', 'Registered');
    })
</script>

也许会帮助某人