宝塔网站统计
产品概述
宝塔网站统计(bt-stats)是一款轻量级、自托管的网站访问分析系统,以宝塔面板插件的形式运行,具有以下特点:
- 自托管:数据存储在自有服务器,不经过第三方。
- 高性能:采用 Go 采集后端和 DuckDB 列存引擎,单机可承载日均百万 PV。
- 低资源:无需 MySQL 或 PostgreSQL,嵌入式数据库开箱即用。
- 准确可靠:通过 Cookie 标识用户身份,准确识别新访客和回访客。
功能矩阵
| 功能模块 | 说明 |
|---|---|
| 概览看板 | PV、UV、IP、跳出率、平均访问时长和活跃用户趋势 |
| 访问分析 | 入口页面和出口页面排名 |
| 来源分析 | 来源域名和渠道分布(直接访问、搜索引擎、社交、外链、付费和 UTM) |
| 访客分析 | 地域、浏览器、操作系统、设备、屏幕和语言 6 个维度的分布 |
| 会话列表 | Session 分页浏览和单会话行为日志 |
| 实时访客 | 实时访问列表和访问轨迹追踪 |
| 用户旅程 | 页面路径排名和事件流分析 |
| 广告追踪 | UTM 五参数(source、medium、campaign、content、term)和广告平台 Click ID |
| 页面性能 | Web Vitals(LCP、INP、CLS、FCP、TTFB)均值、评分、趋势和维度分解 |
| 热力图 | 页面点击坐标热度分布,支持按页面配置与查询 |
| IP 地理分布 | 国家和省份 IP 分布可视化 |

快速开始
环境要求
| 项目 | 要求 |
|---|---|
| 服务器 | Linux x86_64(支持 Debian、Ubuntu 和 CentOS) |
| 内存 | 最低 1 GB,推荐 2 GB 及以上 |
| 磁盘 | 200 MB 基础空间;日均 1 万 PV 时,每月约增加 100 MB |
| 面板 | 宝塔 Linux 面板 |
| Web 服务 | Nginx 或 Apache(Apache 仅支持手动配置) |
安装插件
在宝塔面板的【软件商店】中搜索并安装【宝塔网站统计】。安装完成后,进入插件设置页面进行配置。
开启网站统计
在插件的【网站列表】中添加需要统计的站点,或找到已有站点,然后根据实际情况选择自动开启或手动开启。
| 设置项 | 说明 |
|---|---|
| CDN 类型 | 如果站点使用了 CDN,请选择对应的 CDN 厂商(Cloudflare、阿里云或腾讯云),以确保获取真实访客 IP |
如果已在面板中开启全局 CDN,则可以忽略此处设置。

部署跟踪脚本
自动部署
插件会自动在站点的 Nginx 配置中注入跟踪脚本,无需手动修改代码。部署后,访问者加载页面时,跟踪脚本会自动采集并上报数据。
手动部署
如果自动部署失效、网站使用了反向代理,或网站使用 Apache 服务,请选择手动部署。
-
选择以下任一方式部署跟踪脚本:
-
方式一(Nginx):修改网站配置文件,使用
sub_filter在</head>标签前插入插件提供的手动配置信息。sub_filter '</head>' '【在此处粘贴手动配置信息】</head>'; -
方式二(推荐):将插件提供的手动配置信息复制并粘贴到网站所有页面的
</head>标签前。建议将其放入header.htm等公共页头模板中,实现“一处安装,全站生效”。如果需要在独立 JavaScript 文件中调用,请移除首尾的
<script>和</script>标签,并将其中的核心代码放入 JavaScript 文件。
-
-
如果网站开启了反向代理,请在
proxy_pass配置下添加以下内容:proxy_set_header Accept-Encoding ""; -
按照界面提示检测并开启统计。

部署完成后,站点会使用以下路径:
| 路径 | 用途 |
|---|---|
/bt-stats.js | 加载跟踪脚本 |
/bt-stats.gif | 上报统计数据 |
验证部署
- 访问站点的任意页面。
- 打开浏览器开发者工具,进入【网络】面板。
- 检查是否存在
bt-stats.gif请求。该请求的状态码应为200,返回内容应为 1 × 1 像素的透明 GIF。 - 等待几秒后,返回插件概览页面查看统计数据。
数据说明
核心指标
| 指标 | 计算方式 | 说明 |
|---|---|---|
| PV | 页面访问事件总数 | 页面访问次数 |
| UV | 独立访客数 | 访问网站的访客数 |
| IP | 独立 IP 数 | 访问网站的 IP 数 |
| 跳出率 | 单页 Session 数 / Session 总数 | 仅访问 1 个页面就离开的会话比例 |
| 停留时长 | 总停留时长 / Session 数 | 单次访问的平均停留时长,上限为 60 分钟,以避免脏数据影响 |
网页性能标准
统计指标
| 指标 | 说明 | 侧重点 | 业务用途 |
|---|---|---|---|
| P50 | 中位数 | 中间水平 | 整体平均常态 |
| P75 | 75 分位 | 75% 数据上限 | 多数流量的较差值 |
| P95 | 95 分位 | 95% 数据上限 | 长尾异常和慢请求 |
性能指标
| 指标 | 说明 | 优秀 | 良好 | 一般 | 较差 |
|---|---|---|---|---|---|
| LCP | 最大内容绘制 | ≤ 1.5 s | ≤ 2.5 s | ≤ 4 s | > 4 s |
| INP | 交互响应 | ≤ 100 ms | ≤ 200 ms | ≤ 500 ms | > 500 ms |
| CLS | 布局偏移 | ≤ 0.05 | ≤ 0.1 | ≤ 0.25 | > 0.25 |
| FCP | 首次内容绘制 | ≤ 1 s | ≤ 1.8 s | ≤ 3 s | > 3 s |
| TTFB | 首字节时间 | ≤ 400 ms | ≤ 800 ms | ≤ 1.8 s | > 1.8 s |
热力图
热力图展示访客在页面上的点击分布,直观呈现用户最关注、点击最密集的区域,可用于优化页面布局、按钮和广告位。
如果网站禁止在 iframe 中加载,请在网站配置中移除 X-Frame-Options 或 CSP frame-ancestors 限制。例如,需要移除以下 Nginx 配置:
add_header X-Frame-Options SAMEORIGIN;

常见问题
为什么统计数据比实际访问量少?
可能原因如下:
- 跟踪脚本未覆盖网站的所有页面。
- 部分浏览器插件或广告拦截器拦截了跟踪脚本。
- 后端校验过滤了不合法的上报数据。
- CDN IP 识别配置不准确,导致独立 IP 数偏低。
支持哪些浏览器?
支持 Chrome、Firefox、Safari 和 Edge 等现代浏览器。Web Vitals 性能指标仅在支持 PerformanceObserver API 的浏览器中采集。
数据能保存多久?
磁盘空间充足时,数据可以永久保存。DuckDB 列式存储压缩率较高,日均 1 万 PV 的站点每月约增加 100 MB 数据量,请注意预留足够的磁盘空间。
能否统计多个站点?
支持。在插件的【网站管理】中添加多个站点,并分别部署跟踪脚本即可。各站点的数据相互独立。
如何处理用户隐私?
- 使用匿名化 Cookie 标识访客,不包含个人身份信息。
- 所有数据只存放在用户自己的服务器上,不会上传到第三方服务。