作者
Ira Holubovska
在完成购买之前,客户会通过线上和线下的各种渠道与品牌互动。这使得营销人员和分析专家很难在一个地方跟踪所有这些互动。像 Google Analytics 或 Matomo 服务端跟踪 这样的标准工具通常无法跟踪线下事件。为了解决这个问题,人们通常会使用客户数据平台(CDP)。
使用 CDP 的一种方式是购买现成的工具,但这可能成本高昂。另一种选择是构建您自己的 CDP。在本文中,我们将展示如何使用服务端 Google Tag Manager 和数据库构建简易版 CDP。
这种配置能让您将所有客户信息整合到一处,从而更容易理解客户并更有效地触达他们。无论您是跟踪领域的新手还是经验丰富的专家,本指南都能帮助您创建 CDP,显著改善您管理客户数据的方式。
服务端 Google Tag Manager 容器将接收所有用户互动(无论线上还是线下)的请求。您可以使用 GA4 或 Data Client 等标准客户端来接收来自网页端 GTM 的线上事件。要获取线下事件,您可以使用 Webhook。在博文的后半部分,我将展示如何在 sGTM 内部发送和调试 Webhook 数据。
无论 sGTM 接收到何种类型的数据,它都会将数据存储在数据库中。sGTM 可以与多种数据库集成,例如 Firebase、Supabase(比 Firestore 便宜得多)或 Data Store。这里我将使用 Stape Data Store,因为它是 Stape 内部的内置功能,且对 Stape 付费客户(Pro 套餐或更高版本)免费提供。
除了 sGTM 和存储库之外,我们还将使用唯一用户标识符,这将有助于将同一用户的数据存储在同一个文档中。
1. 数据源(CRM、SDK、CMS、移动应用、网站等)。
2. 服务端 GTM 容器。
3. 数据库(在本指南中我将使用 Data Store。您也可以使用 Firestore 或 Supabase,Stape 为此创建了 Supabase writer tag)。
4. 要从数据库读取/写入数据,可以使用以下 sGTM 模板:
5. 唯一用户标识符。在本指南中,我将使用 Unique user ID 或由 Stape WordPress plugin 生成的 WordPress 用户 ID。
以下是用户数据从数据源(CRM)流向 CDP 的方式:

接收数据的方法取决于您向 sGTM 发送数据的方式。以下是获取数据的三种方式:
这是最棘手也是最关键的部分。要构建完善的 CDP,您必须拥有关于用户及其与品牌互动的精确数据。CDP 应包含最新信息以及清晰、非重复的数据。您需要合适的用户 ID 来构建这样的用户档案系统。
对于已识别用户,您可以使用电子邮件或可在不同系统间通用的内部 ID。如果用户未被识别,则可以使用由以下各项的哈希值组成的 Stape User ID:
如果您的品牌运营多个网域,您还可以在 User ID 增强功能中启用 Cross-domain ID 选项。它会根据相同的信号(但不含主机名)生成一个额外的 ID(X-Stape-Cross-Domain-Id),从而使同一个未识别用户在连接到服务端容器的所有网域中获得同一个 ID。这有助于避免在 CDP 中出现重复的档案。
如果出于隐私合规要求,您希望让 User ID 具有更高的唯一性,可以添加一个依赖变量。它可以是天、月、周或年。这完全取决于该 ID 需要具备多高的唯一性。
我们将使用 reStore variable,或者使用 Stape Store Writer Tag 和 Stape Store Lookup ,将来自请求和数据库的用户档案进行合并与拼接。这些模板的副本也可以在 Stape GitHub 上获取。
Writer tag 和 lookup variable 的作用显而易见。这两个模板允许您在 Data Store 中写入和读取数据。
restore variable 将首先识别该用户是否存在于数据库中。首先,该变量会从我们的事件中获取所有用户标识符 (电子邮件、电话或 client ID)。然后,它向 Store 发送查询,以筛选具有上述标识符之一的客户。如果数据库中有关于该客户的信息,它将返回该客户的数据。

当变量从 Store 获取响应时,会将其与传入请求进行合并。例如,如果不存在 city 字段,则会使用来自 Store 的该字段。如果传入请求包含 city 字段,但 Store 中没有该字段或两者不同,则来自请求的该字段数据将被写入 Store。如果在 Store 中部分匹配到客户,该变量将创建一个新实体。

一旦 sGTM 中的数据经过处理并格式化为 sGTM 格式,您就可以将其发送给所需的任何供应商,例如 Meta、TikTok、Google Ads 或 Analytics。请注意请求中发送的用户数据。
在 sGTM 中进行调试并不容易,而离线事件的处理甚至可能更加棘手。我们将探讨如何使用以下工具:
我将通过两个用例来演示如何使用 Data Store。我们发现这些是 Stape 客户中最常用的场景。
1. 配置 User ID。我将使用 Stape User ID power-up,它有助于将用户合并为客户。
a. 登录您的 Stape 账户并启用该 power-up。为此,请打开 sGTM 容器,点击 Power-ups 选项卡,打开 User ID,开启开关并保存。

b. 在 Server GTM 容器中创建一个变量,用于从服务端的请求标头中检索 User ID。

2. 在 purchase 事件发生时将数据写入数据库。请确保将 Stape User ID 添加到事件数据中。
a. 将 Stape store writer 代码添加到 sGTM 模板库(从 GitHub 下载并导入到 sGTM 代码模板部分),然后创建一个代码以在 purchase 事件发生时写入事件数据。我将写入所有事件数据,并将 Stape User ID 添加到存储记录中。我们将在 pageview 事件上合并用户时需要它。

