大多数框架什么都不用做
统计脚本会包装浏览器的 history.pushState 和 history.replaceState,并监听前进后退(popstate)。主流框架的路由在 history 模式下都是通过这两个方法切换页面的,所以装好脚本后,每切换一次路由就自动记一次页面浏览:
- Vue Router(
createWebHistory) - React Router(
BrowserRouter) - Next.js(App Router 和 Pages Router)
- Nuxt
脚本标签放在根布局的 <head> 里即可。Next.js 用 next/script 时,strategy 选 afterInteractive,并且只放在根布局,不要放进每个页面组件里。
同一地址不会算两次
新地址和上一次记录的地址相同时,这次切换直接忽略。所以只改了路由 state、没改地址的 replaceState 不会多算一次浏览。
另外,地址里 # 之后的部分默认会被去掉:/docs#intro 和 /docs#faq 算同一页,页内锚点跳转不会产生新的浏览。
hash 路由要加一个属性
如果你的地址长这样:https://example.com/#/pricing,说明用的是 hash 路由(Vue Router 的 createWebHashHistory、老版本的 Angular 等)。这时要在脚本上加 data-hash="true":
<script defer src="https://static.pathclue.com/client.js" data-site="你的站点标识" data-hash="true"></script>
加了之后脚本会保留 hash 部分,并在每次 hashchange 时记录浏览。不加的话,整个应用在报表里只有首页一页。
页面标题对不上
路由切换后,脚本在下一个事件循环读取 document.title。有的框架或者 SEO 插件更新标题比较晚,这时报表里某一页的标题可能是上一页的,地址本身不受影响。如果你很在意标题,有两个办法:让框架在路由切换时同步设置标题;或者按页面路径看报表,不看标题。
想完全自己控制
少数情况下你可能想在数据加载完成后再记浏览,比如路由库不走 History 接口。可以关掉自动采集,在路由回调里手动调用。具体写法在控制台「网站统计 › 配置 › SDK 代码」页,那里给的示例已经填好了你的站点标识。
要提醒的是,关掉自动采集(data-auto-track="false")会连带关掉停留时长、外链点击和性能采集。只是想排除几个页面的话,用 data-exclude 更合适,见 统计脚本的属性一览。
停留时长怎么算
切换路由、切走标签页或关闭页面时,如果当前页已经停留超过 1 秒,脚本会补发一条停留时长。单页应用里每个路由都有自己的停留时长,和多页网站的口径一致。