Facebook已更新其像素,因此我创建了自己的自定义函数来调用,动态地将参数组合在一起提交给Facebook。
步骤1. 在每个页面上,请确保在页面的head元素中初始化您的像素you've initialised your pixel。
步骤2. 添加我创建的这个自定义函数(它有点冗长,因为这是第一版,所以我相信有优化的方法可以让您受益)。
triggerFacebookPixel: function(type, price, product_id, product_name, product_category, num_items) {
//See https://developers.facebook.com/docs/ads-for-websites/pixel-events/v2.8#events for documentation
//type = "ViewContent"|"AddToCart"|"Search"|"AddToWishlist"|"InitiateCheckout"|"AddPaymentInfo"|"Purchase"|"Lead"|"CompleteRegistration"
//product_id = Numeric Product ID. String or Integer accepted for single product events, or an array of integers for multiple products.
//price = Decimal/Float number of individual product's price or total price paid in conversion, or the user's status for 'CompleteRegistration'
//product_name = Optional. String of individual product's name or string of search query
//product_category = Optional. String of product category, hierarchy's accepted. E.g. "Clothing > Shirts > Men's > T-Shirts"
//num_items = Optional. Total number of products.
var data = {
value: typeof(price) == 'string' ? parseFloat(price) : price,
currency: 'USD'
}
switch (type) {
case 'Search':
data.content_ids = product_id;
data.search_string = product_name;
if (product_category !== undefined && product_category != '') {
data.content_category = product_category;
}
break;
case 'Lead':
data.content_name = product_name;
data.content_category = product_category;
break;
case 'CompleteRegistration':
data.status = product_id;
data.content_name = product_name;
break;
default:
//Product Specific Calls
//ViewContent|AddToCart|AddToWishlist|InitiateCheckout|AddPaymentInfo|Purchase
if (num_items == 1) {
data.content_ids = [typeof(product_id) == 'string' ? parseInt(product_id) : product_id];
data.content_category = product_category;
data.content_name = product_name;
} else {
data.content_ids = product_id;
}
//"num_items" is only a parameter used in these two types
if (type == 'InitiateCheckout' || type == 'Purchase') {
data.num_items = num_items
}
//"content_type" is only a parameter used in these three types
if (type == 'Purchase' || type == 'AddToCart' || type == 'ViewContent') {
data.content_type = 'product';
}
break;
}
fbq('track', type, data);
}
步骤3. 使用适当的参数调用该函数。
对于购买后的感谢弹窗,如果用户只购买1件商品,则像素点被不同地触发。基本上,如果只购买一个产品,Facebook接受产品名称和类别的参数,但是如果有多个产品,则不接受这些参数。
以下是用户“购买1件商品”的一些示例产品数据:
- 产品名称:“我的超级棒T恤”
- 产品ID:182
- 产品类别:“服装>衬衫>T恤”
- 用户支付的总金额(包括运费/手续费和税金):10.84美元
这是您在确认页面上要调用的函数:
triggerFacebookPixel('Purchase', 10.84, 182, 'My Super Awesome T-Shirt', 'Clothing > Shirts > T-Shirts', 1);
当用户购买多个商品时,像素会以不同的方式处理它,排除产品名称和类别,仅发送其ID。因此,假设我们的用户购买了这两件物品:
- 产品ID:182和164(衬衫和其他物品)
- 用户支付的总金额(包括运费/手续费和税金):24.75美元
以下是如何使用该函数:
triggerFacebookPixel('Purchase', 24.75, [182, 164], '', '', 2);
对于 Facebook 定义的其他 标准事件,您可以使用相同的函数来处理产品相关的“ViewContent”、“AddToCart”、“AddToWishlist”、“InitiateCheckout”和“AddPaymentInfo”。只需在调用中更改“Purchase”为这些关键字中的任何一个即可。
其他事件并不一定与产品相关:“Lead”、“Search”和“Complete Registration”。您仍然可以像这样使用此函数处理这些关键字。
例如:用户搜索了“蓝色衬衫”:
triggerFacebookPixel('Search', 0, [], 'blue shirts');
如果您想在用户搜索功能中传递产品类别,可以将其作为字符串传递到末尾。我无法想象出您知道用户正在搜索哪个类别的用例场景。除非您在产品出现在搜索结果中并且用户从搜索页面上单击它时使用此功能。这可能是该函数实际用途,但文档并不十分清楚。如果对您而言是这种情况,则只需将0和空数组更改为实际值(分别为价格和产品ID),并将其类别作为搜索字符串后的最后一个参数添加即可。
例如:用户提交了一个表单,让他们订阅您的通讯。
triggerFacebookPixel('CompleteRegistration', 0, 'Signed Up', 'Newsletter');
Facebook的文档指出,“CompleteRegistration”应该在完成注册表单时使用,例如完成服务的订阅/注册。 “Signed Up”字符串是“status”参数,“Newsletter”字符串是“content_name”参数。
例如:用户提交了一个表单,注册了您提供的某项服务的免费30天试用(因此他们现在是潜在客户),该服务的名称为“免费30天试用服务”,它位于“我的服务”类别下的“免费试用”子类别中。
triggerFacebookPixel('Lead', 0, 'Free 30-Day Trial Service', 'My Services > Free Trials');
Facebook的文档说明,“Lead”是指完成注册,例如点击定价、注册试用等。我假设服务的名称是参数“content_name”,服务类别是“content_category”参数。
<noscript><img height="1" width="1" alt="" style="display:none" src="facebook.com/…; /></noscript>
,因为它是为那些关闭JavaScript的访问者提供备用方案的。在我们的情况下,如果您的访问者关闭了js,这个标签就不会触发。然而,将其包含在一个函数中只会使其失去作用。 - Blexyfb_params
是一个局部变量(与原始代码不同,那里是全局变量)。由于它是局部的,插入的脚本将无法访问它,也无法读取pixel_id
。这只会获取一个无法执行任何操作的脚本,因为没有ID可以读取。 - Flambinooffsite_event
脚本,而不是获取一些JS,然后ping该脚本,因此开销较小。在将这些值用于URL之前,您可能需要对其进行一些encodeURIComponent()
处理,但在这种情况下应该没有必要。 - Flambino