如何向Facebook Conversion API传递Facebook用户ID
实现方案:通过GTM+SGTM传递Facebook CAPI所需的FB登录ID与external_id
核心思路
由于GTM无法跨域读取Facebook域名下的Cookie,需借助Facebook JavaScript SDK在前端页面获取FB登录ID,再将数据传递给GTM;同时生成或关联网站自身的用户唯一标识作为external_id,最终通过SGTM的CAPI事件模板完成参数传递。
分步操作(新手友好)
1. 在网站中引入Facebook JavaScript SDK
在网站的<head>标签内添加以下代码,替换{your-app-id}为你的Facebook应用ID:
<script> window.fbAsyncInit = function() { FB.init({ appId : '{your-app-id}', cookie : true, xfbml : true, version : 'v18.0' }); // 检查用户登录状态,获取FB用户ID FB.getLoginStatus(function(response) { if (response.status === 'connected') { // 将FB用户ID存入全局变量 window.fbUserId = response.authResponse.userID; // 向GTM数据层推送事件,通知数据就绪 window.dataLayer.push({ 'event': 'fb_user_id_ready', 'fb_user_id': window.fbUserId }); } }); }; // 加载SDK脚本 (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script>
2. 在GTM中配置变量接收数据
- 创建数据层变量:变量名设为
fb_user_id,对应数据层中的fb_user_id字段,用于接收FB登录ID。 - 创建
external_id变量:- 如果网站已有用户唯一标识(如会员ID),直接选择对应数据源;
- 若无现成标识,可创建自定义JavaScript变量,用以下代码生成并存储唯一ID:
function() { var extId = window.localStorage.getItem('site_external_id'); if (!extId) { // 生成随机唯一字符串作为external_id extId = 'ext_' + Math.random().toString(36).substring(2, 15); window.localStorage.setItem('site_external_id', extId); } return extId; }
3. 配置SGTM的CAPI事件标签
- 打开SGTM中已有的Facebook CAPI事件标签,进入参数设置:
- 添加
fb_login_id参数,值选择刚创建的fb_user_id变量; - 添加
external_id参数,值选择对应的external_id变量。
- 添加
- 调整触发条件:可关联
fb_user_id_ready自定义事件,或与原有转化事件(如purchase、lead)结合触发。
4. 验证数据传递有效性
- 使用Facebook事件管理器的测试工具,触发网站转化行为,检查事件是否包含
fb_login_id和external_id参数; - 开启GTM预览模式,确认
fb_user_id和external_id变量能正常读取到值。
注意事项
- 需在Facebook应用后台配置网站域名白名单,否则SDK无法获取用户登录状态;
- 若用户未登录Facebook,
fb_user_id会为空,此时可跳过传递该参数,避免无效数据上报; external_id需保证同一用户在网站内的唯一性,便于Facebook匹配用户全链路行为。
内容的提问来源于stack exchange,提问作者Jack Nezie
相关产品推荐
相关产品推荐

