TapCub 正式上线:统计、分析、客服一个平台免费用
数据分析

事件埋点怎么做:5 步从规划到上线

事件埋点记录页面浏览覆盖不到的行为:注册、点击、购买。本文分 5 步讲清:起步事件清单、命名规则、代码、自动采集的事件,以及上线前的核对清单。

陈屿 发布于 2026 年 11 月 3 日 6 分钟阅读 数据分析
事件埋点怎么做:5 步从规划到上线示例数据

页面浏览告诉你访客去了哪里,事件告诉你他们做了什么。本文分 5 步做事件埋点:带属性的起步事件清单、命名规则、代码、统计代码已经自动发送的事件,以及一轮核对,在有人基于数据做报表之前,把重复触发和缺失属性找出来。

读完你会知道

  • 一份 10 个事件的起步清单,每个都写明属性和要回答的问题
  • 代码、限制,以及不用自己加的自动事件
  • 上线核对流程,以及「钱从服务端发」的规矩

事件埋点是什么

事件埋点记录页面浏览(PV)覆盖不到的行为:注册、点击「开始试用」、播放视频、下单。每个事件有一个名称(发生了什么)和若干属性(之后要按它拆分的细节,比如套餐、价格)。页面浏览告诉你访客去了哪里,事件告诉你他们在那里做了什么。

各家工具对事件的分法大同小异。Google Analytics 4 分为自动收集的事件、增强型衡量事件、推荐事件和自定义事件(Google:关于事件)。实际工作中可以分得更简单:统计代码自己会发的事件,以及因为只有你知道它重要、所以要你在代码里加的事件。本文讲的是后一种,分 5 步做完。

第 1 步:先规划事件

先写清单,再写代码。清单很短:有哪些事件、什么时候触发、带哪些属性、回答什么问题。起步不超过 10 个;起步的埋点方案一屏能放下就够了。

下面这份起步清单适合 SaaS 网站。电商的话,把中间几行换成商品浏览、加购和结算步骤。

属性有两条规矩。只加之后真会按它拆报表的属性,「按钮颜色」一般不算。不要把访客输入的原文放进属性:既没法分组,还可能带个人信息。属性的更多说明见术语页事件属性。

事件触发时机属性回答的问题
signup_completed账号创建完成plan, source注册多少,从哪来?
email_verified点了验证链接—注册卡在哪一步?
project_created保存了头一个项目template新用户迈出头一步了吗?
invite_sent邀请了同事role账号在团队里扩散吗?
feature_used用了关键功能feature哪些功能带来留存?
checkout_started打开定价结算plan, interval多少人尝试付款?
purchase_completed付款确认(服务端)plan, value, currency, order_id收入和转化
subscription_cancelled确认取消(服务端)plan, reason流失及原因

起步不超过 10 个事件,有问题需要时再加。

第 2 步:给事件起名

事件名是数据里的键。报表、漏斗、目标都依赖 signup_completed 以后,再改名历史数据就断了。定一种规则并一直用:小写下划线、先对象后动作、已完成的动作用过去式。Segment 的规范对 track 调用推荐的也是「对象 + 动作」(Segment:Track 规范)。完整规则和例子见事件命名规范。

在 TapCub 里,登记进事件目录的名称必须是小写下划线格式、字母开头、不超过 40 个字符,不能以 $、_、tc_ 开头。网站、App、小程序上同一个行为用同一个名字,全端报表才能合在一起。

第 3 步:加代码

网站上记录一个事件只要一行:tapcub.track(name, props)。如果调用可能在统计脚本加载之前执行(比如页面顶部的内联脚本),就先放进队列,脚本加载后自动发送。

设计属性之前要知道几个限制:事件名超过 100 个字符会被截断;每个事件最多保留 20 个属性键;键超过 50 个字符、字符串值超过 200 个字符会被截断;只保存字符串、数字和布尔值,对象和数组会被丢掉。调用失败不会在页面上报错;同一访客在同一页面 1 秒内发出完全相同的事件,会被当成重复触发丢掉(见文档自定义事件)。

访客登录后,用你自己的用户 ID 调一次 identify。不调的话,事件一直挂在匿名访客上,没法跨设备追踪同一个人(见用户识别)。

