知识库首页 知识库-世界 ads.md

ads

本地来源:Knowledge/World/项目/文档/ads-tracking/ads.md

仔细结合本项目,告诉我如何增加谷歌广告投放的追踪代码呢,具体要修改啥文件,追踪那些东西呢, 结合本项目代码,给我写个详细的markdown中文文档哈,我来帮你详细调研谷歌广告追踪的完整设置方案。基于详细调研,我给你整理一份完整的谷歌广告追踪设置落地SOP:


谷歌广告转化追踪完整设置SOP(2025版)

📋 TLDR Cheatsheet - 快速参考

项目 核心内容 时间估计
基础转化追踪 Google Ads后台创建转化动作 + GTM部署标签 30-45分钟
Enhanced Conversions 提升追踪精度,必须开启(SHA256加密用户数据) 20分钟
GTM设置 统一管理所有追踪代码,无需改网站代码 60分钟
测试验证 Tag Assistant + Preview Mode 15-20分钟
数据到达时间 24-48小时显示"已验证"状态 -

关键指标: - Conversion ID(AW-xxxxxxxx):账户唯一 - Conversion Label:每个转化动作唯一 - GCLID:Google Click ID,追踪点击来源


🎯 一、追踪架构选择

方案对比

方案 适用场景 优势 缺陷
客户端追踪(推荐) 中小型网站,月收入$500-5K 设置简单,无需服务器 受ad blocker影响
服务端追踪(高级) 大型电商,月收入>$50K 数据准确+10-30% 需要服务器和技术配置
混合追踪 复杂业务场景 最全面 配置复杂

你的场景:月收入$500-800,建议先用客户端追踪(GTM方式),等规模上去再考虑服务端。


🔧 二、详细设置步骤

Step 1: Google Ads后台创建转化动作(15分钟)

1.1 进入转化设置

Google Ads后台 → 右上角"目标"图标 → 转化
→ 点击"+ 新建转化动作"

1.2 选择转化来源

  • 网站:在线购买、表单提交、按钮点击
  • 电话:广告中的来电
  • 应用:APP下载/内购
  • 线下:CRM导入的转化

你的AI工具网站,选择"网站"。

1.3 配置转化动作

转化名称: 例如 "Crystal_Upscaler_Purchase"
目标和动作优化: 选择"购买"或"提交潜在客户表单"
价值设置:
  - 固定值: 每次转化$X(如订阅费$29.99)
  - 动态值: 从网站dataLayer传递实际金额
计数方式:
  - 每次: 电商购买(推荐)
  - 一次: 潜在客户提交(避免重复计数)
转化时间窗口:
  - 点击后转化: 30天(默认)
  - 展示后转化: 1天(可选)
归因模型:
  - 数据驱动(推荐,系统自动优化)
  - 最终点击(传统模式)

1.4 获取追踪代码参数

完成后会显示: - Conversion ID: AW-12345678(整个账户通用) - Conversion Label: xxxxxxxxxxxx(该转化动作专属)

保存这两个值!接下来GTM会用到。


Step 2: Google Tag Manager设置(45分钟)

2.1 创建GTM账户和容器

访问: https://tagmanager.google.com
→ 创建账户(公司名称:ShinStar LLC)
→ 创建容器(容器名称:crystalupscaler.com,选择"网页")

2.2 安装GTM代码到网站

会得到两段代码:

代码1 - 放在<head>内尽可能靠前

