仔细结合本项目,告诉我如何增加谷歌广告投放的追踪代码呢,具体要修改啥文件,追踪那些东西呢, 结合本项目代码,给我写个详细的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 -->
<script>(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">
<script>
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 -->
<script>(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之前) -->
<script>
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 -->
<script>(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代码之前初始化。
初始化代码:
<script>
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 | 升级差价 |
创建注册转化操作示例:
- 点击"+ Create conversion action"
- 选择"Website"
- 输入网站URL,点击"Scan"
- 选择"Use Google Tag Manager"
- 配置转化详情:
- Conversion name:
SaaS_Registration- Goal and action optimization: Sign-up → Submit lead form - Value: Use the same value →10USD - Count: One(每用户仅计一次) - Click-through conversion window: 30天 - View-through conversion window: 7天 - Attribution model: Data-driven(推荐) - 点击"Done" → "Save and continue"
- 记录显示的 Conversion ID 和 Conversion 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端关联(推荐):
- GA4 → 左下角Admin → Property列 → Product links → Google Ads links
- 点击"Link"
- 点击"Choose Google Ads accounts" → 选择账户 → Confirm
- 配置选项: - ✅ Enable Personalized Advertising(启用个性化广告) - ✅ Enable Auto-Tagging(启用自动标记)
- 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_start、ai_generation等
3.3 将GA4转化导入Google Ads
操作路径:Google Ads → Tools → Measurement → Conversions → + New conversion action → Import
- 选择"Google Analytics 4 properties" → "Web"
- 选择要导入的GA4关键事件
- 配置转化设置(窗口、归因模型等)
- 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代码之前添加
<script>
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合规必做项
-
在网站footer添加必要链接: - "Do Not Sell or Share My Personal Information" - "Privacy Policy"
-
实现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');
}
- 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、广告追踪相关的所有配置和代码。需要找到:
- 现有的分析/追踪配置(analytics, gtm, google ads 等)
- 布局文件中的 script 标签
- 环境变量配置中与追踪相关的变量
- 支付成功页面的位置
- 用户注册/登录相关的代码位置
- 任何现有的 dataLayer 推送代码
请列出所有相关文件路径和关键代码片段。
本文档为站内渲染。原始文件本地路径:saas/source/knowledge-world/Knowledge-World-项目-文档-ads-tracking-ads-c8d76c.md(仅本地保留,不入库不部署)