当前位置:  开发笔记 > 编程语言 > 正文

如果我在一个页面中使用多个Facebook Pixel会导致任何问题吗?

如何解决《如果我在一个页面中使用多个FacebookPixel会导致任何问题吗?》经验,为你挑选了4个好方法。

我想在一个页面中包含我的Facebook Pixel id和客户的Facebook Pixel id,因此我们都可以对用户有一些了解,如果他或她想要,客户也可以为该页面创建AD.

我已经测试了跟踪,它似乎工作正常.但是我确实从Pixel SDK收到有关"在此页面上检测到多个不同像素"的警告.

由于我找不到关于这种情况的任何信息,我想知道这样做是否可以?

谢谢



1> Julien Bachm..:

我有相同的要求,我发现它是可能的,你不需要破解Facebook像素代码.

即使没有记录,该fbq对象也支持多个像素ID.

只需init使用不同的像素ID 多次调用该函数.然后,当你这样做时fbq('track', "PageView");,每个像素会发出一个事件.您可以根据需要调用fbq('track', '{{your_event_name}}')多次,它将跟踪所有先前初始化像素的事件.

所以你的最终代码看起来像这样:




记录在案:https://developers.facebook.com/ads/blog/post/2017/11/28/event-tracking-with-multiple-pixels-tracksingle/

2> 小智..:

FWIW,Facebook已添加trackSingletrackSingleCustom事件(截至2017年11月)允许在页面上初始化多个像素时选择性地触发特定像素上的事件.

文档:https://developers.facebook.com/docs/facebook-pixel/events-advanced-use-cases/v2.12#multipixels.

博客文章:https://developers.facebook.com/ads/blog/post/2017/11/28/event-tracking-with-multiple-pixels-tracksingle/



3> Rangi Lin..:

https://www.facebook.com/business/help/community/question/?id=10100525729830570

根据Facebook帮助团队:

虽然这应该没问题,但如果在同一网页上安装了多个像素并且收到了过去曾尝试过这种情况的人的差异报告,我们无法保证结果的准确性.


链接现在被打破:(

4> John Washam..:

网站上有多个像素不会在网站本身上造成任何问题(即不会出现JavaScript错误,并且所有事件都将针对所有初始化的像素ID发送)。我写了一篇有关此问题的博客文章,请随时阅读此处进行更全面的讨论。

在网站上包含完整的Facebook像素代码片段之后,您可以在调用任何跟踪事件之前简单地添加其他像素ID初始化。因此,您在网站上的完整像素代码段如下所示:



使用初始化网站上的所有像素ID后fbq('init'),您可以通过在JavaScript控制台中运行以下代码来确认已加载像素:

fbq.getState().pixels

您还应该安装Facebook Pixel Helper。它提供了有关发送到Facebook的每个像素和每个跟踪事件的一些详细信息。

下一个自然的问题是如何仅将事件跟踪到那些像素ID中的一个。如果您要处理Facebook Dynamic Ads的产品目录,则可能需要跟踪事件并在网站上将您产品的唯一产品ID传递给Facebook。

截至2017年底,Facebook 最终宣布了将像素事件跟踪到单个像素ID的功能。您只需使用操作trackSingletrackSingleCustom而不是tracktrackCustom,如下所示:

fbq("trackSingle, "[your-pixel-id]", "ViewContent", { content_type: "product", content_ids: ['892185001003'] });

但是这种范例仍然存在问题:如果即使是一个具有多个像素的站点上的开发人员也没有使用新动作,那么他的事件将跟踪该站点上每个人的像素ID。根据我过去几个月的观察,几乎每个开发人员仍在使用该track操作。在这里我应该说,如果其他开发人员将事件跟踪到您的像素还不是世界末日,但是我喜欢不要浪费我的数据并有可能放弃分析和/或转化测量的想法。

因此,问题仍然存在:如何将像素事件跟踪到您的像素,而又不让任何人也将其事件跟踪到您的像素?

在弗拉维奥·乌恩切(Flavio Wuensche)的回答中,他实际上实现了这个想法。我拿走了,清理了,然后修改了。

(function (window, document) {
    if (window.myfbq) return;
    window.myfbq = (function () {
        if (arguments.length > 0) {
            var pixelId, trackType, contentObj;

            if (typeof arguments[0] == 'string') pixelId = arguments[0];
            if (typeof arguments[1] == 'string') trackType = arguments[1];
            if (typeof arguments[2] == 'object') contentObj = arguments[2];

            var params = [];
            if (typeof pixelId === 'string' && pixelId.replace(/\s+/gi, '') != '' &&
            typeof trackType === 'string' && trackType.replace(/\s+/gi, '')) {
                params.push('id=' + encodeURIComponent(pixelId));
                switch (trackType) {
                    case 'PageView':
                    case 'ViewContent':
                    case 'Search':
                    case 'AddToCart':
                    case 'InitiateCheckout':
                    case 'AddPaymentInfo':
                    case 'Lead':
                    case 'CompleteRegistration':
                    case 'Purchase':
                    case 'AddToWishlist':
                        params.push('ev=' + encodeURIComponent(trackType));
                        break;
                    default:
                        return;
                }

                params.push('dl=' + encodeURIComponent(document.location.href));
                if (document.referrer) params.push('rl=' + encodeURIComponent(document.referrer));
                params.push('if=false');
                params.push('ts=' + new Date().getTime());

                if (typeof contentObj == 'object') {
                    for (var u in contentObj) {
                        if (typeof contentObj[u] == 'object' && contentObj[u] instanceof Array) {
                            if (contentObj[u].length > 0) {
                                for (var y = 0; y < contentObj[u].length; y++) { contentObj[u][y] = (contentObj[u][y] + '').replace(/^\s+|\s+$/gi, '').replace(/\s+/gi, ' ').replace(/,/gi, '§'); }
                                params.push('cd[' + u + ']=' + encodeURIComponent(contentObj[u].join(',').replace(/^/gi, '[\'').replace(/$/gi, '\']').replace(/,/gi, '\',\'').replace(/§/gi, '\,')));
                            }
                        }
                        else if (typeof contentObj[u] == 'string')
                            params.push('cd[' + u + ']=' + encodeURIComponent(contentObj[u]));
                    }
                }

                params.push('v=' + encodeURIComponent('2.7.19'));

                var imgId = new Date().getTime();
                var img = document.createElement('img');
                img.id = 'fb_' + imgId, img.src = 'https://www.facebook.com/tr/?' + params.join('&'), img.width = 1, img.height = 1, img.style = 'display:none;';
                document.body.appendChild(img);
                window.setTimeout(function () { var t = document.getElementById('fb_' + imgId); t.parentElement.removeChild(t); }, 1000);
            }
        }
    });
})(window, document);

用法

myfbq("[your-pixel-id]", "PageView");
myfbq("[your-pixel-id]", "ViewContent");
myfbq("[your-pixel-id]", "ViewContent", { content_type: "product", content_ids: ['892185001003'] });

进一步讨论

请注意,此myfbq功能与fbq对象没有关联或联系。它只是在网站上动态插入标签,这些标签会调用Facebook来跟踪单个像素的事件。因此,您可以通过正常的Facebook像素代码片段将事件跟踪到网站上初始化的所有像素(或使用新功能的单个像素),或者将事件跟踪到您自己的像素ID myfbq,或者您可以同时执行!

如果您想两者都做,请将myfbq功能包括在网站上,那么您的Facebook像素代码段可能看起来像这样:



推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有