b. 如果该代码正常工作,您将在数据库中看到一条类似于以下屏幕截图的记录。

3. 使用 Data Store 中存储的数据丰富 pageview 事件数据。
a. 为了将来自页面浏览事件的用户与我们存储在数据库中的用户进行合并,我们将再次使用 Stape User ID 以及能够从存储中检索数据的 Stape Store Lookup 变量。将 Stape Store Lookup 变量添加至 sGTM 变量模板库中。要从 GitHub 下载该模板,请前往 sGTM 模板部分。在变量部分点击“新建”,然后导入。

b. 为您想要恢复的参数创建 Stape Store Lookup 变量:ad document path 和 path name。

c. 将 Lookup 变量添加到 pageview 标签中。

4. 测试设置。您应该可以在 sGTM 容器中触发的标签里看到丰富后的用户数据。

在此用例中,我想向广告网络发送离线事件数据。向广告主平台发送转化数据时,关键要素是发送 click ID。Click ID 是用户点击广告链接时添加到 URL 或 Cookie 中的标识符。借助 Click ID,广告网络可以轻松将转化归因于相应的广告系列。
Click ID 适用于所有网站事件,但如果您想使用来自 CRM 或 CMS 的转化数据发送至广告网络,在大多数情况下 Click ID 是不可用的。
为了配置此选项,我将使用 Stape restore 变量在 pageview 时将数据写入 Data Store,并在发生 purchase 事件时恢复数据。除此之外,我还需要在 sGTM 容器中进行转换,以丰富发送至 Facebook 的事件。另一个关键要素是将 pageview 事件中的用户与线下购买 Webhook 中的用户进行匹配。为此,您必须使用一个在网站 pageview 事件和线下购买中保持一致的用户标识符。
对于标准的 CMS,这很容易实现,因为它们通常会在 Cookie 中包含此类标识符。对于客户网站,您需要让开发人员添加这些参数。我的配置是在一个 WordPress 网站上完成的。Stape WordPress 插件会在网站事件中发送唯一的 User ID,并将其添加到 Webhook 中。借助这个 User ID,我可以在数据库中将 pageview 事件和 purchase Webhook 中的用户进行匹配。
1. 在 sGTM 中接收来自线下数据源的 purchase Webhook。
a. 从 CRM 发送 Webhook。我将使用 Stape WordPress 应用来完成此操作。转到 Webhooks 选项卡并添加 Server GTM 容器网址。这是您用于服务端 GTM 容器的网域。我们建议在您的网站网域中设置一个 自定义网域,因为这样可以设置第一方 Cookie。别忘了勾选对应的复选框。

b. 将 Data Client 添加到 sGTM 客户端模板中,并将其配置为获取您从 CRM 发送的 Webhook。为此,请创建一个 Data Client 模板并添加 Webhook 路径。

c. 在 Stape 上配置 sGTM Preview Header config Power-Up,以在 sGTM 中调试传入的 Webhook。前往 sGTM 预览,点击右上角的三个点,然后点击 Send requests manually。复制 X-Gtm-Server-Preview HTTP 标头并将其粘贴到 sGTM Preview Header config Power-Up 中。


d. 打开 sGTM 调试器并测试其是否收到了 webhook。一旦触发 Webhook,您应该会在 sGTM 中看到传入的请求,并且数据客户端已认领该请求。

2. 将 pageview 事件中的 fbc、fbp 和 Client ID 参数写入数据库。
在本步骤中,我将向您展示如何使用 reStore 变量将 fbc 和 fbp 参数写入数据库。为此,我们将使用 Facebook pageview 代码来触发 pageview 事件,并通过一个转换利用 restore 变量将数据写入存储。
a. 通过此链接将 restore 变量添加到 sGTM 变量中。您需要从 GitHub 下载该模板,在 sGTM 中新建变量模板,然后点击导入。
b. 配置 restore 变量。它应使用 WordPress User ID 作为标识符,并将 fbp、fbc 和 WordPress User ID 写入存储。

c. 创建一个转换,使用 restore 变量丰富 Facebook pageview 事件中的事件数据,并将此转换添加到您的 FB pageview 代码中。

d. 测试配置。如果所有设置均正确,您应该会看到数据已记录在 Data Store 中。

e. 设置一个 Facebook purchase 事件,使其在每次接收到 Webhook 时触发。若要使用来自 Data Store 的数据扩充该事件,需要使用转换功能,以及在 FB pageview 事件转换中使用的同一个 restore 变量。这将为 purchase 事件提取所需参数。但为了按 Facebook 可识别的格式发送数据,需要使用对象提取器变量(object extractor variable)从 restore 变量中提取所需对象。



f. 测试配置。如果一切正常运行,您应该会看到 fbc 和 fbp 参数已成功发送至 Facebook,或包含在线下 purchase 事件中。


借助数据存储,您可以创建客户数据库或 CDP。它提供了一种轻松收集并存储可从客户处获取的所有信息的方法,有助于您构建更完善的分析表单或提升付费广告系列的效果。扩充和丰富您的客户数据有助于深入洞察客户的行为和偏好,进而帮助您优化营销策略。
想尝试服务器端跟踪吗?
免费试用
评论