<!-- Google Tag Manager -->
&lt;script&gt;(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var 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);
})(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
<!-- End Google Tag Manager -->

代码2 - 放在<body>标签后

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

2.3 创建Google Ads转化追踪标签

路径: GTM后台 → 代码 → 新建

代码类型: Google Ads 转化跟踪
代码配置:
  Conversion ID: AW-12345678(从Step 1.4获取)
  Conversion Label: xxxxxxxxxxxx(从Step 1.4获取)
  Conversion Value:
    - 固定值: 29.99
    - 变量: {{transactionTotal}}(需先创建变量)
  Currency Code: USD
  Transaction ID: {{transactionId}}(防重复计数,推荐设置)

触发条件:
  - 购买: 感谢页面URL包含"/thank-you"或"/success"
  - 注册: 自定义事件"registration_complete"

2.4 创建触发器(Trigger)

方式A - 页面浏览触发(最简单)

触发器类型: 网页浏览
触发条件: Page URL 包含 /order-success

方式B - 自定义事件触发(推荐)

触发器类型: 自定义事件
事件名称: purchase(与网站dataLayer.push的事件名一致)

你的网站需要在支付成功后推送事件:

// 支付成功页面添加
window.dataLayer = window.dataLayer || [];
dataLayer.push({
  'event': 'purchase',
  'transactionId': 'ORD-123456',
  'transactionTotal': 29.99,
  'currency': 'USD'
});

Step 3: Enhanced Conversions设置(20分钟)

为什么必须开启:能提升转化追踪准确度15-30%,特别是Safari/Firefox用户。

3.1 Google Ads后台开启

Google Ads → 目标 → 转化 → 选择要增强的转化动作
→ "增强型转化"部分 → 勾选"启用增强型转化"
→ 选择标签管理方式: Google Tag Manager
→ 保存

3.2 GTM中配置Enhanced Conversions

方法A - 自动检测(最简单,推荐)

在你的Google Ads转化追踪标签中:

进入标签配置
→ 展开"增强型转化"部分
→ 勾选"自动检测用户提供的数据"
→ 保存

系统会自动扫描页面上的邮箱、电话等字段。

方法B - CSS选择器(手动指定)

如果页面有明确的邮箱字段:

增强型转化配置:
  Email: #user-email(CSS选择器)
  Phone: #user-phone
  First Name: #first-name
  Last Name: #last-name
  Address: #billing-address

方法C - dataLayer变量(最可靠)

先在GTM创建变量:

变量类型: 数据层变量
数据层变量名称: user_email

然后在转化标签中引用:

增强型转化 → 选择变量 → {{user_email}}

网站代码推送数据:

dataLayer.push({
  'event': 'purchase',
  'user_email': '[email protected]', // 会自动SHA256加密
  'user_phone': '+12025551234'
});

Step 4: 测试和调试(20分钟)

4.1 GTM Preview Mode测试

GTM后台 → 点击"预览"按钮
→ 输入你的网站URL
→ 点击"连接"
→ 网站会在新标签打开,左下角有调试徽章

测试流程: 1. 在网站完成一次转化(购买/注册) 2. 回到GTM Preview界面 3. 左侧看到"purchase"事件 4. 点击事件 → 查看"Tags"标签 5. 确认"Google Ads Conversion Tracking"显示"Tags Fired Successfully"

4.2 Google Tag Assistant验证

安装扩展

Chrome商店搜索: Google Tag Assistant
或访问: https://tagassistant.google.com

验证步骤

1. 打开Tag Assistant → 点击"Add domain"
2. 输入你的网站URL → 点击"Start"
3. 在网站完成转化操作
4. 回到Tag Assistant查看结果
5. 找到"Google Ads Conversion Tracking"
6. 展开查看"em"参数(Enhanced Conversions数据)

验证Enhanced Conversions: - ✅ em参数存在且是长字符串(>10字符)= 成功 - ❌ em参数缺失 = 未配置 - ❌ em=tv.1~em. = 数据为空 - ❌ em=tv.1~em.e1 = 数据格式错误

4.3 Google Ads后台确认

24小时后检查:
Google Ads → 目标 → 转化 → 查看状态列

状态解读: - 未验证 → 等待首次转化数据(<24h正常) - 无近期转化 → 标签已验证,但7天内无转化 - 正在记录转化 → ✅ 一切正常! - 代码无效 → ❌ 需要检查代码安装


🔍 三、常见问题排查

问题1:转化一直显示"未验证"

排查步骤: 1. 确认GTM代码已正确安装到网站 2. 检查转化标签的触发器是否正确 3. 用Preview Mode测试标签是否触发 4. 确保测试了实际转化(不是随便访问页面) 5. 等待24-48小时,Google需要时间验证

问题2:转化数量不准确

可能原因: - 未设置Transaction ID → 重复计数 - 触发器配置错误 → 页面刷新重复触发 - 同时用了GA4导入和Ads转化 → 重复追踪

解决

转化标签中必须添加:
Transaction ID: {{transactionId}}(唯一订单号)

问题3:Enhanced Conversions数据为空

检查清单: 1. 转化页面是否有用户邮箱/电话字段? 2. CSS选择器是否正确? 3. dataLayer是否正确推送数据? 4. Google Ads后台是否已接受数据条款?

验证命令(浏览器控制台):

// 检查dataLayer
console.log(window.dataLayer);

// 检查页面是否有邮箱字段
document.querySelector('#user-email').value;

📊 四、高级优化(可选)

1. GA4集成(观察对比)

虽然Google Ads原生追踪更准确,但可以把GA4转化导入作为参考:

GA4后台 → 管理 → 事件 → 标记为转化
Google Ads → 目标 → 转化 → 数据来源 → 添加
→ 选择GA4属性 → 导入事件

注意:导入的GA4转化不支持Enhanced Conversions

2. 离线转化追踪(B2B场景)

如果你有CRM系统,可以追踪电话/线下成交:

Google Ads → 目标 → 上传
→ 使用GCLID匹配点击和成交
→ 需要在表单中收集GCLID参数

网站表单添加隐藏字段:

<input type="hidden" name="gclid" id="gclid">
&lt;script&gt;
  const urlParams = new URLSearchParams(window.location.search);
  document.getElementById('gclid').value = urlParams.get('gclid');
</script>

3. 服务端追踪(未来升级)

当月收入>$5K时考虑: - 使用Stape.io或Google Cloud Run - 配置Server GTM容器 - 绕过Ad Blocker,数据准确度+20-30% - 成本:$50-200/月


✅ 完整Checking List

🔲 准备阶段

  • [ ] 确认网站可以收集用户邮箱/电话(用于Enhanced Conversions)
  • [ ] 确定追踪的转化类型(购买/注册/下载等)
  • [ ] 准备好访问权限(Google Ads + GTM + 网站后台)

🔲 Google Ads设置

  • [ ] 创建转化动作,设置正确的价值和计数方式
  • [ ] 记录Conversion ID和Conversion Label
  • [ ] 开启Enhanced Conversions功能
  • [ ] 接受Google的数据使用条款

🔲 GTM配置

  • [ ] 创建GTM账户和容器
  • [ ] 网站安装GTM代码(和两处)
  • [ ] 创建Google Ads转化追踪标签
  • [ ] 配置正确的触发器
  • [ ] 添加Transaction ID变量(防重复)
  • [ ] 配置Enhanced Conversions(自动检测或手动指定)
  • [ ] 发布GTM容器

🔲 测试验证

  • [ ] 使用GTM Preview Mode测试标签触发
  • [ ] 用Google Tag Assistant验证转化标签
  • [ ] 检查Enhanced Conversions的"em"参数
  • [ ] 在网站完成一次真实测试转化
  • [ ] 24小时后检查Google Ads后台状态

🔲 数据验证(7天后)

  • [ ] 转化状态显示"正在记录转化"
  • [ ] 转化数量与实际订单/注册数匹配
  • [ ] Enhanced Conversions诊断报告无错误
  • [ ] 转化价值正确传递
  • [ ] 没有重复计数问题

🔲 持续优化

  • [ ] 每周检查转化数据质量
  • [ ] 对比Google Ads后台和网站实际数据
  • [ ] 定期查看Enhanced Conversions诊断
  • [ ] 月收入>$5K时考虑升级到服务端追踪
  • [ ] 测试不同归因模型对ROAS的影响

📚 资源链接

官方文档: - Google Ads转化追踪帮助 - GTM官方指南 - Enhanced Conversions设置

工具: - Tag Assistant - GTM Preview - TagHound调试扩展

你的场景建议: 以你10+个AI工具网站,月收入$500-800的规模: 1. 优先:基础转化追踪 + Enhanced Conversions 2. 次要:GA4集成(观察对比) 3. 暂缓:服务端追踪(等规模更大)

预计总设置时间:2-3小时(首次完整配置)

有任何具体环节不清楚的可以随时问我!,# AI工具SaaS网站Google Ads转化追踪系统完整实施SOP

面向70%美国用户的Crystal Upscaler/SoraDeo等AI工具站点,整合GTM、Google Ads、GA4与Stripe支付的全链路追踪方案

Google Ads转化追踪系统是SaaS业务增长的数据基础。本指南将帮助您从零开始搭建完整的追踪体系,覆盖用户注册→AI功能使用→付费转化的全路径追踪,并确保符合GDPR/CCPA隐私合规要求。核心目标是让每一分广告投入都能追踪到真实的业务转化,为智能出价算法提供准确的数据反馈。


TLDR Cheatsheet(快速参考卡片)

关键ID获取位置速查

ID类型 获取路径 格式示例
GTM容器ID GTM后台 → Admin → Container ID GTM-XXXXXXX
GA4测量ID GA4 → Admin → Data Streams → 选择流 G-XXXXXXXXXX
Google Ads Conversion ID Google Ads → Goals → Conversions → Tag setup AW-123456789
Conversion Label 同上,每个转化操作不同 AbCdEfGhIjKlMnO

必装标签清单(GTM中)

1. Consent Mode默认设置(最先触发)
2. Google Tag (GA4配置)
3. Conversion Linker(所有页面)
4. Google Ads Conversion - 注册
5. Google Ads Conversion - 试用开始
6. Google Ads Conversion - 购买完成

核心dataLayer推送代码

// 1. Consent Mode默认设置(GTM代码之前)
gtag('consent', 'default', {
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted',
  'analytics_storage': 'granted'
});

// 2. 注册完成
dataLayer.push({
  event: 'sign_up',
  method: 'email',
  user_data: { email: userEmail }
});

// 3. AI生成使用
dataLayer.push({
  event: 'ai_generation',
  generation_type: 'image_upscale',
  tokens_used: 100
});

// 4. 购买完成(Stripe success页面)
dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: stripeSessionId,
    value: 29.99,
    currency: 'USD'
  },
  user_data: { email: customerEmail }
});

