网站统计文档

fmeng.js 适用于官网、H5、Web App 与单页应用。本文介绍安装、配置、自定义事件与验证方式。

快速开始

三步完成接入,全程不需要改造后端:

1
添加站点登录控制台,在「我的站点」中添加网站,填写名称与域名,得到站点专属的 SITE_KEY。
2
粘贴代码把安装代码放进网站所有页面的 </head> 之前。
3
检测安装在「站点设置 → 获取代码」中点「检测安装」,然后打开你的网站任意页面。

安装代码

把下面这行代码粘贴到网站所有页面的 </head> 之前,SITE_KEY 在「站点设置 → 获取代码」中查看。脚本以 defer 方式加载,不阻塞页面渲染。

经 Cloudflare 全球加速(t.t3j.com),适合访客主要在海外
html
<!-- 飞盟统计 -->
<script defer src="http://t.t3j.com/fmeng.js" data-site="SITE_KEY"></script>

可选属性

通过 script 标签上的 data-* 属性调整采集行为:

属性默认值说明
data-site必填站点 Key。
data-endpointfmeng.js 同源的 /collect上报地址。
data-auto"true"自动统计首屏与路由切换的浏览量;设为 "false" 后改为手动调用 fmeng.pageview()。
data-perf"true"采集页面性能;设为 "false" 关闭。
data-errors"true"采集未处理的 JS 错误与 Promise 拒绝;设为 "false" 关闭。
data-links"true"采集外链点击与文件下载;设为 "false" 关闭。
data-clicks"false"采集点击热力图原始点;默认关闭,设为 "true" 开启。
data-click-sample0.2点击热力图的采样率,取值 0 ~ 1。
data-local"false"允许在 localhost、127.0.0.1 与 file 页面上报,本地调试时使用。
data-extra—附加数据,JSON 对象,如 {"channel":"wechat"}:随每次页面浏览与自定义事件上报(最多 20 个键),在「事件分析 - 页面附加数据」查看;异步写法用 &extra=<URL 编码的 JSON>。
示例:开启点击热力图,采样 50%
html
<script
defer
src="http://t.t3j.com/fmeng.js"
data-site="SITE_KEY"
data-clicks="true"
data-click-sample="0.5"
></script>

异步加载与多站点

与百度统计 hm.js 相同的异步写法:先声明命令队列 _fmq,再动态插入脚本;站点 key 放在地址的 site 参数里(也支持 fmeng.js?SITE_KEY)。脚本加载前 push 的命令会在加载后执行,不用再判断 window.fmeng 是否存在:

html
<script>
var _fmq = _fmq || [];
(function () {
var fm = document.createElement('script');
fm.src = 'http://t.t3j.com/fmeng.js?site=SITE_KEY';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(fm, s);
})();
</script>
<script>
// 任何时候都可以 push:加载前排队,加载后立即执行
_fmq.push(['track', 'signup', { plan: 'pro' }]);
_fmq.push(['identify', 'user-10086']);
</script>

同一页面可以装载多个站点(如全站统计 + 栏目 / 作者各自的统计):每个站点插入一个脚本,数据分别进入各自的站点,互不影响。_fmq 与 window.fmeng 上的调用会发给页面上的全部站点;只发给某一个站点用 fmeng.get(SITE_KEY)。

html
<script>
var _fmq = _fmq || [];
function loadFmeng(siteKey) {
var fm = document.createElement('script');
fm.src = 'http://t.t3j.com/fmeng.js?site=' + siteKey;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(fm, s);
}
loadFmeng('SITE_KEY_ALL'); // 全站统计
var siteKeys = { zhangsan: 'SITE_KEY_A', lisi: 'SITE_KEY_B' };
if (window.pageAuthor && siteKeys[window.pageAuthor]) {
loadFmeng(siteKeys[window.pageAuthor]); // 作者个人统计
}
// 只给其中一个站点上报:
// window.fmeng && fmeng.get('SITE_KEY_A').track('like')
</script>

其他选项也可以写在地址参数里,与 data-* 属性一一对应,如 fmeng.js?site=SITE_KEY&clicks=true&click_sample=0.2。

单页应用

基于 History API 的单页应用(Vue Router、React Router 等)无需额外代码:fmeng.js 监听 pushState、replaceState 与 popstate,路由切换后自动记一次浏览;记录会推迟到下一个事件循环,这样多数框架已经更新了 document.title。

需要自己控制时,在 script 上加 data-auto="false" 关闭自动统计,在路由完成后调用 fmeng.pageview();同一地址连续调用只记一次。

javascript
// <script ... data-auto="false"> 关闭自动统计后手动上报
// Vue Router
router.afterEach(() => {
window.fmeng && window.fmeng.pageview()
})
// React Router
const location = useLocation()
useEffect(() => {
window.fmeng && window.fmeng.pageview()
}, [location])

