跟踪

Google 标签管理器

在您的 Nuxt 应用程序中使用 Google 标签管理器。
此可组合组件是在与 Chrome Aurora 团队 合作的情况下使用 GoogleChromeLabs/third-party-capital 生成的。

Google 标签管理器 是一种标签管理系统,它允许您快速轻松地更新网站或移动应用程序上的标签和代码片段,例如用于流量分析和营销优化的代码片段。

您可能不需要在 Nuxt 脚本中使用 Google 标签管理器。GTM 的大小为 82kb,会减慢您的网站速度。Nuxt 脚本提供了许多功能,您可以轻松地在您的 Nuxt 应用程序中实现。如果您使用 GTM 来实现 Google 标签管理器,则可以使用 useScriptGoogleAnalytics 可组合组件代替。

全局加载

如果您想避免在开发过程中加载分析,您可以在 Nuxt 配置中使用 环境覆盖

export default defineNuxtConfig({
  scripts: {
    registry: {
      googleTagManager: {
        id: '<YOUR_ID>'
      }
    }
  }
})

useScriptGoogleTagManager

useScriptGoogleTagManager 可组合组件允许您对 Google 标签管理器在您网站上的加载时间和方式进行细粒度控制。

const { proxy } = useScriptGoogleTagManager({
  id: 'YOUR_ID' // id is only needed if you haven't configured globally
})
// example
proxy.dataLayer.push({ event: 'conversion', value: 1 })

请遵循 注册表脚本 指南以了解有关 proxy 的更多信息。

指南:发送页面事件

如果您想手动将页面事件发送到 Google 标签管理器,可以使用 useScriptEventPage 可组合组件的 proxy。此可组合组件将在页面标题更新后,在路由更改时触发提供的函数。

const { proxy } = useScriptGoogleTagManager({
  id: 'YOUR_ID' // id is only needed if you haven't configured globally
}) 

useScriptEventPage((title, path) => {
  // triggered on route change after title is updated
  proxy.dataLayer.push({ 
    event: 'pageview',
    title, 
    path 
  })
})

GoogleTagManagerApi

interface GoogleTagManagerApi {
  dataLayer: Record<string, any>[]
  google_tag_manager: GoogleTagManager
}

配置模式

您必须在首次设置脚本时提供选项。

export const GoogleTagManagerOptions = object({
  /**
   * The Google Tag Manager ID.
   */
  id: string(),
  /**
   * The name of the dataLayer you want to use
   * @default 'defaultGtm'
   */
  dataLayerName: optional(string())
})

示例

仅在生产环境中使用 Google 标签管理器,同时使用 dataLayer 发送转换事件。

<script setup lang="ts">
const { dataLayer } = useScriptGoogleTagManager()

// noop in development, ssr
// just works in production, client
dataLayer.push({ event: 'conversion-step', value: 1 })
function sendConversion() {
  dataLayer.push({ event: 'conversion', value: 1 })
}
</script>

<template>
  <div>
    <button @click="sendConversion">
      Send Conversion
    </button>
  </div>
</template>