实施优先级

第1天: GTM安装 + Consent Mode + Conversion Linker
第2天: GA4配置 + Google Ads关联
第3天: 注册/试用转化追踪
第4天: Stripe支付转化追踪
第5天: AI使用行为追踪 + 测试验证

第一部分:GTM从零安装和配置

1.1 创建GTM账户和容器

操作路径:访问 https://tagmanager.google.com → 登录Google账户 → Create Account

配置步骤: 1. 账户名称:输入公司名(如"Crystal AI Tools") 2. 国家/地区:选择公司注册地 3. 容器名称:使用主域名(如crystalupscaler.com) 4. 目标平台:选择"Web" 5. 同意服务条款并创建

多站点管理建议: - 每个独立域名创建一个容器 - 使用统一的账户管理所有容器 - 容器命名规范:品牌名 - 站点类型(如"Crystal - Main Site")

1.2 GTM容器代码安装

创建容器后,GTM会显示两段代码。必须按照以下位置精确放置

第一段代码 → 放入<head>标签内,尽可能靠近开头

<!-- Google Tag Manager -->
&lt;script&gt;(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var 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);
})(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
<!-- End Google Tag Manager -->

第二段代码 → 放入<body>标签开始后,紧跟着

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

完整HTML结构示例

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Consent Mode 默认设置(必须在GTM之前) -->
    &lt;script&gt;
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('consent', 'default', {
        'ad_storage': 'granted',
        'ad_user_data': 'granted',
        'ad_personalization': 'granted',
        'analytics_storage': 'granted'
      });
    </script>

    <!-- Google Tag Manager -->
    &lt;script&gt;(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var 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);
    })(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
    <!-- End Google Tag Manager -->

    <title>Crystal Upscaler - AI Image Enhancement</title>
</head>
<body>
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->

    <!-- 网站内容 -->
</body>
</html>

1.3 dataLayer初始化和使用规范

dataLayer是GTM与网站之间传递数据的桥梁。必须在GTM代码之前初始化

初始化代码

&lt;script&gt;
  window.dataLayer = window.dataLayer || [];
</script>

数据推送规范

// ✅ 正确:使用push方法追加数据
window.dataLayer.push({
  'event': 'sign_up',
  'method': 'email'
});

// ❌ 错误:直接赋值会覆盖已有数据
dataLayer = [{ 'event': 'sign_up' }];

// ❌ 错误:大小写错误
datalayer.push({ 'event': 'sign_up' });

常见错误避坑: | 错误做法 | 后果 | 正确做法 | |----------|------|----------| | 在GTM代码后声明dataLayer | 初始数据丢失 | 在GTM代码前声明 | | dataLayer = [{...}] | 覆盖已有数据 | dataLayer.push({...}) | | 不同页面使用不同变量名 | 数据无法匹配 | 全站统一命名 |


第二部分:Google Ads转化追踪设置

2.1 创建转化操作

操作路径:Google Ads后台 → 目标(Goals)图标 → 转化(Conversions) → 摘要(Summary) → +创建转化操作

SaaS推荐转化层级设计

转化操作名称 类别 计数方式 主/次要 建议转化值
SaaS_Registration Sign-up One Primary $5-10
SaaS_Trial_Start Subscribe One Primary $15-25
SaaS_AI_Generation Other Every Secondary $1-2
SaaS_Purchase Purchase Every Primary 动态金额
SaaS_Subscription_Upgrade Purchase Every Primary 升级差价

创建注册转化操作示例

  1. 点击"+ Create conversion action"
  2. 选择"Website"
  3. 输入网站URL,点击"Scan"
  4. 选择"Use Google Tag Manager"
  5. 配置转化详情: - Conversion name: SaaS_Registration - Goal and action optimization: Sign-up → Submit lead form - Value: Use the same value → 10 USD - Count: One(每用户仅计一次) - Click-through conversion window: 30天 - View-through conversion window: 7天 - Attribution model: Data-driven(推荐)
  6. 点击"Done" → "Save and continue"
  7. 记录显示的 Conversion IDConversion Label

2.2 GTM配置Conversion Linker标签

Conversion Linker的作用:捕获URL中的gclid广告点击参数,存储到第一方Cookie中,确保跨页面转化归因准确。这是必须配置的基础标签

配置步骤: 1. GTM → Tags → New 2. Tag Configuration → 选择"Conversion Linker" 3. 保持默认设置 4. Triggering → 选择"All Pages" 5. 命名为"CL - Conversion Linker" 6. Save

2.3 GTM配置Google Ads转化追踪标签

以注册转化为例

Step 1: 创建dataLayer变量

GTM → Variables → User-Defined Variables → New: - 变量名: DL - User Email - 变量类型: Data Layer Variable - Data Layer Variable Name: user_data.email

Step 2: 创建转化触发器

GTM → Triggers → New: - 触发器名称: CE - sign_up - 触发器类型: Custom Event - Event name: sign_up - 触发条件: All Custom Events

Step 3: 创建转化标签

GTM → Tags → New: - 标签名称: GAds - Registration Conversion - 标签类型: Google Ads Conversion Tracking - 配置: - Conversion ID: AW-123456789(从Google Ads获取) - Conversion Label: AbCdEfGhIjKlMnO(从Google Ads获取) - Conversion Value: 10 - Currency Code: USD - Transaction ID: {{DL - Transaction ID}}(可选,防重复) - Triggering: 选择CE - sign_up

2.4 配置增强转化(Enhanced Conversions)

增强转化通过收集用户第一方数据(如邮箱),提升10-25%的转化数据准确性。

Step 1: Google Ads后台开启

操作路径:Goals → Settings → Enhanced conversions for web → 勾选"Turn on enhanced conversions for web" → 选择"Google Tag Manager"

Step 2: GTM创建User-Provided Data变量

GTM → Variables → User-Defined Variables → New: - 变量名: UPD - User Data - 变量类型: User-Provided Data - 配置方式: Manual configuration - 数据映射: - Email: {{DL - User Email}} - Phone Number: {{DL - User Phone}}(可选)

Step 3: 修改转化标签

编辑之前创建的转化标签: 1. 勾选"Include user-provided data from your website" 2. 选择变量: {{UPD - User Data}} 3. Save

前端dataLayer推送示例(带用户数据)

// 注册成功时推送
dataLayer.push({
  event: 'sign_up',
  method: 'email',
  user_data: {
    email: '[email protected]',
    phone_number: '+11234567890'  // E.164格式
  }
});

第三部分:GA4与Google Ads集成

3.1 关联GA4与Google Ads账户

从GA4端关联(推荐):

  1. GA4 → 左下角Admin → Property列 → Product links → Google Ads links
  2. 点击"Link"
  3. 点击"Choose Google Ads accounts" → 选择账户 → Confirm
  4. 配置选项: - ✅ Enable Personalized Advertising(启用个性化广告) - ✅ Enable Auto-Tagging(启用自动标记)
  5. Next → Submit

验证关联成功:等待24-48小时后,在GA4 Acquisition报告中查看Google Ads维度数据。

3.2 GA4事件标记为关键事件

操作路径:GA4 → Admin → Data Display → Events

对以下事件开启"Mark as key event": - sign_up - purchase - begin_checkout - 自定义的trial_startai_generation

3.3 将GA4转化导入Google Ads

操作路径:Google Ads → Tools → Measurement → Conversions → + New conversion action → Import

  1. 选择"Google Analytics 4 properties" → "Web"
  2. 选择要导入的GA4关键事件
  3. 配置转化设置(窗口、归因模型等)
  4. Import and continue

重要提示:避免双重计算 - 如果同一事件同时使用GA4导入和Google Ads原生追踪,会重复计数 - 推荐:核心转化(购买)使用Google Ads原生追踪(支持增强转化) - 辅助指标使用GA4导入

3.4 创建再营销受众

创建高意向用户受众

GA4 → Admin → Data Display → Audiences → New audience

示例:购物车放弃者

包含条件: begin_checkout
排除条件: purchase
有效期: 30天

示例:高活跃试用用户

包含条件: ai_generation (count >= 5)
时间范围: 过去7天
排除条件: purchase

受众创建后会自动同步到关联的Google Ads账户,可在Google Ads → Tools → Shared Library → Audience Manager中查看。


第四部分:多层级转化追踪实施

4.1 用户注册/登录追踪

本项目已实现完整的注册/登录追踪,包括: - 邮箱注册src/components/auth/register-form.tsx 调用 trackSignUp() - OAuth 注册/登录src/app/[locale]/auth/post-oauth/post-oauth-client.tsx 自动判断新用户还是老用户

OAuth 智能判断:Google/GitHub 登录时,如果用户是新注册的(createdAt 在 2 分钟内),会触发 sign_up;否则触发 login

核心代码逻辑

// post-oauth-client.tsx 中的判断逻辑
const isNewUser = (createdAt) => {
  const diffMs = Date.now() - new Date(createdAt).getTime();
  return diffMs < 2 * 60 * 1000; // 2分钟内创建视为新用户
};

// 在 OAuth 回调中
const user = session.data?.user;
if (user && isNewUser(user.createdAt)) {
  trackSignUp(user.email, 'oauth'); // 新用户 → 注册转化
} else {
  trackLogin('oauth'); // 老用户 → 登录事件
}

注册完成追踪代码

// 用户注册成功后执行
function trackRegistration(user) {
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({
    event: 'sign_up',
    method: user.signupMethod,  // 'email', 'google', 'github', 'oauth'
    user_data: {
      email: user.email,
      // 仅在用户提供时包含
      phone_number: user.phone || undefined
    }
  });
}

登录追踪代码

function trackLogin(user) {
  window.dataLayer.push({
    event: 'login',
    method: user.loginMethod,
    user_id: user.id  // 用于GA4 User-ID功能
  });
}

4.2 AI功能使用追踪

AI生成事件追踪

// AI生成完成后调用
function trackAIGeneration(params) {
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({
    event: 'ai_generation',
    generation_type: params.type,      // 'image_upscale', 'video_generate'
    model_used: params.model,          // 'crystal_v2', 'sora_deo'
    credits_used: params.credits,      // 消耗的积分/Token
    generation_time_ms: params.duration,
    is_premium_feature: params.isPremium,
    session_count: getSessionGenerationCount()  // 本次会话第几次生成
  });
}

// 使用示例
async function generateImage(prompt) {
  const startTime = Date.now();
  const result = await callAIAPI(prompt);

  trackAIGeneration({
    type: 'image_upscale',
    model: 'crystal_v2',
    credits: result.creditsUsed,
    duration: Date.now() - startTime,
    isPremium: currentUser.plan !== 'free'
  });

  return result;
}

GTM配置AI使用事件

创建触发器 CE - ai_generation: - Event name: ai_generation

创建GA4事件标签: - Tag Type: Google Analytics: GA4 Event - Event Name: ai_generation - Event Parameters: - generation_type: {{DL - generation_type}} - credits_used: {{DL - credits_used}}

4.3 Stripe支付转化追踪(核心)

方案选择:推荐使用前端追踪 + 服务器端验证的混合方案。

前端实现(success页面追踪)

Step 1: Stripe Checkout创建时传递metadata

// 后端创建Checkout Session
const session = await stripe.checkout.sessions.create({
  payment_method_types: ['card'],
  line_items: [{
    price: priceId,
    quantity: 1,
  }],
  mode: 'subscription',
  success_url: `${YOUR_DOMAIN}/payment/success?session_id={CHECKOUT_SESSION_ID}`,
  cancel_url: `${YOUR_DOMAIN}/pricing`,
  metadata: {
    userId: req.user.id,
    planName: selectedPlan.name,
    gaClientId: req.body.gaClientId  // 从前端传入
  }
});

Step 2: 前端获取GA Client ID

// 在进入Checkout前获取并传递GA Client ID
function getGAClientId() {
  return new Promise((resolve) => {
    if (typeof gtag === 'function') {
      gtag('get', 'G-XXXXXXXXXX', 'client_id', resolve);
    } else {
      resolve(null);
    }
  });
}

Step 3: Success页面追踪代码

// /payment/success 页面
async function trackPurchaseSuccess() {
  const sessionId = new URLSearchParams(window.location.search).get('session_id');
  if (!sessionId) return;

  // 从后端API获取交易详情
  const response = await fetch(`/api/checkout-session/${sessionId}`);
  const session = await response.json();

  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({
    event: 'purchase',
    ecommerce: {
      transaction_id: sessionId,
      value: session.amount_total / 100,  // Stripe金额为分
      currency: session.currency.toUpperCase(),
      items: [{
        item_id: session.subscription || session.payment_intent,
        item_name: session.metadata?.planName || 'Subscription',
        price: session.amount_total / 100,
        quantity: 1,
        item_category: 'subscription'
      }]
    },
    user_data: {
      email: session.customer_details?.email
    }
  });
}

// 页面加载时执行
trackPurchaseSuccess();

Step 4: 后端API获取Session详情

// /api/checkout-session/:sessionId
app.get('/api/checkout-session/:sessionId', async (req, res) => {
  try {
    const session = await stripe.checkout.sessions.retrieve(req.params.sessionId);
    res.json({
      amount_total: session.amount_total,
      currency: session.currency,
      subscription: session.subscription,
      payment_intent: session.payment_intent,
      customer_details: {
        email: session.customer_details?.email
      },
      metadata: session.metadata
    });
  } catch (error) {
    res.status(404).json({ error: 'Session not found' });
  }
});

GTM配置购买转化

创建数据层变量: - DL - ecommerce.transaction_id - DL - ecommerce.value - DL - ecommerce.currency

创建触发器: - 名称: CE - purchase - 类型: Custom Event - Event name: purchase

创建Google Ads转化标签: - Conversion ID: AW-123456789 - Conversion Label: XyZaBcDeFgH(购买转化的Label) - Conversion Value: {{DL - ecommerce.value}} - Currency Code: {{DL - ecommerce.currency}} - Transaction ID: {{DL - ecommerce.transaction_id}} - Include user-provided data: ✅(选择User-Provided Data变量) - Triggering: CE - purchase

服务器端追踪(Webhook方式,更准确)

// Stripe Webhook处理
app.post('/webhook/stripe', express.raw({ type: 'application/json' }), async (req, res) => {
  const sig = req.headers['stripe-signature'];
  let event;

  try {
    event = stripe.webhooks.constructEvent(req.body, sig, process.env.STRIPE_WEBHOOK_SECRET);
  } catch (err) {
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }

  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;

    // 发送到GA4 Measurement Protocol
    await sendGA4ServerEvent({
      client_id: session.metadata?.gaClientId || generateClientId(),
      events: [{
        name: 'purchase',
        params: {
          transaction_id: session.id,
          value: session.amount_total / 100,
          currency: session.currency.toUpperCase()
        }
      }]
    });
  }

  res.status(200).json({ received: true });
});