自定义事件

在按钮点击、表单提交等位置调用 fmeng.track(事件名, 属性)。事件名最长 64 个字符;属性最多 20 个,非字符串的值会转成 JSON 字符串。

上报后可在「事件分析」中按属性拆分,也可以在「站点设置 → 转化目标」中设为目标,或作为漏斗的步骤。

javascript
// 事件名 + 可选属性。fmeng.js 以 defer 加载:脚本还没执行或被拦截时 window.fmeng 不存在,先判断再调用(此时的调用不会补报)
window.fmeng && window.fmeng.track('signup', { plan: 'pro' })
document.querySelector('#buy').addEventListener('click', () => {
window.fmeng && window.fmeng.track('purchase', { sku: 'A100', price: 199 })
})

用户标识

用户登录后调用 fmeng.identify(用户 ID),把访客与业务用户关联起来(跨设备识别);ID 最长 128 个字符,会保存在浏览器本地。退出登录时调用 fmeng.identify(null) 清除。

调用前已排队的事件仍归属旧身份。不要把手机号、邮箱等个人信息直接作为 ID。

javascript
// 登录成功后
window.fmeng && window.fmeng.identify('user-10086')
// 退出登录时
window.fmeng && window.fmeng.identify(null)

自动采集内容

安装后默认自动采集以下数据(点击热力图除外,需显式开启);停留时长与滚动深度随浏览量统计,其余可以单独关闭:

数据说明如何关闭
浏览量首屏加载与单页应用的路由切换,附带页面标题与来源。data-auto="false"
停留时长页面的可见时长;页面隐藏或离开时上报本段增量。随浏览量统计
滚动深度每次浏览的最大滚动百分比(视口底部 ÷ 文档高度)。随浏览量统计
页面性能LCP、FCP、INP、CLS、TTFB 与 Load,每次完整页面加载采一次。data-perf="false"
JS 报错未处理的错误与 Promise 拒绝;同一页面相同错误只报一次,每页最多 10 条。data-errors="false"
外链与下载跨域链接点击,以及带 download 属性或常见文件扩展名的下载。data-links="false"
点击热力图按采样率记录点击坐标与元素,每次浏览最多 100 次。默认关闭,data-clicks="true" 开启
自动化浏览器(navigator.webdriver 为真)不会上报;爬虫流量在采集网关按 User-Agent 过滤。

npm 模块

需要在打包代码里控制上报时机时,使用 ESM 模块 fmeng-sdk 的 createTracker,选项与 script 属性一一对应。

bash
npm install fmeng-sdk
typescript
import { createTracker } from 'fmeng-sdk'
const fmeng = createTracker({
site: 'SITE_KEY',
endpoint: 'http://t.t3j.com/collect',
// 以下为默认值,可按需关闭
auto: true, // 自动统计首屏与路由切换
perf: true, // 页面性能
errors: true, // JS 报错
links: true, // 外链点击与文件下载
clicks: false, // 点击热力图(显式开启)
})
fmeng.track('signup', { plan: 'pro' })

验证安装

在「站点设置 → 获取代码」中点「检测安装」后,打开你的网站任意页面:控制台每 3 秒检测一次,收到首条数据后显示「已收到数据,安装成功」。

在本地调试

为避免污染数据,fmeng.js 默认不在 localhost、127.0.0.1 与 file 页面上报;本地调试时加上 data-local="true":

html
<script defer src="http://t.t3j.com/fmeng.js" data-site="SITE_KEY" data-local="true"></script>

收不到数据时依次检查

  1. data-site 是否与站点 Key 一致;
  2. 页面是否为本地地址(需要 data-local="true");
  3. 是否被广告拦截插件拦截了 fmeng.js 或 /collect;
  4. 访问的 IP 或路径是否在「排除规则」中。

数据与隐私

原始 IP 不入统计库
统计库里只有按天加盐的哈希(用于 IP 数)和解析出的地域。解析地域时,IP 会在缓存中保留最长 7 天以复用结果;启用在线 IP 定位服务时,IP 会发给该服务查询地域。
过滤爬虫
采集网关按 User-Agent 关键字过滤爬虫;SDK 在自动化浏览器中不上报。
浏览器存储
访客 ID 存在 localStorage(不可用时降级为第一方 Cookie);会话 30 分钟无操作或跨天重新开始。
排除规则
在「站点设置 → 排除规则」中按 IP(支持 CIDR)或路径(支持 * 通配)排除,约 1 分钟内生效。

常见问题

没有找到答案?登录控制台后可在右上角铃铛查看系统公告,也可以在关于页找到联系方式。