events.jstrack 和 identify
// 脚本加载前:先放进队列
window.__tcq = window.__tcq || [];
window.__tcq.push(['track', 'signup_completed', { plan: 'pro', source: 'pricing' }]);

// 脚本加载后
tapcub.track('project_created', { template: 'blank' });
tapcub.track('invite_sent', { role: 'editor' });

// 访客登录后调一次
tapcub.identify('user_8f21', { plan: 'pro' });

第 4 步:用好自动事件

在给每个点击都加自定义事件之前,先看看统计代码已经发了什么。TapCub 的网页脚本会自动记录外链点击、文件下载、404 页面、Web Vitals 和站内搜索词。表单提交也能自动记录,但默认关闭,要在脚本属性里打开。以上这些可以用 data-auto-track="false" 一起关掉。

没有埋过的点击,可以交给自动采集(无埋点):它记录可点击的元素(不会记录密码框,也不会记录 data-tc-ignore 区域里的内容),生成候选事件。候选事件要有人在事件收件箱里接受并命名后才会成为正式事件,接受时会回填最近 90 天的数据(见帮助审核候选事件)。

第 5 步:在有人做报表之前核对

多数埋点问题,是上线几周后头一个做漏斗的人发现的。其实一个下午就能查出来:

  1. 打开实时视图,自己把每个事件触发一遍。
  2. 确认每个事件只到一次、名称对、属性都有值。
  3. 第二天拿计数和可信的数据比:注册数对数据库,购买数对支付平台。
  4. 在清单上给每个事件标「已核对」和日期。

示例里的列表就是头一次核对的典型样子:大部分正常,一个触发了两次,一个缺属性。

app.tapcub.com/analytics/events

上线当天核对

实时,最近 30 分钟
  • signup_completedplan, source14已核对
  • trial_startedplan9已核对
  • project_createdtemplate23已核对
  • invite_sentrole46重试时触发两次
  • checkout_startedplan, interval5已核对
  • purchase_completedplan, value, currency3缺 currency
  • __outboundurl(自动)61自动事件
示例数据

和钱有关的事件从服务端发

金额、退款和订阅变化应该从服务端上报。浏览器事件在「感谢页」加载时触发,这不等于付款成功,而且可能被拦截或重复触发。等支付平台确认后由后端发送收入事件,并带上订单号,方便查重(见文档服务端事件)。

常见错误

  • 什么都埋。一百个没人看的事件,会把真正有用的十个淹没。
  • 一个按钮一个事件。signup_button_header_clicked 和 signup_button_footer_clicked 应该合成一个事件,加一个 location 属性。
  • 悄悄改名。改显示名称,别改事件的键。
  • 属性里放自由文本。搜索词、留言、表单输入会把报表拆碎,还可能含个人信息。
  • 没有负责人。每个事件都要有人知道它为什么存在,并在它停了的时候发现。

常见问题

页面浏览和事件有什么区别?

页面浏览记录的是一个页面加载了。事件记录的是页面上的一个动作,比如点击、提交表单、购买,并带着描述它的属性。

应该埋多少个事件?

先埋 10 个以内、能对应到决策的:注册、激活、购买,以及中间的两三步。某个问题没有它答不了,再加。

埋点一定要开发来做吗?

自定义事件一般要,因为得有人加代码。自动事件和自动采集不需要写代码,只需要有人审核并命名采到的内容。

用户行为追踪是什么?

泛指记录访客在网站或 App 上做了什么:页面浏览、事件、会话,以及它们之间的路径。事件埋点是其中记录具体动作的那部分。

怎么确认事件埋对了?

打开实时视图自己触发每个事件,确认它只到一次、属性齐全,第二天再拿计数和数据库或支付平台对一下。

另见:制定埋点方案。

另见:用户行为跟踪、实施网站统计。

这篇文章对你有帮助吗?

我们会根据反馈修改和补充这篇内容。

陈屿

技术工程师

专注统计代码、SDK 与接口集成文档,从接入验证到问题排查,帮助开发者更顺畅地完成实施。

自定义事件、自动采集和服务端事件一处搞定

代码发送自定义事件,外链、下载、404 自动记录,自动采集的候选事件在收件箱里一键接受,和钱有关的走服务端事件。

看清数据,找到增长。

每一次点击,都有数据依据。装好一行代码,1 分钟看到第一批数据。

无需信用卡 · 统计与客服都有免费版 · 统计无 Cookie