---
title: "谷歌分析"
description: "在 Nuxt 应用中使用 Google Analytics。"
canonical_url: "https://nuxt-scripts.zhcndoc.com/scripts/google-analytics"
last_updated: "2026-05-22T14:11:54.277Z"
---
[谷歌分析](https://marketingplatform.google.com/about/analytics/) 是适用于 Nuxt 应用的分析解决方案。
它提供了详尽的洞察,帮助你了解网站的性能表现、用户如何与你的内容互动,以及他们如何浏览你的网站。
### 使用方法
为了与 Google Analytics API 交互,推荐使用脚本的 [proxy](/docs/guides/key-concepts#understanding-proxied-functions)。
```ts
const { proxy } = useScriptGoogleAnalytics()
proxy.gtag('event', 'page_view')
```
proxy 暴露了 `gtag` 和 `dataLayer` 属性,你应当按照 Google Analytics 的最佳实践使用它们。
## 同意模式
Google Analytics 原生支持 [GCMv2 同意状态](https://developers.google.com/tag-platform/security/guides/consent)。使用 `defaultConsent` 设置默认值(会在 `gtag('js', ...)` 之前触发 `gtag('consent', 'default', state)`),并在运行时调用 `consent.update()` 来切换各项类别。对于需要在运行时动态推导默认值(例如在触发前等待地区/CMS 解析完成)的场景,可在客户端调用 `consent.default()`。
在 [StackBlitz](https://stackblitz.com) 上试用实时的 [区域同意示例](https://stackblitz.com/github/nuxt/scripts/tree/main/examples/regional-consent)。
```vue
```
`consent.update()` 和 `consent.default()` 都接受任何 `Partial`;缺失的类别会保持当前值不变。两种方法都会根据标准的 GCMv2 模式验证输入,并在出现未知键或非 `granted`/`denied` 值时通过 `consola` 发出警告。对于除同意默认值之外、在 `gtag('js')` 之前进行的设置,`onBeforeGtagStart` 仍然可用作通用的逃生通道。
### 按地区的默认值
向 `defaultConsent` 传入一个数组,即可为每个条目分别触发一次 `gtag('consent','default', state)`。这与 Google 的 [特定地区同意模式](https://developers.google.com/tag-platform/security/guides/consent?consentmode=advanced#region-specific-behavior) 一致:更具体的地区(例如 `US-CA`)会覆盖更宽泛的地区(`US`);没有 `region` 的条目则是不带范围的全局回退值。
```vue
```
模块会按输入顺序原样转发每个条目。区域作用域默认值与无作用域默认值之间的优先级由运行时的 gtag 负责处理,而不是由顺序决定。
## 客户/消费者 ID 跟踪
对于需要在主追踪之外进行客户特定数据追踪的电商或多租户应用:
```vue [ProductPage.vue]
```
## 自定义维度和用户属性
```ts
const { proxy } = useScriptGoogleAnalytics()
// 用户属性(跨会话持久化)
proxy.gtag('set', 'user_properties', {
user_tier: 'premium',
account_type: 'business'
})
// 事件中的自定义维度(需在 GA4 管理后台 > 自定义定义中注册)
proxy.gtag('event', 'purchase', {
transaction_id: 'T12345',
value: 99.99,
payment_method: 'credit_card', // 自定义维度
discount_code: 'SAVE10' // 自定义维度
})
// 所有未来事件的默认参数
proxy.gtag('set', { country: 'US', currency: 'USD' })
```
## 手动页面浏览追踪(单页应用)
GA4 默认自动追踪页面浏览。若需禁用并手动追踪:
```ts
const { proxy } = useScriptGoogleAnalytics()
// 禁用自动页面浏览
proxy.gtag('config', 'G-XXXXXXXX', { send_page_view: false })
// 路由变化时追踪
const router = useRouter()
router.afterEach((to) => {
proxy.gtag('event', 'page_view', { page_path: to.fullPath })
})
```
## 代理排队机制
proxy 会将所有 `gtag` 调用排队,直到脚本加载完成。调用是 SSR 安全的,对广告屏蔽器友好,并且保持调用顺序。
```ts
const { proxy, onLoaded } = useScriptGoogleAnalytics()
// 发后即忘(排队直到 GA 加载)
proxy.gtag('event', 'cta_click', { button_id: 'hero-signup' })
// 需要返回值?等待加载完成
onLoaded(({ gtag }) => {
gtag('get', 'G-XXXXXXXX', 'client_id', id => console.log(id))
})
```
## 常见事件模式
```ts
const { proxy } = useScriptGoogleAnalytics()
// 电商
proxy.gtag('event', 'purchase', {
transaction_id: 'T_12345',
value: 59.98,
currency: 'USD',
items: [{ item_id: 'SKU_12345', item_name: 'Widget', price: 29.99, quantity: 2 }]
})
// 互动
proxy.gtag('event', 'login', { method: 'Google' })
proxy.gtag('event', 'search', { search_term: 'nuxt scripts' })
// 自定义
proxy.gtag('event', 'feature_used', { feature_name: 'dark_mode' })
```
## 调试
通过配置或 URL 参数 `?debug_mode=true` 启用调试模式:
```ts
proxy.gtag('config', 'G-XXXXXXXX', { debug_mode: true })
```
在 GA4 查看事件:**管理 > DebugView**。安装 [GA Debugger 扩展](https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna) 以在控制台中查看日志。
关于同意模式设置,请参阅 [同意指南](/docs/guides/consent)。