将用户ID从Google Tag Manager发送到Google Analytics 4

8

我已经按照官方指南设置了Google标签管理器和GA4属性(不是遗留的通用分析)。
根据官方指南https://support.google.com/tagmanager/answer/6103696?hl=en&ref_topic=3441530#zippy=%2Cweb-pages,我已经学会了如何使用dataLayer.push({})对象将自定义/推荐事件发送到GA4,并在触发器和标记中使用它们的“event”字段,这基于通用分析指南https://www.analyticsmania.com/post/track-logins-with-google-tag-manager/,因为在官方指南中似乎没有详细说明这一点https://support.google.com/tagmanager/answer/9442095,只简单描述了GTM方面的情况。

发送用户ID也是同样的情况:文档只告诉我们在创建Google Analytics 4配置标签时应该怎么做:

To set a user ID, add a row to Fields to Set. 
Set the Field Name to user_id, and the Value to 
a Tag Manager Variable that returns the user ID.

我只从外部UA指南中获取知识,使用数据层变量读取数据层中的user_id字段,并在Google Analytics上创建相应的user_id用户属性。在通用分析中,曾经存在相关设置,但现在已不存在(https://www.analyticsmania.com/post/google-analytics-user-id-with-google-tag-manager/)。请保留HTML标记。
所以,我已经使用user_id数据层变量部署了GA4事件,其配置中引用了该变量(在调试视图中的数据层中可见), 创建了相应的GA用户属性,并启用了用户ID报告。然而,在我的实时视图中,user_id字段总是得到一些奇怪的“gtm.js”值 (好像我的数据层变量值被事件名称替换了,来自默认的dataLayer.push({event:“gtm.js”,user_id:“ignored value”)。 到底缺少什么才能识别我的user_id字段呢? user_id in debug view

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

谢谢!

4个回答

7

感谢 @bpstrngr!在找到你的答案之前,我转了一圈。

为了澄清这一步骤,以防其他人遇到同样的问题;

  1. 在发送userId到dataLayer时添加事件名称:
window.dataLayer.push({
   'userId' : '{{ myUserId }}',
   'event': 'userIdSet',
})
  1. 在GTM中创建一个自定义事件触发器来监听步骤1中写下的事件(将事件名称设置为你想要的名称): GTM触发器配置截图

  2. 将此事件作为触发器添加到您的标签中: GTM标签配置截图


3

最终结果表明,由于配置标签是由页面浏览事件触发的, 而这个事件发生在我将user_id推送到数据层之前, 所以它用事件名称填充了不存在的值。

我给user_id事件命名以创建自定义事件触发器, 重新触发配置标签。 这样,user_id最终可见。


那是为什么用户属性的计数超过1的原因吗?我也有类似的情况。userId在pageview事件之后设置。对于每个userId/用户属性,我在用户列中看到“2”。我可以忽略它吗? - Rahul Suresh
@Rahul 如果您获得了不同的用户ID,则您的配置应该大多没有问题。重复可能是由于应用程序重新加载或配置在某个地方分叉而导致的重复事件触发。但我只是猜测,因为我自从使用GA以来就没有真正使用过它。 - bpstrngr
对于单页应用程序,在重新触发配置标签以设置用户ID时,您必须将“忽略页面上的重复配置实例(推荐)”设置为关闭,以使其正常工作,但需自担风险。请参见下方。 - Björn Grambow

0

这可能不是最佳选择,因为它并没有完全遵循谷歌的指南,但它能够完美地工作。

因此,在您的初始化脚本中,我们可以首先设置用户ID,然后再调用 gtm.start / gtm.js 事件:

    setGTMDataLayer() {
        const { dataLayer } = window;
        if (!dataLayer) window.dataLayer = [];
        if (this.props.user) {
            window.dataLayer.push({
                userId: this.props.user.userid,
                event: 'setUserId',
            });
        }

        const gtmScript = (w, d, s, l, i) => {
            w[l] = w[l] || []; w[l].push({
                'gtm.start':
        new Date().getTime(),
                event: 'gtm.js',
            }); const f = d.getElementsByTagName(s)[0],
                j = d.createElement(s),
                dl = l !== 'dataLayer' ? `&l=${l}` : ''; j.async = true; j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`; f.parentNode.insertBefore(j, f);
        };

        gtmScript(window, document, 'script', 'dataLayer', 'GTM-XXXXXX');


    }

在那个脚本的末尾,如果我们正在使用React,我们可以调用

this.setState({ renderGTM: true });

然后,在执行了setGTMDataLayer函数之后,我们需要渲染iframe。所以只需要使用创建的状态,做的就是:

    renderGTM = () => this.state.renderGTM && <noscript>
        <iframe title="gtm" src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXX"
            height="0" width="0" style={{ display: 'none', visibility: 'hidden' }} />
    </noscript>


0

选项1

除了上述的配置标签之外,还需要添加一项内容。 对于单页面应用程序,当用户属性发生变化时,我通常会触发一个额外的GA4配置标签,其中自动页面浏览跟踪被禁用。

非常重要!!! 这种方法只在您的GA4流配置中关闭以下设置时有效:

忽略页面上重复的配置实例(推荐)

这个设置很难找到:

管理

  1. Web流
  2. 点击您的Web流
  3. Google标签下:配置选项卡设置
  4. 管理选项卡下:管理Google标签

因为您会多次触发配置选项卡,所以必须将其禁用。

请阅读切换按钮的警告,它有一些注意事项,但迄今为止我还没有遇到真正的问题。

选项2

似乎在用户属性下也可以设置user_id,尽管在GA4文档中被标记为保留属性名称。

在我的情况下,网站愉快地发送了一个set_user_properties事件,所以我可以利用这个功能。

那种方法当然会创建一个新的事件,其商业价值不如设置属性高。
其他基于事件的方法: 在每次触发事件时设置用户属性(难以维护) 或者只在频繁的页面浏览事件中设置它们(这种情况下需要禁用自动页面浏览跟踪)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接