Google跨域分析:Cookie未授权时URL参数规则及相关问题咨询
问题背景与咨询
背景信息
某客户网站基于WordPress搭建,使用OneTrust进行Cookie管理,已配置Google跨域分析。用户Cookie授权状态不同时,GA的行为存在差异:
- 完全授权Cookie:GA将用户标识数据存储于
_ga、_ga_ID等分析类Cookie中; - 仅授权必要Cookie:GA会在URL中添加类似
_gl=1*XXXXXXX*_up*MQ..*_ga*ZZZZZZZ.*_ga_YYYYYYY*YYYYYYY..的参数,此为Google官方文档记载的默认行为。
用户最初存在两处疑问:
- 为何仅在未完全授权Cookie时才添加URL参数?
- 用户进行同域子页面跳转(如从
www.example-page.com/home-page到www.example-page.com/about-page)时,URL被添加GA参数是否合理?
具体咨询问题
- GA如何判断将数据存入Cookie还是URL参数?
- 首次跳转前这些参数存储于何处?是否在
dataLayer或google_tag_manager全局变量中? - 未完全授权Cookie时,能否将参数存储在URL以外的位置?
- 同域内跳转时添加GA参数是否属于正确行为?
补充说明
同域跳转添加参数的问题已解决,原因是更新了gtm-templates-simo-ahava的Consent Mode模板,回退到旧版本即可修复,推测与该模板仓库的相关PR有关。
问题解答
1. GA判断存储方式的逻辑
GA通过Consent Mode机制识别当前的Cookie授权状态来决定存储方式:
- 当用户完全授权分析类Cookie(即
analytics_storage被设为granted),GA优先使用Cookie存储用户标识(如客户端ID)——Cookie是同域/跨域场景下稳定传递用户数据的标准持久化方式; - 当用户仅授权必要Cookie(
analytics_storage被设为denied),GA无法写入分析类Cookie,就会采用URL参数的方式传递用户标识,以此维持跨会话/跨页面的用户识别,避免数据追踪断裂。
2. 首次跳转前参数的存储位置
首次跳转前,参数对应的原始数据(如客户端ID)会临时存储在dataLayer或Google Tag Manager的全局变量中:
- GA初始化时会生成客户端ID,若Cookie未授权,该ID会暂存到
dataLayer的相关事件字段(如gtm.clientId),或google_tag_manager实例的内部变量中; - 当触发页面跳转时,GTM会读取这些临时存储的数据,拼接成URL参数添加到目标链接上。
3. 非URL位置存储参数的可行性
未完全授权Cookie时,无法使用分析类Cookie,但可以尝试以下合规替代方案:
- 浏览器存储API:如
sessionStorage(会话级存储,关闭标签页即失效)或localStorage(持久化存储),但GA默认不支持这种方式,需要通过自定义GTM模板或代码实现数据的存储与传递; - 自定义请求头:若网站内部跳转采用AJAX方式,可通过自定义请求头传递用户标识,但不适用于普通页面跳转;
- 注意:所有替代方案必须符合GDPR等隐私法规,不能违反用户的Cookie授权意愿。
4. 同域跳转添加参数的正确性
- Google官方默认逻辑中,仅在跨域跳转时才会添加此类URL参数;同域跳转时,即使Cookie未授权,GA也应优先尝试使用必要Cookie(若授权)或其他同域存储方式,而非添加URL参数;
- 此次出现的同域跳转添加参数问题,属于第三方Consent Mode模板(gtm-templates-simo-ahava)的逻辑异常,回退旧版本修复符合预期,说明是模板更新带来的非标准行为。
内容的提问来源于stack exchange,提问作者Jakub Simek
相关产品推荐
相关产品推荐

