KKCE(快快测)

KKCE

一行 JS · 30 秒接入 · 数据可私有化

网站统计让每一次访问都有答案

自动采集 PV、UV、会话与来源渠道,结合无埋点点击与自定义事件,实时还原用户在你站点上的每一步行为。零依赖、可自建、口径透明,核心看板开箱即用。

  • 免费不限流量
  • 支持 SPA 路由
  • UTM 渠道归因
  • 隐私合规可控
待上线···

以上指标为产品界面示例数据,用于展示统计后台的呈现效果。

看得见的每一次访问

从实时访客到长期趋势,四张核心看板覆盖运营日常要盯的全部指标。

实时

实时访客监测

最近 5 分钟活跃 UV 一目了然,包含当前所在页面、进入来源、所在地域与停留进度,新访客一眼识别。

  • 在线人数秒级刷新
  • 当前受访页面排行
  • 实时事件流水
归因

来源渠道分析

按会话首次触点归因:直接访问、自然搜索、社交媒体、外部引荐与 UTM 投放,SDK 自动解析来源与媒介。

  • 搜索引擎与关键词
  • UTM 投放链路
  • 外链跳出表现
内容

受访页面分析

PV、UV、入口页、退出页与平均停留时长逐页呈现,识别真正留住用户的内容与需要优化的页面。

  • 入口页 / 退出页
  • 平均停留时长
  • 单页转发路径
人群

访客画像

设备类型、浏览器、操作系统、分辨率、语言与时区全量采集,新访客与回头客分布清晰可见。

  • 设备 / 浏览器 / OS
  • 分辨率与语言
  • 新老访客占比

一套 SDK,覆盖站点分析全链路

采集、上报、存储、分析解耦设计,既能立刻看数据,也能完全掌控数据。

30 秒极速接入

引入一个 JS 文件并完成 init,自动开始采集页面浏览、路由切换与站外链接点击,无需改一行业务代码。

PV / UV / 会话三重口径

页面浏览全量计数,访客匿名 UUID 去重,会话按 30 分钟无操作自动切分,指标口径公开可核对。

无埋点 + 自定义埋点

给按钮加一个 data-track 就完成点击采集;复杂业务可用 track() 携带动态属性,后台自行聚合。

会员身份打通

登录成功后调用 setUser 绑定业务用户 ID,后续所有事件自动带上该身份,可回溯完整行为轨迹。

可靠上报不丢数据

本地队列批量防抖上报,失败自动塞回队首重试;页面卸载用 sendBeacon 兜底,离线数据不丢失。

数据可私有化留存

配置 endpoint 即可上报到自有后端入库,也支持自定义 transport 加签转发,数据不出自己的机房。

三步完成接入

复制代码片段粘贴到你的页面,刷新后即可在后台看到第一条 PV。

01引入 SDK在页面引入 tracker.js
02初始化配置 appId 与上报地址
03按需埋点给按钮加属性或调用 track()
<!-- 第 1 步:引入 SDK -->
<script src="https://cdn.yourdomain.com/sdk/tracker.js"></script>

<!-- 第 2 步:初始化 -->
<script>
  WebStats.init({
    appId: 'my-site',                                  // 给你的站点起个名字
    endpoint: 'https://api.yourdomain.com/collect'     // 后端上报地址
  });
</script>

<!-- 第 3 步:给关心的按钮加埋点(可选) -->
<button data-track data-track-name="加入购物车" data-track-goods="机械键盘">加入购物车</button>
// main.js —— 在路由初始化之前加载 SDK
WebStats.init({
  appId: 'vue-app',
  endpoint: 'https://api.example.com/collect'
});

createApp(App).use(router).mount('#app');

// 组件内埋点
const addToCart = (product) => {
  WebStats.track('add_to_cart', { goods: product.name, price: product.price });
};
// index.js
WebStats.init({
  appId: 'react-app',
  endpoint: 'https://api.example.com/collect'
});

createRoot(document.getElementById('root')).render(<BrowserRouter><App /></BrowserRouter>);

// 组件内埋点
function ProductCard(props) {
  const handleAddCart = () => {
    WebStats.track('add_to_cart', { goods: props.product.name, price: props.product.price });
  };
  return <button onClick={handleAddCart}>加入购物车</button>;
}
// Node.js / Express 最小实现:收数据 + 入库即可
app.use(express.json({ limit: '1mb' }));

