You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨域部署同一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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:33:28