Google Ads 转化数据上报流程
从引入 Google tag、配置 Ads 转化目标,到上报固定或动态转化价值的完整流程。
文章目录
本文记录 Google Ads 网站转化数据的上报流程,包括复用 GA4 的 Google tag、在 Google Ads 后台创建转化目标,以及在注册、支付等业务节点触发转化事件。
一、准备必要参数
开始接入前,需要准备以下参数:
| 参数 | 示例 | 用途 |
|---|---|---|
| GA4 衡量 ID | G-XXXXXXXXXX | 将网站数据发送到 GA4 |
| Google Ads ID | AW-XXXXXXXXXX | 将 Google tag 与 Ads 账号关联 |
| 转化标签 | XXXXXXXXXXXXXX | 标识具体的注册、购买等转化操作 |
完整的 send_to 由 Ads ID 和转化标签组成,例如:
AW-XXXXXXXXXX/XXXXXXXXXXXXXX
这些示例值需要替换成 Google Ads 后台为当前项目生成的真实值。
二、引入 Google tag
如果网站已经使用 GA4,不需要重复加载脚本,只需在同一个 gtag 初始化流程中增加 Ads 配置:
const loadGoogleTag = () => {
const script = document.createElement('script')
script.src =
'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX'
script.async = true
script.onload = () => {
window.dataLayer = window.dataLayer || []
window.gtag = (...args: any[]) => {
window.dataLayer.push(args)
}
window.gtag('set', 'linker', {
domains: ['example.com', 'app.example.com']
})
window.gtag('js', new Date())
window.gtag('config', 'G-XXXXXXXXXX')
window.gtag('event', 'conversion_event_website_visit', {
event_timeout: 2000
})
// 将 Google tag 与 Ads 账号关联
window.gtag('config', 'AW-XXXXXXXXXX')
}
document.head.appendChild(script)
}
这里最容易遗漏的是:即使脚本地址使用的是 GA4 衡量 ID,也仍然需要执行下面这行代码:
gtag('config', 'AW-XXXXXXXXXX')
否则页面虽然加载了 GA4,Google Ads 的转化配置却没有完成初始化。
如果站点跨多个域名完成一次转化,可以通过 linker.domains 配置参与流程的域名。所有域名都需要正确安装 Google tag。
三、在 Google Ads 后台创建转化操作
进入 Google Ads 后台,在“目标 → 转化”中创建网站转化操作,例如“注册成功”或“购买成功”。配置时重点确认:
| 配置项 | 说明 |
|---|---|
| 目标和操作优化 | 根据业务需要设置为主要或次要操作 |
| 价值 | 可使用后台默认值,也可以由前端动态传入 |
| 计数方式 | 购买通常记录每一次,注册等线索通常记录一次 |
| 归因设置 | 根据投放和分析需求选择归因模型与转化时间范围 |
创建完成后,在事件代码段中找到 send_to。它包含 Ads ID 和这个转化操作独有的标签:
gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/XXXXXXXXXXXXXX'
})
不同转化操作的标签不同,不要把注册、购买等事件的 send_to 混用。
四、上报使用默认价值的转化
如果转化价值已经在 Ads 后台固定配置,只需在用户完成目标动作后发送事件:
<script>
function gtag_report_conversion(url) {
const callback = function () {
if (typeof url !== 'undefined') {
window.location = url
}
}
gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/XXXXXXXXXXXXXX',
event_callback: callback,
event_timeout: 2000
})
return false
}
</script>
在需要跳转的链接或按钮上调用:
<a href="/success" onclick="return gtag_report_conversion('/success')">
完成注册
</a>
event_callback 可以尽量确保事件发送后再跳转;event_timeout 则可以避免统计请求异常时页面一直无法跳转。
对于 React、Vue 等单页应用,通常不需要通过回调修改 window.location,直接在业务成功回调中触发事件即可:
window.gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/XXXXXXXXXXXXXX'
})
五、上报动态转化价值
订单金额不固定时,可以在事件中手动传入价值、币种和交易 ID:
window.gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/XXXXXXXXXXXXXX',
transaction_id,
value: value / 100,
currency: 'USD'
})
示例中的 value 使用“分”为单位存储,所以发送前除以 100 转换为美元。如果业务数据本身已经是以元或美元为单位,就不应再次除以 100。
各字段含义如下:
| 字段 | 说明 |
|---|---|
send_to | Ads ID 与转化标签 |
transaction_id | 唯一订单号,用于降低同一交易被重复统计的风险 |
value | 转化金额,必须与 currency 的货币单位一致 |
currency | ISO 4217 货币代码,例如 USD、CNY |
购买事件应在支付确认成功后触发,而不是在用户点击“支付”按钮时触发。刷新成功页、重复回调或组件重复渲染都可能造成重复上报,因此还应在业务侧控制事件只发送一次,并始终传入稳定且唯一的 transaction_id。
六、完整业务示例
下面以支付成功为例封装上报函数:
type ReportPurchaseParams = {
orderId: string
amountInCents: number
}
export function reportGoogleAdsPurchase({
orderId,
amountInCents
}: ReportPurchaseParams) {
if (typeof window === 'undefined' || !window.gtag) return
window.gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/XXXXXXXXXXXXXX',
transaction_id: orderId,
value: amountInCents / 100,
currency: 'USD'
})
}
在服务端确认支付成功、前端拿到成功结果后调用:
reportGoogleAdsPurchase({
orderId: paymentResult.orderId,
amountInCents: paymentResult.amount
})
金额和订单号应以可信的支付结果为准,不要直接使用用户可修改的表单数据。
七、验证上报结果
上线前建议按以下顺序检查:
- 打开浏览器开发者工具,确认
gtag/js脚本加载成功。 - 确认初始化阶段同时执行了 GA4 和 Ads 的
config。 - 完成一次测试注册或测试支付,检查是否触发
conversion事件。 - 核对请求中的
send_to、value、currency和transaction_id。 - 使用 Tag Assistant 检查标签是否触发,以及页面是否存在重复标签。
- 等待 Google Ads 后台处理数据,再检查转化操作的诊断和记录状态。
Google Ads 后台的数据不是实时出现的。浏览器中成功发送请求,只能说明前端触发正常;最终还需要结合 Ads 后台的转化诊断确认整条链路。
八、常见问题
已经接入 GA4,为什么 Ads 没有数据?
通常是只执行了 gtag('config', 'G-...'),遗漏了 Ads 的 gtag('config', 'AW-...'),或者转化事件中的 send_to 使用了错误的转化标签。
为什么转化价值不正确?
检查业务金额的单位。后端常用整数“分”存储金额,而 Ads 接收的是对应币种的标准单位;同时确认 currency 与实际收款币种一致。
为什么出现重复转化?
常见原因包括成功页刷新、支付回调重复执行、组件重复挂载,以及点击事件和成功回调同时上报。购买转化应携带唯一的 transaction_id,并在业务逻辑中保证只触发一次。
事件应该在点击按钮时还是成功后发送?
注册、购买等结果型转化应在业务确认成功后发送。只有“点击咨询”等本身以点击为目标的转化,才适合直接绑定在点击事件上。