app.post('/collect', (req, res) => {
  const eventBody = req.body;
  const appId = eventBody.appId;
  const events = eventBody.events;
  if (!Array.isArray(events)) return res.status(400).json({ error: 'events must be array' });

  events.forEach(e => {
    db.query(
      'INSERT INTO events (eid, app_id, type, name, props, uid, sid, ts) VALUES ($1,$2,$3,$4,$5,$6,$7,$8)',
      [e.eid, appId, e.type, e.name, JSON.stringify(e.props), e.uid, e.sid, new Date(e.ts)]
    );
  });

  // 返回 2xx 即视为上报成功,非 2xx SDK 会自动重试
  res.json({ ok: true, received: events.length });
});

上报优先级:自定义 transport > endpoint(标准 HTTP) > 本地 localStorage(演示模式)。

三种埋点方式,按场景选用

简单点击走属性,复杂行为走 API,其余交给 SDK 自动采集。

方式适用场景你要做的事成本
自动采集 页面浏览、hash / history 路由切换、前进后退、站外链接点击 什么都不用做 零成本
data-track 无埋点 按钮 / 链接点击,属性值是固定字符串 在元素上加 data-track、data-track-name、data-track-* 改 HTML
WebStats.track() 需要动态数据(商品 ID、订单金额)或非点击行为(表单提交、AJAX 回调、滚动、定时器) 在 JS 中调用 track(事件名, 属性对象) 写少量 JS

指标口径全部公开

不玩文字游戏,每个数字怎么算出来的,都写在下面。

PV 浏览量

时间范围内 page_view 事件条数;同一访客刷新或重复进入会重复计数。

UV 独立访客

时间范围内不同 uid 的数量;匿名标识存于本地,清缓存或无痕浏览会被视为新访客。

会话 Session

不同 sid 的数量;30 分钟无操作或关闭浏览器后再访问即新会话。

事件总数

click 与 custom 事件条数之和,不含页面浏览事件。

人均浏览页数

PV ÷ UV,衡量内容粘性与站内流转效率。

平均访问时长

会话结束时间减开始时间的均值,心跳 5 秒并在页面卸载时更新。

跳出率

会话内 PV 恰好为 1 的会话占比。

实时在线

最近 5 分钟产生过事件的去重 UV。

轻量、透明、可掌控

不贩卖概念,只解决“数据看不到”和“数据在别人手里”两件事。

01

零依赖单文件

原生 JavaScript 编写,无第三方库、无需构建工具,异步加载不阻塞渲染,点击采集采用单个委托监听。

02

采集与发送解耦

事件先进本地队列,批量上报并做失败重试;从调试切换到生产只改一个 endpoint 参数。

03

隐私优先设计

默认生成匿名 UUID,不含任何个人信息;不调用 init 即完全不采集,便于通过隐私合规审查。

04

扩展留有余地

自定义 transport 可加签名、走网关或转发第三方分析平台;服务端可补 IP 归属地、反爬过滤与频控。

常见问题

会影响网站性能吗?

SDK 为单文件零依赖,建议异步引入。点击采集使用单个捕获阶段事件委托,心跳 5 秒一次,上报走本地队列批量发送,对首屏几乎无影响。

单页应用(SPA)需要手动上报 PV 吗?

不需要。SDK 已内置 history.pushState / replaceState 的 hook,并监听 hashchange 与 popstate,路由切换会自动产生 PV。

UV 是怎么识别的?换设备还能识别同一人吗?

默认使用本地存储的匿名 UUID 作为访客标识。生产环境可配合 Cookie 与服务端指纹兜底;对登录用户调用 setUser 绑定会员 ID,即可跨设备打通行为轨迹。

数据存在哪里?可以放到自己的服务器上吗?

可以。不配置上报地址时数据只写本地,便于调试;配置 endpoint 后 SDK 通过 sendBeacon 或 fetch 批量 POST 到你自己的 /collect 接口,后端入库即可。

能统计地域来源吗?

纯前端无法获取真实 IP 归属地,需要在服务端根据上报 IP 做 GeoIP 解析,这也是推荐自建上报接口的原因之一。

如何验证埋点是否生效?

初始化时传入 debug: true,控制台会打印每条上报事件;也可在 DevTools 的 Network 面板搜索上报地址,查看请求体中的 events 数组。

COMING SOON

敬请期待

网站统计控制台正在紧张开发中。上线后,以上能力将全部开放,接入方式不变,数据可无缝迁移。

  • 实时访客看板
  • 渠道与 UTM 归因
  • 自定义事件分析
  • 报表导出与 API
🐧
QQ
交流群
🐧

加入官方QQ群

扫码/点击加入

群号:591111150
⬆️
返回
顶部