← 全部文章

Google Ads 转化数据上报流程

从引入 Google tag、配置 Ads 转化目标,到上报固定或动态转化价值的完整流程。

文章目录

本文记录 Google Ads 网站转化数据的上报流程,包括复用 GA4 的 Google tag、在 Google Ads 后台创建转化目标,以及在注册、支付等业务节点触发转化事件。

一、准备必要参数

开始接入前,需要准备以下参数:

参数示例用途
GA4 衡量 IDG-XXXXXXXXXX将网站数据发送到 GA4
Google Ads IDAW-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_toAds ID 与转化标签
transaction_id唯一订单号,用于降低同一交易被重复统计的风险
value转化金额,必须与 currency 的货币单位一致
currencyISO 4217 货币代码,例如 USDCNY

购买事件应在支付确认成功后触发,而不是在用户点击“支付”按钮时触发。刷新成功页、重复回调或组件重复渲染都可能造成重复上报,因此还应在业务侧控制事件只发送一次,并始终传入稳定且唯一的 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
})

金额和订单号应以可信的支付结果为准,不要直接使用用户可修改的表单数据。

七、验证上报结果

上线前建议按以下顺序检查:

  1. 打开浏览器开发者工具,确认 gtag/js 脚本加载成功。
  2. 确认初始化阶段同时执行了 GA4 和 Ads 的 config
  3. 完成一次测试注册或测试支付,检查是否触发 conversion 事件。
  4. 核对请求中的 send_tovaluecurrencytransaction_id
  5. 使用 Tag Assistant 检查标签是否触发,以及页面是否存在重复标签。
  6. 等待 Google Ads 后台处理数据,再检查转化操作的诊断和记录状态。

Google Ads 后台的数据不是实时出现的。浏览器中成功发送请求,只能说明前端触发正常;最终还需要结合 Ads 后台的转化诊断确认整条链路。

八、常见问题

已经接入 GA4,为什么 Ads 没有数据?

通常是只执行了 gtag('config', 'G-...'),遗漏了 Ads 的 gtag('config', 'AW-...'),或者转化事件中的 send_to 使用了错误的转化标签。

为什么转化价值不正确?

检查业务金额的单位。后端常用整数“分”存储金额,而 Ads 接收的是对应币种的标准单位;同时确认 currency 与实际收款币种一致。

为什么出现重复转化?

常见原因包括成功页刷新、支付回调重复执行、组件重复挂载,以及点击事件和成功回调同时上报。购买转化应携带唯一的 transaction_id,并在业务逻辑中保证只触发一次。

事件应该在点击按钮时还是成功后发送?

注册、购买等结果型转化应在业务确认成功后发送。只有“点击咨询”等本身以点击为目标的转化,才适合直接绑定在点击事件上。

搜索文章

输入关键词,搜索所有文章。