Clarity

在你的 Nuxt 应用中使用 Clarity。

Clarity 是微软提供的一款屏幕录制和热图工具,帮助你了解用户如何与网站交互。

Nuxt Scripts 提供了一个注册脚本组合式函数 useScriptClarity,让你可以轻松地在 Nuxt 应用中集成 Clarity。

在 Nuxt 应用中全局加载 Clarity 的最简单方式是通过 Nuxt 配置。或者你也可以直接使用 useScriptClarity 组合式函数。

全局加载

如果你不打算发送自定义事件,可以使用 环境覆盖 来在开发环境中禁用脚本。

export default defineNuxtConfig({
  scripts: {
    registry: {
      clarity: {
        id: 'YOUR_ID'
      }
    }
  }
})

useScriptClarity

useScriptClarity 组合式函数允许你精细控制 Clarity 在你的网站上何时及如何加载。

const { proxy } = useScriptClarity({
  id: 'YOUR_ID'
})
// 示例
proxy.clarity("identify", "custom-id", "custom-session-id", "custom-page-id", "friendly-name")

请参阅 注册脚本 指南以了解更多高级用法。

ClarityApi

type ClarityFunctions = ((fn: 'start', options: { content: boolean, cookies: string[], dob: number, expire: number, projectId: string, upload: string }) => void)
  & ((fn: 'identify', id: string, session?: string, page?: string, userHint?: string) => Promise<{
  id: string
  session: string
  page: string
  userHint: string
}>)
  & ((fn: 'consent') => void)
  & ((fn: 'set', key: any, value: any) => void)
  & ((fn: 'event', value: any) => void)
  & ((fn: 'upgrade', upgradeReason: any) => void)
  & ((fn: string, ...args: any[]) => void)

export interface ClarityApi {
  clarity: ClarityFunctions & {
    q: any[]
    v: string
  }
}

配置 Schema

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

export const ClarityOptions = object({
  /**
   * Clarity 令牌。
   */
  id: pipe(string(), minLength(10)),
})

First-Party 模式

该脚本支持 First-Party 模式,此模式通过你的域名路由所有流量,以提升隐私性及绕过广告拦截。

当通过 scripts.firstParty: true 全局启用时,该脚本将:

  • 从你的域名加载,而非 www.clarity.ms
  • 通过你的服务器路由数据/事件收集(d.clarity.ms, e.clarity.ms
  • 对 IP 地址、语言和硬件指纹(canvas、webgl、浏览器版本)进行匿名化处理
  • 保留 User-Agent、屏幕分辨率和时区,以便生成准确的热图和设备过滤
nuxt.config.ts
export default defineNuxtConfig({
  scripts: {
    firstParty: true,
    registry: {
      clarity: { id: 'YOUR_ID' }
    }
  }
})

如果想针对特定脚本选择退出:

useScriptClarity({
  id: 'YOUR_ID',
  scriptOptions: {
    firstParty: false // 直接从微软加载
  }
})

示例

仅在生产环境使用 Clarity,同时使用 clarity 发送转化事件。

<script setup lang="ts">
const { proxy } = useScriptClarity()

// 在开发环境和 SSR 中无操作
// 在生产环境和客户端正常工作
function sendConversion() {
  proxy.clarity('event', 'conversion')
}
</script>

<template>
  <div>
    <button @click="sendConversion">
      发送转化事件
    </button>
  </div>
</template>