如何在Adobe Analytics中重新填充r变量以获取原始引荐URL?
解决Adobe Analytics中认证跳转后原始引荐来源丢失的问题
我之前帮不少开发者处理过类似的场景——当用户通过外部渠道进入你的站点,先被跳转到第三方认证域完成登录,再重定向回首页时,Adobe Analytics会把认证域当成引荐来源,完全丢失了最初的外部渠道信息。核心原因是浏览器的document.referrer在跳转后会变成认证域的URL,而Adobe默认用这个值填充r变量。
下面是两种靠谱的解决方案,你可以根据自己的认证流程选一种:
方案一:跳转认证前存储原始引荐到Cookie
在用户首次访问着陆页、还没跳转到认证提供商之前,把原始的引荐信息存在同域Cookie里,等用户从认证域回来后再读取这个值覆盖Adobe的r变量。
步骤1:着陆页添加存储逻辑
在着陆页的JS里(跳转到认证之前)加入这段代码:
// 仅在没有存储过原始引荐时执行 if (!document.cookie.includes('originalReferrer')) { // 优先取document.referrer,没有的话标记为direct const originalRef = document.referrer || 'direct'; // 设置Cookie,有效期1天,根目录确保首页能读取 document.cookie = `originalReferrer=${encodeURIComponent(originalRef)}; path=/; max-age=86400; SameSite=Lax`; } // 这里写你跳转到认证提供商的逻辑,比如: // window.location.href = 'https://your-auth-provider.com/login?redirect_uri=https://your-domain.com/home';
步骤2:首页覆盖Adobe的r变量
在首页的Adobe跟踪代码初始化后、发送页面视图前,读取Cookie并修改r变量:
// 封装一个读取Cookie的小函数 function getOriginalReferrer() { const cookieMatch = document.cookie.split('; ').find(row => row.startsWith('originalReferrer=')); return cookieMatch ? decodeURIComponent(cookieMatch.split('=')[1]) : ''; } // 初始化Adobe Analytics实例 var s = s_gi('你的报表套件ID'); // 读取原始引荐并覆盖r变量 const originalRef = getOriginalReferrer(); if (originalRef && originalRef !== 'direct') { s.r = originalRef; } // 发送页面视图跟踪 s.t();
方案二:通过URL参数传递原始引荐
如果你的认证流程允许在跳转URL里附加自定义参数,可以把原始引荐作为参数传到认证域,再在认证成功后带回首页,从URL参数里读取并设置r变量。
步骤1:着陆页跳转时附加参数
在着陆页跳转认证时,把原始引荐拼到跳转URL的参数里:
const originalRef = encodeURIComponent(document.referrer || 'direct'); // 把original_ref参数附加到认证跳转URL的redirect_uri后面 const redirectUri = `https://your-domain.com/home?original_ref=${originalRef}`; const authUrl = `https://your-auth-provider.com/login?redirect_uri=${encodeURIComponent(redirectUri)}`; window.location.href = authUrl;
步骤2:首页读取URL参数并覆盖r变量
在首页的跟踪代码里,读取URL参数并修改r变量:
// 封装读取URL参数的函数 function getUrlParam(paramName) { return new URLSearchParams(window.location.search).get(paramName); } // 初始化Adobe实例 var s = s_gi('你的报表套件ID'); // 读取原始引荐参数 const originalRef = getUrlParam('original_ref'); if (originalRef) { s.r = decodeURIComponent(originalRef); // 可选:用replaceState清除URL里的参数,避免影响后续页面跟踪 window.history.replaceState({}, document.title, window.location.pathname); } // 发送页面视图 s.t();
注意事项
- 测试前一定要清除浏览器的Cookie和缓存,确保每次测试都是全新的会话,避免旧数据干扰。
- 如果你的站点有多个环境(测试/生产),要确保Cookie的作用域和URL参数的传递在对应环境下正常工作。
- 对于
direct访问的用户,不要修改r变量,保持Adobe的默认逻辑即可。
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