// GA4 Measurement Protocol发送函数
async function sendGA4ServerEvent(payload) {
  const MEASUREMENT_ID = process.env.GA4_MEASUREMENT_ID;
  const API_SECRET = process.env.GA4_API_SECRET;

  await fetch(
    `https://www.google-analytics.com/mp/collect?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
    {
      method: 'POST',
      body: JSON.stringify(payload)
    }
  );
}

4.4 完整营销漏斗追踪事件设计

漏斗阶段 事件名称 触发时机 关键参数
获取 page_view 落地页访问 utm_source, utm_campaign
兴趣 sign_up_start 点击注册按钮 method
注册 sign_up 注册成功 method, user_data.email
激活 first_ai_generation 首次使用AI功能 generation_type, time_to_first_action
活跃 ai_generation 每次AI生成 generation_type, credits_used
考虑 view_item_list 查看定价页 item_list_name: 'pricing'
结账 begin_checkout 开始结账 plan_name, value
购买 purchase 支付成功 transaction_id, value, currency
留存 subscription_renewal 续费成功 value, renewal_count

第五部分:隐私合规配置(GDPR/CCPA)

5.1 Consent Mode v2配置

针对70%美国用户的推荐配置

// 在GTM代码之前添加
&lt;script&gt;
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

// 美国用户默认granted
gtag('consent', 'default', {
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted',
  'analytics_storage': 'granted'
});

// 加州用户可选择更保守的配置
gtag('consent', 'default', {
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'denied',  // 个性化广告需要opt-out选项
  'analytics_storage': 'granted',
  'region': ['US-CA']
});

// EU用户必须默认denied
gtag('consent', 'default', {
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'analytics_storage': 'denied',
  'region': ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE']
});
</script>

用户同意后更新状态

function updateConsentGranted() {
  gtag('consent', 'update', {
    'ad_storage': 'granted',
    'ad_user_data': 'granted',
    'ad_personalization': 'granted',
    'analytics_storage': 'granted'
  });
}

// 绑定到Cookie同意弹窗的接受按钮
document.getElementById('accept-cookies').onclick = updateConsentGranted;

5.2 CCPA合规必做项

  1. 在网站footer添加必要链接: - "Do Not Sell or Share My Personal Information" - "Privacy Policy"

  2. 实现opt-out功能

function handleCCPAOptOut() {
  gtag('consent', 'update', {
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied'
  });
  // 保存用户偏好到localStorage或cookie
  localStorage.setItem('ccpa_opt_out', 'true');
}
  1. Global Privacy Control (GPC)支持
// 检测GPC信号
if (navigator.globalPrivacyControl) {
  handleCCPAOptOut();
}

5.3 服务器端追踪是否值得?

考量因素 您的情况 建议
用户地区 70%美国 非必须(CCPA不强制要求)
数据丢失影响 取决于广告规模 月广告支出>$5K再考虑
技术资源 需评估 有专职工程师再实施
成本 $90-300/月+维护 后期优化项目

建议优先级:先完成客户端追踪 + Consent Mode,数据稳定后再评估服务器端追踪ROI。


第六部分:测试和调试

6.1 GTM预览模式测试

启动预览模式: 1. GTM界面右上角点击"Preview" 2. 输入网站URL → Connect 3. 网站在新窗口打开,右下角显示"Connected"

核心检查项: - ✅ 每个页面触发5个基础事件:Consent Initialization → Initialization → Container Loaded → DOM Ready → Window Loaded - ✅ Conversion Linker标签在所有页面触发 - ✅ 执行注册/购买操作后,对应转化标签显示"Fired"

检查dataLayer数据: 1. 在预览面板左侧选择事件(如sign_up) 2. 点击"Data Layer"标签 3. 验证推送的数据格式和值是否正确

6.2 Google Ads转化状态验证

操作路径:Google Ads → Goals → Conversions → Summary

状态说明: | 状态 | 含义 | 处理方法 | |------|------|---------| | Active (绿色) | 正常工作 | 无需处理 | | No recent conversions | 7天内无转化 | 检查触发条件或等待真实转化 | | Unverified | 标签未验证 | 使用Tag Assistant验证代码安装 | | Tag inactive | 7天未检测到标签 | 检查GTM是否发布,代码是否正确 |

增强转化验证(48小时后可查看): Goals → Summary → 选择转化操作 → Diagnostics

6.3 Chrome开发者工具验证

检查dataLayer推送

// 在浏览器Console中执行
console.log(dataLayer);

检查网络请求: 1. F12打开开发者工具 → Network标签 2. 执行转化操作 3. 搜索"google" 4. 查找发送到googleadservices.com/pagead/conversion/的请求 5. 确认Payload中包含正确的转化数据

6.4 常见问题排查

问题现象 可能原因 解决方案
转化数量为0 GTM未发布 点击Submit发布更改
转化数延迟 正常现象 等待24-48小时
转化值为0 dataLayer未推送value 检查前端代码
增强转化不工作 用户数据未正确传递 检查user_data对象格式
预览模式无法连接 第三方Cookie被阻止 浏览器设置允许Cookie

完整实施Checking List

阶段一:基础设施 ✓

  • [ ] 创建GTM账户和容器
  • [ ] 获取GTM容器ID (GTM-XXXXXXX)
  • [ ] 在所有页面<head>安装GTM第一段代码
  • [ ] 在所有页面<body>开头安装GTM第二段代码
  • [ ] 初始化dataLayer(在GTM代码之前)
  • [ ] 配置Consent Mode默认状态

阶段二:Google Ads转化 ✓

  • [ ] 创建Google Ads转化操作:注册
  • [ ] 创建Google Ads转化操作:试用开始
  • [ ] 创建Google Ads转化操作:购买
  • [ ] 记录所有Conversion ID和Conversion Label
  • [ ] GTM创建Conversion Linker标签(All Pages触发)
  • [ ] GTM创建注册转化追踪标签
  • [ ] GTM创建购买转化追踪标签
  • [ ] 开启Enhanced Conversions for Web
  • [ ] 配置User-Provided Data变量

阶段三:GA4集成 ✓

  • [ ] 关联GA4与Google Ads账户
  • [ ] 确认Auto-tagging已开启
  • [ ] 将关键事件标记为Key Event
  • [ ] 创建再营销受众(购物车放弃者、高活跃用户)
  • [ ] 配置跨域追踪(如有多域名)

阶段四:前端埋点 ✓

  • [ ] 实现注册成功dataLayer推送
  • [ ] 实现登录成功dataLayer推送
  • [ ] 实现AI生成事件dataLayer推送
  • [ ] 实现Stripe支付成功页面追踪
  • [ ] 在Checkout创建时传递gaClientId到metadata

阶段五:后端集成(可选)✓

  • [ ] 配置Stripe Webhook endpoint
  • [ ] 实现checkout.session.completed处理
  • [ ] 配置GA4 Measurement Protocol
  • [ ] 获取GA4 API Secret

阶段六:合规配置 ✓

  • [ ] 实现Consent Mode v2
  • [ ] 配置区域特定的默认同意状态
  • [ ] 添加CCPA "Do Not Sell"链接
  • [ ] 实现GPC信号检测
  • [ ] 更新隐私政策

阶段七:测试验证 ✓

  • [ ] GTM预览模式测试所有标签
  • [ ] 模拟完整转化流程测试
  • [ ] Google Ads转化状态检查
  • [ ] 48小时后检查增强转化诊断
  • [ ] 验证数据在GA4报告中正确显示

阶段八:发布上线 ✓

  • [ ] GTM提交发布(添加版本描述)
  • [ ] 监控24-48小时转化数据
  • [ ] 比对GA4和Google Ads数据差异
  • [ ] 建立定期审计机制

结语与后续优化

本SOP涵盖了AI工具SaaS网站Google Ads转化追踪的完整实施流程。随着业务发展,建议持续优化以下方向:

短期优化(1-3个月): - 根据实际转化数据调整转化窗口设置 - 优化转化值设置,反映真实客户价值 - 细化受众分层,提升再营销效果

中期优化(3-6个月): - 评估服务器端追踪ROI - 实施LTV(客户终身价值)追踪 - 建立自动化数据质量监控

长期优化(6个月+): - 探索离线转化导入(订阅续费、升级) - 实施归因分析优化广告组合 - 关注Privacy Sandbox等隐私技术演进

通过系统性地实施和优化转化追踪,您将获得更准确的广告投放数据,为Smart Bidding提供高质量信号,最终实现更低的获客成本和更高的广告投资回报。探索这个 Next.js 项目中与 Google Analytics、GTM、广告追踪相关的所有配置和代码。需要找到:

  1. 现有的分析/追踪配置(analytics, gtm, google ads 等)
  2. 布局文件中的 script 标签
  3. 环境变量配置中与追踪相关的变量
  4. 支付成功页面的位置
  5. 用户注册/登录相关的代码位置
  6. 任何现有的 dataLayer 推送代码

请列出所有相关文件路径和关键代码片段。

本文档为站内渲染。原始文件本地路径:saas/source/knowledge-world/Knowledge-World-项目-文档-ads-tracking-ads-c8d76c.md(仅本地保留,不入库不部署)