Day 11:集成百度统计以监控站点流量

一、前言

到目前为止,这个项目已经做了有小半个月了,文章也更新了10来篇,突然想要知道一下我的站点到底有没有人访问过,原先我是打算等博客模块做完的,但是灵光一闪,想到了这个,我这个人有个毛病就是想一出是一出,所以我决定先把这个弄上。

当然实现方式有很多,最简单的就是自己在nginx层进行埋点,监控,但是多多少少还是要点工作量的,也不利于数据统计,分析,如果要做一整套,那得花不少精力,当前阶段不值当。

所以我决定先整合上百度统计,有个大致的了解。

二、百度统计整合

点击工具菜单 --> 选择数据站点分类 --> 看到百度统计,点击使用工具即可进入页面

点击进入产品,接下来就是注册登录了。

个人的话用百度账号登录就可以了。

进入页面后,点击使用设置,这里有详细的使用教程,我建议是自己跟着教程来就好。

但是既然我写了这篇文章,我还是要把步骤走一遍的。

1. 创建站点

在自有网站tab栏下点击,新增站点

根据提示要求,填写好,点击确定

2. 获取代码

之后会进入这个页面,或者自己在左侧菜单栏中找到,代码管理-->代码获取

获取统计代码

3. 项目中引入

这里有几种方式,我这里使用插件方式,因为在本地开发的时候我希望他不要统计

各种方式对比(由AI给出)

方法 是否推荐 适用场景 说明
useHead() + script[src] ✅ 强烈推荐 所有模式 最标准、兼容 SSR/SSG/SPA
插件方式 (plugins/baidu-tongji.client.js) ✅ 推荐 多环境/团队项目 封装好,逻辑分离
手动在 app.vueonMounted 动态添加 ✅ 可用 快速调试 控制灵活
直接 <script src="..." defer> 写在模板 ⚠️ 仅限 SPA SPA 模式 简单粗暴,但 SSR 下有风险

📌 建议选择

  • 如果你是新手或想最快搞定 → 选 方法一(useHead)
  • 如果你禁用了 SSR(SPA 模式)→ 可以直接写 <script> 标签
  • 如果你想集中管理第三方脚本 → 使用 plugins/*.client.js

三、以插件方式整合百度统计

1. 创建插件文件 plugins/baidu-tongji.client.js

javascript 复制代码
export default defineNuxtPlugin((nuxtApp) => {
  const config = useRuntimeConfig()
  const baiduToken = config.public.baiduTongjiToken
  
  // 如果没有配置 token,或不是生产环境,则不加载
  if (!baiduToken) return // 必须配置 token
  if (!process.client) return // 防止 SSR 报错, 必须在客户端
  if (!import.meta.env.PROD) return // 只在生产环境启用

  // 标记是否已加载,防止重复加载
  if (window._bdStatLoaded) return
  window._bdStatLoaded = true

  // 初始化 _hmt 数组
  window._hmt = window._hmt || []

  // 创建百度统计脚本
  const script = document.createElement('script')
  script.src = `https://hm.baidu.com/hm.js?${baiduToken}`
  script.defer = true
  script.async = false
  script.setAttribute('data-pid', 'baidu-tongji')

  document.head.appendChild(script)

  // 获取当前页面路径并发送首次 PV
  const sendPageView = () => {
    const path = location.pathname + location.search
    window._hmt.push(['_trackPageview', path])
  }

  // 等待脚本加载完成后再发送 PV
  script.onload = () => {
    // 首次进入页面上报 PV
    sendPageView()

    // 监听路由变化,上报后续 PV(适用于 SPA)
    nuxtApp.hook('page:finish', () => {
      // 路由切换完成后上报新页面 PV
      setTimeout(sendPageView, 100) // 小延迟确保 DOM 更新
    })
  }

  // 错误处理
  script.onerror = () => {
    console.warn('[Baidu Tongji] Failed to load hm.js')
    window._bdStatLoaded = false
  }
})

2. 配置 Token(推荐使用环境变量)

创建 .env 文件

定义好环境变量NUXT_PUBLIC_BAIDU_TONGJI_TOKEN=abc123def456xxxxx

token 换成你自己百度统计中代码中的

🔐 注意:不要把 token 提交到 Git,记得将 .env 加入 .gitignore

bash 复制代码
# Local env files
.env
.env.*
!.env.example

nuxt.config.ts 中声明,默认留空或设默认值

javascript 复制代码
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      // 声明这个配置项存在,实际值来自 .env
      baiduTongjiToken: '', // ← 留空,由 NUXT_PUBLIC_BAIDU_TONGJI_TOKEN 注入
    }
  }
})

3. 验证是否生效

这里为了本地测试,先把插件中的 if (!import.meta.env.PROD) return // 只在生产环境启用 这行代码注释掉。

  1. 启动项目:
  2. 打开浏览器开发者工具查看 Network 是否请求了 hm.js?xxx
  3. 登录 百度统计后台,查看实时访客数据。

然后就可以看到具体的行为了

四、总结

这样对于我们的站点流量有了一个大概得了解。为后续接推广提供一下数据支撑。

千里之行,始于足下。你的"个人公司"从这第一个2小时开始。欢迎在评论区分享你的进展或遇到的卡点,我会逐一查看,尽可能的帮助解决。我们下一篇文章见!

相关推荐
狗头大军之江苏分军2 小时前
《潮水漫过十七岁》开学了
后端
苏三说技术3 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong3 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno7043 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc3 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
aramae4 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
计算机魔术师4 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
SL_staff4 小时前
别急着买商业规则引擎:90%风控场景根本不需要全量编码能力
java·程序员·groovy
kyriewen5 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒5 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端