使用gtag.js配置Google Analytics自定义维度失败求助
我来帮你排查这个自定义维度不生效的问题——之前在做SPA的GA埋点时也碰到过类似的坑,大概率是这几个细节没处理好:
先确认GA后台的维度配置和代码匹配
回到GA管理后台,找到你创建的自定义维度:- 一定要确保它的索引是1(你代码里用的是
dimension1),如果后台里的维度索引是2,那代码里得改成dimension2,索引是从1开始计数的,差一个数字都不行。 - 检查维度的范围设置:如果想让用户名跟随用户的所有事件,选「用户级」或者「会话级」更合适;如果是事件级,那每次发事件都得带上这个值,范围不匹配会导致数据不显示在辅助维度里。
- 一定要确保它的索引是1(你代码里用的是
确保
custom_map在所有事件前完成配置
你的gtag('config')必须在所有set和event调用之前执行,因为自定义映射是在config阶段注册的。如果config代码加载得太晚,或者在异步脚本里,后续的事件根本识别不了my_username这个自定义字段。
正确的代码顺序应该是这样的:// 先加载gtag的基础初始化代码 window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); // 配置GA,同时注册自定义映射 gtag('config', '<My GA tag here>', { 'send_page_view': false, 'custom_map': { 'dimension1': 'my_username' } }); // 之后再设置用户信息或者发送事件 gtag('set', 'my_username', '<username of logged in user>'); gtag('event', 'login');SPA场景下要重新设置用户信息
因为你提到了是SPA(用calculated_current_spa_location处理页面路径),要注意:gtag('set')设置的变量是存在内存里的,当SPA路由切换时,如果没有重新设置,后续的page_view事件可能会丢失这个值。
所以你得在每次路由变化时,检查用户是否处于登录状态,如果是,就重新执行gtag('set', 'my_username', '<username>'),确保每个页面视图事件都能带上用户名。用浏览器工具验证数据是否真的发出去了
打开浏览器的「开发者工具」→「Network」面板,过滤collect请求(GA发送数据的请求),看看请求参数里有没有cd1(dimension1对应的查询参数):- 如果能看到
cd1=<你的用户名>,说明数据已经发送,那可能是GA后台的数据延迟(实时报告要等几分钟,标准报告可能更久),或者维度的范围设置不对。 - 如果看不到
cd1,说明数据没传过去,那就要回头检查custom_map是不是配置错了,gtag('set')有没有执行,或者有没有被其他代码覆盖了这个值。
- 如果能看到
直接在事件中传值的备选方案
如果你想直接在事件里传用户名,除了传my_username,也可以直接传dimension1,两种方式都应该生效,但前提是custom_map已经配置好了:// 方式1:用自定义字段(依赖custom_map) gtag('event', 'page_view', { 'page_path': calculated_current_spa_location, 'my_username': '<username of logged in user>' }); // 方式2:直接用维度索引(不需要依赖custom_map,可读性差但更直接) gtag('event', 'page_view', { 'page_path': calculated_current_spa_location, 'dimension1': '<username of logged in user>' });要是方式1不行,试试方式2,能快速排查是不是
custom_map的配置出了问题。
内容的提问来源于stack exchange,提问作者Robba

