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

为何通过Google Tag Manager从数据层传递至Google Analytics的User ID未以正确格式显示?

问题根源与解决方法

这问题我之前帮不少开发者排查过,核心原因是Google Tag Manager(GTM)或者Google Analytics(GA)自动把你的十六进制格式字符串当成数值解析了。

你数据层里的user_id值是"0x91511bb4502B7F01539EB91AC8F35c9F7a16b0dB",但因为字符串以0x开头——这是编程语言里十六进制数字的标准标识——GTM的变量解析逻辑会默认把它转成对应的十进制数字。而这个数字实在太大了,GA就用科学计数法(8.29612e+47)来显示它,完全丢失了原始的字符串格式。

下面给你几个可行的解决办法,按优先级排序:

方法1:修改前端数据层的赋值(最直接)

如果有权限修改前端代码,给user_id的值做个小调整,避免被识别为数字:

  • 要么去掉0x前缀,直接用"91511bb4502B7F01539EB91AC8F35c9F7a16b0dB"(如果业务允许的话);
  • 要么给字符串加个非数字前缀,比如"uid_0x91511bb4502B7F01539EB91AC8F35c9F7a16b0dB",这样GTM就不会把它当成数值处理。

方法2:在GTM里强制转成字符串(不用改前端)

如果没法修改前端代码,就在GTM里对这个变量做处理:

  1. 登录GTM后台,创建一个自定义JavaScript变量;
  2. 输入以下代码,确保把数据层里的user_id强制转成字符串:
    function() {
      // 从数据层里找到触发UserID事件的条目
      const userData = dataLayer.find(item => item.event === "UserID");
      // 找到的话转成字符串返回,没找到就返回空字符串
      return userData ? String(userData.user_id) : "";
    }
    
  3. 保存变量后,在你的GA标签里,把User ID字段的取值改成这个自定义JS变量,而不是直接引用数据层的user_id变量。

方法3:验证变量输出(确保生效)

在GTM的预览模式里,触发UserID事件,检查这个自定义变量的输出值——确认它是原始的字符串"0x91511bb4502B7F01539EB91AC8F35c9F7a16b0dB",而不是数字。确认没问题后发布GTM版本,过一会儿再去GA里查看用户ID的数值,就应该和你期望的一致了。

额外提醒:GA的User ID字段本身是支持字符串类型的,只要你传递过去的是纯字符串类型,它就会原样保存显示——所以核心就是打断GTM自动解析数值的逻辑,强制保留字符串格式。

内容的提问来源于stack exchange,提问作者Jahangeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:22:46