跨域部署同一GTM时能否创建变量存储用户首次访问referral?
完全可以通过GTM实现该需求,核心逻辑是仅在用户首次从外域进入关联站点时抓取referrer信息持久化存储,后续站内/自有跨域跳转不再覆盖该值,所有事件触发时直接读取已存储的初始值即可。
前置准备
- 所有关联跨域站点已部署同一套GTM容器,且已完成基础跨域跟踪配置,确保第一方存储可在关联站点间正常读取
- 存储方案优先选用根域名级第一方cookie,相比localStorage受隐私策略、跨域限制的影响更小,存储有效期可对齐业务转化窗口期设置(通常为30/90天)
具体配置步骤
1. 创建初始referral自定义变量
- 进入GTM工作区,打开「变量」菜单,在「用户定义的变量」板块点击新建,变量类型选择自定义JavaScript
- 将以下逻辑代码粘贴到变量代码框中,根据自身业务修改配置项:
function() { // --------------- 配置项 按需修改 --------------- const STORAGE_COOKIE_NAME = 'first_touch_referral'; // 存储初始referral的cookie名称 const STORAGE_EXPIRE_DAYS = 90; // cookie有效期,单位天 const SELF_OWNED_DOMAINS = ['site-a.com', 'site-b.com']; // 替换为所有自有站点的根域名,不带协议 // --------------------------------------------- const currentReferrer = document.referrer; const rootDomain = window.location.hostname.split('.').slice(-2).join('.'); // 读取已存储的初始referral function getSavedReferral() { const cookieReg = new RegExp('(^| )' + STORAGE_COOKIE_NAME + '=([^;]+)'); const match = document.cookie.match(cookieReg); return match ? decodeURIComponent(match[2]) : null; } // 存储初始referral到根域名cookie function saveReferral(value) { const expireTime = new Date(Date.now() + STORAGE_EXPIRE_DAYS * 24 * 60 * 60 * 1000).toUTCString(); document.cookie = `${STORAGE_COOKIE_NAME}=${encodeURIComponent(value)};expires=${expireTime};path=/;domain=.${rootDomain};SameSite=Lax`; } // 已有存储值直接返回,不做覆盖 const savedValue = getSavedReferral(); if (savedValue) return savedValue; // 无存储值时,判断当前referrer是否为外部非自有域名 if (currentReferrer) { const referrerHost = new URL(currentReferrer).hostname; const isSelfReferrer = SELF_OWNED_DOMAINS.some(domain => referrerHost.endsWith(domain)); // 外域来源(如站点A跳转进入)时,存储值并返回 if (!isSelfReferrer) { saveReferral(currentReferrer); return currentReferrer; } } // 无有效外部初始referrer时返回空值 return ''; }
- 给变量命名(比如
JS - 首次触达referral)后保存。
2. 变量调用方式
不需要单独为该变量配置触发标签,只要在需要用到初始referral的场景直接引用即可:
- 配置GA4、统计工具、广告平台转化标签时,添加自定义上报参数,参数值选择刚才创建的自定义变量
- 其他自定义JS逻辑中需要调用时,通过
{{JS - 首次触达referral}}的GTM变量语法直接取值即可
GTM会在每次事件触发时自动执行变量逻辑:用户首次从站点A跳转至站点B时,识别到referrer为外域A,自动将值写入cookie;后续用户在站点B内点击任意链接、跳转任意页面,甚至跨自有关联站点跳转时,变量会优先读取已存储的cookie值,不会被站内self-referral覆盖,始终返回首次从A跳转到B时的初始referral值。
3. 验证方法
配置完成后进入GTM预览模式验证:
- 清除浏览器中站点A、B的所有cookie和站点存储
- 从站点A点击链接跳转至站点B,在GTM预览面板的变量 tab 中查看对应变量值,应为站点A的来源页面地址
- 在站点B内多次点击站内链接、触发页面浏览/点击事件,再次查看该变量值,始终保持为首次的站点A来源地址,不会更新为站点B自身域名
- 打开浏览器开发者工具-应用-Cookie面板,可看到对应cookie存储在根域名下,有效期符合配置值
注意事项
- 代码中
SELF_OWNED_DOMAINS列表必须完整填入所有自有业务域名,避免用户在自有站点间跳转时误将自有域判定为新的外域来源,覆盖初始referral值 - 若自有站点包含多个不同后缀的根域名(如a.com、b.cn),需额外开启GTM服务端跨域存储能力,同根域名下的子域、关联站点使用上述前端cookie方案即可正常运行
- 若用户通过直接输入地址、书签方式进入站点,无有效referrer时变量会返回空值,符合正常业务逻辑
内容的提问来源于stack exchange,提问作者Gustavs Safins
相关产品推荐
相关产品推荐

