本页目录
  1. 大多数框架什么都不用做
  2. 同一地址不会算两次
  3. hash 路由要加一个属性
  4. 页面标题对不上
  5. 想完全自己控制
  6. 停留时长怎么算

大多数框架什么都不用做

统计脚本会包装浏览器的 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 秒,脚本会补发一条停留时长。单页应用里每个路由都有自己的停留时长,和多页网站的口径一致。

本主题下一篇自定义事件:命名、属性和三种上报方式