我想在一个页面中同时包含我的Facebook Pixel ID和客户的Facebook Pixel ID,因此我们都可以对用户有一些了解,如果他或她也可以为该页面创建广告想要。
我已经测试了跟踪,似乎工作正常。但是,我确实收到了Pixel SDK关于&#34的警告;在此页面上检测到多个不同的像素"。
由于我找不到有关此方案的任何信息,我想知道这样做是否可以?
由于
答案 0 :(得分:23)
我有同样的要求,我发现它是可能的,你不需要破解Facebook像素代码。
即使没有记录,string apPath = Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, "App_Data");
对象也支持多个像素ID。
只需使用不同的像素ID多次调用fbq
函数。然后,当你执行init
时,它将为每个像素发出一个事件。您可以根据需要多次调用fbq('track', "PageView");
,它会跟踪所有先前初始化像素的事件。
所以你的最终代码看起来像这样:
fbq('track', '{{your_event_name}}')
2019年4月编辑 @ chuck-le-butt发现一条来自facebook文档的博客文章如何使用像素:https://developers.facebook.com/ads/blog/post/2017/11/28/event-tracking-with-multiple-pixels-tracksingle/
答案 1 :(得分:6)
approach used in the StripeGateway
根据Facebook帮助团队的说法:
虽然这应该没问题,但我们无法保证其准确性 如果在同一网页上安装了多个像素,则结果如此 已收到有关尝试此操作的人员之间存在差异的报告 在过去。
答案 2 :(得分:6)
在您的网站上拥有多个像素不应该在您的网站上产生任何问题(即,不会出现JavaScript错误,并且将针对所有初始化的像素ID发送所有事件)。我写了一篇关于这个问题的blog post,所以请随时阅读以便进行更全面的讨论。
在网站上包含完整的Facebook像素代码段一次后,您可以在调用任何跟踪事件之前简单地添加其他像素ID。因此,网站上的完整像素代码段如下所示:
<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','//connect.facebook.net/en_US/fbevents.js');
fbq('init', '[first-pixel-id]');
fbq('init', '[second-pixel-id]');
fbq('track', 'PageView');
</script>
<noscript>
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=[first-pixel-id]&ev=PageView&noscript=1" />
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=[second-pixel-id]&ev=PageView&noscript=1" />
</noscript>
使用fbq('init')
初始化网站上的所有像素ID后,您可以通过在JavaScript控制台中运行以下代码来确认它们已加载:
fbq.getState().pixels
您还应该安装Facebook Pixel Helper。它提供了有关发送到Facebook的每个像素和每个跟踪事件的一些详细信息。
下一个自然的问题是如何仅将事件跟踪到其中一个像素ID。如果您正在处理Facebook动态广告的产品目录,则可能需要跟踪事件并向Facebook传递您在网站上的产品的唯一产品ID。
截至2017年底,Facebook finally announced功能可将像素事件跟踪到单个像素ID。您只需使用trackSingle
和trackSingleCustom
而不是track
和trackCustom
,例如:
fbq("trackSingle, "[your-pixel-id]", "ViewContent", { content_type: "product", content_ids: ['892185001003'] });
但这个范例仍存在一个问题:即使一个拥有多个像素的网站上的开发人员也没有使用新操作,他的活动也会跟踪网站上每个人的像素ID。根据我在过去几个月看到的情况,几乎每个开发人员仍然使用track
操作。我应该在这里说,如果其他开发人员跟踪他们的事件到你的像素,它不是世界末日,但我喜欢不囤积数据并可能放弃分析和/或转换测量的想法。
所以,问题仍然存在:如何跟踪像素事件到仅你的像素,而不是让其他人也跟踪他们的事件到你的像素?
跟踪网页浏览事件到Facebook的<noscript>
方法给了我一个可以执行此操作的提示,而不是通过fbq
对象。
在Flavio Wuensche的an answer中,他实际上实现了这个想法。我接过它,清理它并修改它。
(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
对象没有关联关系。它只是在网站上动态插入<img>
标签,用于调用Facebook以跟踪单个像素的事件。因此,您可以通过正常的Facebook像素代码段跟踪事件在网站上初始化的所有像素(或使用新功能的单个像素),或者使用myfbq
功能跟踪您自己的像素ID,或者您可以做两件事!
如果您想同时执行这两项操作,请在网站上添加myfbq
功能,然后您的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','//connect.facebook.net/en_US/fbevents.js');
fbq('init', '12345678');
fbq('init', '87654321');
fbq('track', 'PageView'); //tracks a PageView event to all initialized pixels
myfbq("87654321", "ViewContent", { content_type: "product", content_ids: ['892185001003'] }); //tracks a ViewContent event to only one pixel, with your own unique ProductId
</script>
<noscript>
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345678&ev=PageView&noscript=1" />
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=87654321&ev=PageView&noscript=1" />
</noscript>
答案 3 :(得分:4)
为了能够向不同的Facebook像素触发不同的事件,而不必调用所有先前初始化的Facebook像素,您可以覆盖 fbq 功能(通过复制并粘贴下面的代码段到您的代码库然后按照下面使用部分所述调用跟踪事件。
<script type="text/javascript">
(function() {
var fbq = (function() {
function fbq()
{
if(arguments.length > 0) {
var action, pixel_id, type_track, content_obj;
if( typeof arguments[0] == "string") action = arguments[0];
if( typeof arguments[1] == "string") pixel_id = arguments[1];
if( typeof arguments[2] == "string") type_track = arguments[2];
if( typeof arguments[3] == "object") content_obj = arguments[3];
var params = [];
if(typeof action == "string" && action.replace(/\s+/gi, "") != "" &&
typeof pixel_id == "string" && pixel_id.replace(/\s+/gi, "") != "" &&
typeof type_track == "string" && type_track.replace(/\s+/gi, "")) {
params.push("id=" + encodeURIComponent(pixel_id));
switch(type_track) {
case "PageView":
case "ViewContent":
case "Search":
case "AddToCart":
case "InitiateCheckout":
case "AddPaymentInfo":
case "Lead":
case "CompleteRegistration":
case "Purchase":
case "AddToWishlist":
params.push("ev=" + encodeURIComponent(type_track));
break;
default:
return;
}
params.push("dl=" + encodeURIComponent(document.location.href));
params.push("rl=" + encodeURIComponent(document.referrer));
params.push("if=false");
params.push("ts=" + new Date().getTime());
if(typeof content_obj == "object") {
for(var u in content_obj) {
if(typeof content_obj[u] == "object" && content_obj[u] instanceof Array) {
if(content_obj[u].length > 0) {
for(var y=0; y<content_obj[u].length; y++) { content_obj[u][y] = (content_obj[u][y]+"").replace(/^\s+|\s+$/gi, "").replace(/\s+/gi," ").replace(/,/gi, "§"); }
params.push("cd[" + u + "]=" + encodeURIComponent(content_obj[u].join(",").replace(/^/gi, "[\"").replace(/$/gi, "\"]").replace(/,/gi, "\",\"").replace(/§/gi, "\,")));
}
}
else if(typeof content_obj[u] == "string")
params.push("cd[" + u + "]=" + encodeURIComponent(content_obj[u]));
}
}
params.push("v=" + encodeURIComponent("2.5.0"));
if(typeof window.jQuery == "function") {
var iframe_id = new Date().getTime();
jQuery("body").append("<img height='1' width='1' style='display:none;width:1px;height:1px;' id='fb_" + iframe_id + "' src='https://www.facebook.com/tr/?" + params.join("&") + "' />");
setTimeout(function() { jQuery("#fb_" + iframe_id).remove(); }, 1000);
}
}
}
}
return fbq;
});
window.fbq = new fbq();
})();
</script>
现在 fbq 函数需要3个参数。第一个参数将只是“跟踪”。第二个是新的,您可以在其中指定要用于跟踪此特定事件的Facebook像素ID。第三,像往常一样,说出事件名称。最后,您可以传递其他选项,例如购买价值,货币,content_ids等。
<script>
fbq('track', '<FIRST_PIXEL_ID>', 'PageView');
fbq('track', '<FIRST_PIXEL_ID>', 'Purchase', {value: 79.9, currency: 'BRL'});
fbq('track', '<SECOND_PIXEL_ID>', 'Purchase', {value: 89.9, currency: 'BRL'});
</script>
请注意,您还可以针对不同的商品使用不同的购买价值 像素,它们只会被触发到那个特定的像素。
您可以找到结果in this product page,但我没有在产品页面上使用不同的数据。但我用它在结账时触发具有不同购买价值的购买事件。此外,如果您还没有,请下载适用于Google Chrome的Facebook Pixel Helper扩展程序。它可以帮助您调试Facebook Pixel。
答案 4 :(得分:2)
Facebook转化像素代码已更新,可让广告客户跟踪同一网页中的多个像素。以前,如果您在同一页面上有多个版本的转换跟踪像素,则会导致冲突并导致数据丢失。新代码还可以更轻松地跟踪页面内操作,例如点击按钮。
请参阅this。