@reglow/track · v0.1

数据埋点,从第一行代码开始

模板已接入 @reglow/track:零运行时依赖,自动采集页面浏览、点击、曝光与滚动深度,同时支持搜索、收藏、评分等业务事件。上报链路可替换为你自己的采集服务。

零运行时依赖SSR 安全隐私友好批量上报

安装

npm install @reglow/track

通过 app/plugins/track.client.ts 初始化,仅在客户端执行。

示例接收端位于 server/api/v1/analytics/collect.post.ts。

生产环境请把 serverUrl 指向真实采集服务。

  1. 01

    采集

    自动监听 + 显式调用 track(),生成标准事件体。

  2. 02

    排队与重试

    批量入队,失败按指数退避重试,离线时保留。

  3. 03

    上报与聚合

    POST 到采集服务,服务端按事件码生成报表。

01 / capabilities

采集能力

默认开启自动采集,业务侧只需要声明元素标识;其余能力按需开启。

自动行为采集

点击、曝光与滚动深度默认可用,业务代码只需要补 data-track-id。

批量上报与重试

队列批量上报,失败按指数退避重试,离线时保留数据,恢复网络后补发。

会话与用户

默认 30 分钟无事件换新会话;登录后 identify 绑定用户,后续事件自动携带。

隐私友好

不采集输入框内容,提供 optOut / optIn,支持采样率控制自定义事件。

SSR 安全

服务端没有 window 时自动降级为内存适配器,导入与初始化都不会报错。

远程规则

支持后端下发可视化圈选规则,命中元素自动埋点,无需逐个改代码。

02 / events

事件模型

标准事件由 SDK 自动上报,业务事件通过 track / trackSearch / trackPreference 发送。

事件码触发时机关键字段
$page_view进入页面 / 路由切换page_key · page_version
$click点击带 data-track-id 的元素elem_id · elem_type · text · x / y
$exposure元素可见 ≥ 50% 且持续 ≥ 500mselem_id · ratio · visible_ms
$scroll滚动深度每增加 10%depth · depth_px · page_version
biz.search搜索提交与结果点击query · is_zero_result · clicked_rank · converted
biz.favorite收藏 / 点赞 / 分享 / 评分target_type · target_id · score

03 / demo

在线演示

点击左侧按钮会真实调用 SDK 方法;右侧展示本次演示上报的自定义事件。

加入购物车

track(add_to_cart)

搜索结果点击

trackSearch()

收藏商品

trackPreference(favorite)

提交评分

trackPreference(rate, 5)

自动采集的 $page_view / $click / $exposure / $scroll 可在浏览器 Network 中查看 /api/v1/analytics/collect 请求。

event log最近 4 条

暂无事件,点击左侧按钮开始。

04 / integrate

接入方式

模板已完成初始化;新建项目时按下面三步接入即可。

app/plugins/track.client.ts
// app/plugins/track.client.ts
import { createTrack } from '@reglow/track'

export default defineNuxtPlugin((nuxtApp) => {
  const tracker = createTrack({
    appId: 'reglow-nuxt-starter',
    autoPageView: false,
    autoTrack: { click: true, exposure: true, scroll: true }
  })

  nuxtApp.vueApp.use(tracker)

  const router = useRouter()
  tracker.pageView(router.currentRoute.value.fullPath)
  router.afterEach(to => tracker.pageView(to.fullPath))
})
app/pages/example.vue
<!-- Declarative: auto click tracking reads data-track-id -->
<button data-track-id="buy_btn" data-track-type="button">
  Buy now
</button>

<!-- Directive: writes data-track-* then hands off to auto tracking -->
<button v-track="{ id: 'submit_btn', type: 'button' }">
  Submit order
</button>
业务事件调用
const track = useTracker()

track?.track('add_to_cart', { sku: 'RG-2026', price: 299 })

track?.trackSearch('recycled fabric', {
  clickedRank: 1,
  converted: false
})

track?.trackPreference('favorite', {
  targetType: 'product',
  targetId: 1001
})

05 / guidelines

埋点规范建议

埋点是长期资产。统一命名与口径,比一次性的全量采集更重要。

  • 01

    elem_id 使用「模块_动作」命名,如 detail_add_cart,避免直接使用用户可见文案。

  • 02

    关键转化单独定义事件与属性,不要把多个业务含义塞进同一个事件。

  • 03

    曝光阈值按内容类型调整:列表卡片可降低,重要横幅可提高。

  • 04

    页面改版后 page_version 会变化,历史热点图不应与新版本混算。

  • 05

    上线前确认采样率与上报地址,避免把测试流量写入生产报表。