各种建站环境怎么接入
WordPress 怎么加统计代码?
三种方式,按推荐度排序:
- 编辑主题文件:外观 → 主题文件编辑器 → 找到
footer.php,在</body>前粘贴代码。升级主题可能会丢失,需重新加。 - 用插件:装 "Insert Headers and Footers" 或 "WPCode",在 Footer 代码区粘贴,不受主题更新影响,推荐。
- 子主题:如果用的是自己做的子主题,直接把代码加到子主题的
footer.php里,最稳妥。
Vue / React 单页应用(SPA)能统计吗?
可以,但要注意 SPA 的特点:页面切换不刷新,普通埋点只会记录首次进入的页面。
解决方法——在路由变化时手动上报:
Vue Router 示例:
router.afterEach((to) => { if (window.WStats) window.WStats.track && window.WStats.track(to.fullPath); })
或者更简单的方式:把 <script> 代码放进 public/index.html 的 </body> 前,然后在路由的 afterEach 里调用 window.WStatsSearch(暂不支持的场景可以联系定制)。
location.pathname 的变化并自动上报,但仅限浏览器原生跳转。前端路由(history.pushState)默认不会触发,需要手动处理。Hexo / Hugo / Jekyll 静态博客怎么接?
所有静态博客生成器都有「公共模板」或「layout」概念,改一个文件,全站生效:
- Hexo:编辑
themes/你的主题/layout/_partial/footer.ejs(或.swig) - Hugo:编辑
layouts/partials/footer.html - Jekyll:编辑
_includes/footer.html
粘贴位置一样——都在 </body> 前。生成后重新构建即可。
网站用了 Cloudflare 代理,统计还准吗?
准。但有一个细节需要注意:
开启 Cloudflare 代理后,你服务器日志里看到的 IP 会是 Cloudflare 的 IP(如 172.71.x.x),访客真实 IP 会放在 X-Forwarded-For 头里。
我们的采集脚本已经处理了这个情况,会优先读 X-Forwarded-For,所以你看到的还是访客真实 IP。如果你发现后台全是 Cloudflare 的 IP,说明你的 Nginx 配置把 X-Forwarded-For 覆盖了,需要在 Nginx 里加:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
网站是多个页面(多 HTML),需要每个都加吗?
是的,每个 HTML 页面都要加。因为统计脚本是页面级的,浏览器加载哪个页面就执行哪个页面的脚本。
批量添加方法(宝塔终端):
find /www/wwwroot/你的网站 -name "*.html" -exec sed -i 's#</body>#<script src="/stats/track.js" data-site="xxx"></script></body>#g' {} \;
如果是 PHP、JSP、ASP 网站,把代码放在公共的 footer 文件里,一次搞定。
可以统计通过 APP / 小程序访问的流量吗?
APP 内嵌网页:可以,代码放进 WebView 加载的 HTML 里就行。设备/系统会自动识别为 iOS 或 Android。
小程序:不行。小程序不是浏览器环境,不执行 JS 脚本。如果你的小程序里有 web-view 组件加载了你网站的页面,那部分可以统计。
原生 APP 直接请求接口:不行。这不是网页访问,没有 referer、没有 UA,我们统计不了。
统计数字背后的原理
为什么我们的数据比百度统计 / GA 的数字少?
三个主要原因:
- 过滤更严格:百度统计、GA 都会采集「疑似真人」的访问(包括某些爬虫、预渲染、疑似机器人的访问)。我们的脚本
collect.php里主动过滤了 10 类爬虫 UA,被过滤掉的不计入。 - 不加载 JS 的不统计:纯静态爬虫不会执行 JS,自然拿不到数据。这其实是优点——你的数字更"干净"。
- UV 计算方式不同:我们用的是 localStorage 里的
visitor_id,清缓存或换浏览器会重新计。GA 用的是 Cookie,算法更复杂。
同一访客刷新多次,UV 会重复计数吗?
不会。visitor_id 存在浏览器的 localStorage 里,同一个浏览器一天内无论访问多少次,UV 都只算 1。
以下情况会算成新访客:
- 用户清空了浏览器缓存 / 换了浏览器
- 用户开了无痕模式
- 用户换了设备(手机 → 电脑)
- 用户换了网络(从公司 WiFi 换成 4G,IP 变了但 vid 没变,仍算同一访客)
时区是按服务器还是按访客算的?
按服务器时区。我们用的是 PHP 默认的 date() 函数,输出服务器本地时间。
如果你的服务器是北京时间(亚洲/上海),那所有统计都按北京时间切天。如果你的服务器是 UTC 或美国时区,建议在 Nginx 或 PHP 里设置时区:
date_default_timezone_set('Asia/Shanghai');
"停留时长"、"跳出率"是怎么算的?准确吗?
停留时长通过 track.js 里的 beforeunload 事件上报。用户关闭或切换页面时,脚本计算从进入页面到离开的秒数,然后上报。
不准确的情况:
- 用户直接关掉浏览器进程(不是关闭标签页),脚本可能来不及执行
- 用户手机切到后台长时间不动,脚本仍会计入时长
- 用户网络断开,上报失败
跳出率:只访问了 1 个页面就离开的访客,占总访客的比例。是行业通用定义。
这些数值都是近似值,看趋势即可,别太较真。
为什么地图上有些 IP 显示"中国 0 0"?
IP 归属地查询依赖 ip-api.com 的免费接口,有时候会:
- 识别不到具体城市,只返回国家
- 某些内网 IP、CDN 回源 IP 无法识别
- 接口偶尔超时(我们设了 2 秒超时)
识别失败会显示为空,不影响其他数据。同一 IP 30 天内只查询一次,所以偶发的失败是短时的。
疑难排查
排查第一步:F12 看请求
打开你的网站,按 F12 → 切到 Network(网络) 面板 → 在过滤框输入 collect。
观察是否有 collect.php 的请求:
- 状态 204:✅ 上报成功,去后台看数据
- 状态 403:站点标识不匹配,检查
data-site - 状态 404:路径写错了,检查
src或data-api - 红色 CORS 错误:跨域没配置好
- 没有请求:脚本没加载,或放错位置
代码加对了,F12 也有 204,但后台没数据
按顺序检查:
- 日期选对了吗?后台默认显示"昨天",如果你刚测试,切到今天才看得到。
- 站点选对了吗?左上角下拉菜单切换到你正在测试的站点。
- 数据目录权限?宝塔终端执行:
chown -R www:www /www/wwwroot/你的网站/stats/data - 服务器时间不对?执行
date看是否和现实时间一致。 - 看看日志有没有写入:
ls -lh /www/wwwroot/你的网站/stats/data/{站点标识}/
跨域统计没数据(网站和统计后台不同域名)
跨域需要 3 个条件同时满足:
- 埋点代码写完整地址 +
data-api参数 track.js是最新版(能读data-api)collect.php里有header('Access-Control-Allow-Origin: *');
完整代码示例:
<script src="https://统计域名/stats/track.js" data-site="xxx" data-api="https://统计域名/stats/collect.php"></script>
如果还不行,F12 看 Console 有没有红色 CORS 报错,把截图发我们。
后台登录后立刻弹回登录页
这是 PHP session 丢失。90% 是以下原因:
- 服务器磁盘满:session 写不进去。执行
df -h看磁盘占用 - /tmp 目录不可写:执行
chmod 1777 /tmp - config.php 开头有 BOM:Windows 编辑器留下的,用宝塔编辑器另存为 UTF-8 无 BOM
- PHP 版本问题:某些环境下 session.save_path 是空,在 php.ini 里设置一个目录
后台显示"0 次访问",但网站明明有人在看
检查清单:
- 访问日志目录是否有今天的文件?
ls data/{站点标识}/ - 文件里是否有内容?
tail data/{站点标识}/2026-09-28.log - 后台的"日期"是否选对了?默认是"昨天",需要手动切到今天。
- 如果文件里有数据但后台显示 0,说明是 PHP 读取问题,看
php_error.log
安全与合规
我的访客数据处理符合 GDPR / 个人信息保护法吗?
整体上符合,但需要注意几点:
- 数据在你自己的服务器:不会被第三方拿走,这是最大的合规优势
- IP 是个人信息:根据 GDPR 和中国《个人信息保护法》,IP 属于个人信息。你的隐私政策里应说明"使用 IP 进行访问统计"
- 建议做法:在你的网站隐私政策里加一句"本站使用自有统计系统,记录匿名化的访问数据(IP、UA、访问页面),用于改善体验"
- 不做广告追踪:我们的脚本不记录跨站行为、不投放广告,属于"必要统计"范畴,风险很低
访客要求删除他的数据怎么办?
根据 GDPR 第 17 条和 PIPL 第 47 条,访客有权要求删除个人数据。操作方法:
- 在
data/{站点标识}/目录里找到包含该访客 IP 的日志文件 - 用
grep -v "访客IP" 文件名 > 新文件剔除该访客的条目 - 或者联系该访客 IP 所归属的运营商(如果是中国用户),按合规流程处理
我们建议每 90 天自动清理旧日志,天然满足 GDPR 的"数据最小化"和"存储限制"原则。
统计后台被人尝试暴力破解怎么办?
我们推荐三层防护:
- Nginx 层:给
/stats/目录加 IP 白名单,只有你办公室或家里的 IP 能访问 - 限制登录频率:Nginx 加
limit_req限制/stats/login.php的请求频率 - 强密码:用至少 16 位、包含大小写和符号的密码
Nginx IP 白名单示例:
location ^~ /stats/ { allow 1.2.3.4; deny all; }
数据目录被其他人直接下载了怎么办?
立即执行两步:
- Nginx 加访问限制:
location ^~ /stats/data/ { deny all; return 404; } - 重载 Nginx:
nginx -s reload
同时建议:
- 检查是否有人已经下载了数据(Nginx access_log 里找
/stats/data/) - 如果日志里出现大量外部 IP 访问
/stats/data/,建议更换所有用户的密码 - 把
data/目录挪到网站根目录之外,PHP 引用绝对路径(需要改代码,联系我们)
系统运维
data 目录会一直变大吗?怎么清理?
会。每天、每个站点、每个访问者都会产生一条日志记录。访问量越大,文件越多。
推荐清理策略:保留最近 90 天,其余删除。在宝塔「计划任务」里加一条每月执行:
find /www/wwwroot/你的网站/stats/data -name "*.log" -mtime +90 -delete
同时清理 IP 缓存:
find /www/wwwroot/你的网站/stats/data/_ipcache -name "*.txt" -mtime +90 -delete
如果你套餐里写的保留期是 365 天,把 +90 改成 +365 即可。
怎么备份统计数据?
数据都在 stats/data/ 里,把这个目录打包即可。宝塔「计划任务」每周执行:
tar -czf /www/backup/stats-$(date +%Y%m%d).tar.gz -C /www/wwwroot/你的网站/stats data
建议保留最近 30 份:
ls -t /www/backup/stats-*.tar.gz | tail -n +31 | xargs -r rm -f
重要:pay_config.json 里存着支付宝/微信的密钥,备份时务必加密,别泄露。
访问量很大,性能跟不上怎么办?
文件存储在小中量级(每天几千访问)表现优秀,如果出现以下情况,建议升级:
- 每天超过 10 万 PV
- 概览页加载超过 3 秒
- data 目录超过 5GB
升级方案:
- 把日志从文件迁移到 MySQL / SQLite(性能大幅提升)
- 给常用查询加索引
- 把统计数据存到 Redis,减少读盘
这些是进阶改造,需要技术评估。可以联系我们定制。
能迁移到别的服务器吗?
完全可以。步骤:
- 把整个
stats/目录打包下载 - 在新服务器上解压到对应位置
- 确保
data/目录权限为www:www或网站运行用户 - 更新网站里的埋点代码地址(如果域名变了)
数据是无状态的——所有配置都在 JSON 文件里,不依赖数据库。迁移非常干净。
企业名片
企业名片怎么创建?要多久?
登录后台 → 顶部菜单「我的名片」→ 点「新建名片」→ 按顺序填写:
- 姓名(必填)、公司名(必填)
- 职位、电话、微信、邮箱、官网、地址(选填,但填得越全,客户越容易找到你)
- 一句话简介(60 字以内)
- 上传个人头像或公司 Logo(可选)
- 选一个名片主题(100 款按色系分类)
点「保存名片」即可,整个过程约 3 分钟。保存后自动生成专属二维码和分享链接,立刻可以分享给客户。
名片怎么分享给客户?有几种方式?
三种方式,各有适用场景:
- 发链接:把名片链接直接发给客户,点击即可查看,支持电话一键拨打、微信一键复制。适合微信、邮件、短信。
- 扫码看:把名片二维码印在纸质名片、PPT、网站签名档上,客户扫码即看,不用下载 App。适合线下场景。
- 保存为图片(最推荐):点名片页右下角「保存为图片」,导出高清 PNG,微信直接发图给客户。客户在聊天窗口直接看到完整彩色名片,不用点击链接。
名片可以建几张?团队成员每人一张吗?
套餐限制如下:
- 免费版:1 张
- 个人版:5 张
- 企业版:不限
每张名片对应一位成员,每位成员独立编辑自己的名片,互不干扰。非常适合销售团队、客服团队、售后团队给每位成员建一张专属名片。
企业版可以容纳任意多的成员。如果团队超过 5 人,建议直接上企业版,一劳永逸。
修改名片信息后,客户扫的二维码要重新换吗?
不用。名片二维码指向的是一个固定地址,与你名片的具体内容无关。
修改姓名、电话、微信、职位、公司等信息后,客户扫码看到的永远是最新版本。
这意味着:
- 你把名片印在纸质名片上,日后改信息不用重印,客户扫的还是同一个码
- 你把二维码放到 PPT、邮件签名、官网签名档,改信息后不用重新替换
- 已经拿到你名片的客户,看到的信息会自动更新
名片保存为图片后,客户还能点击拨打吗?
图片里的电话号码不能点击拨打——图片就是图片,没有交互。但客户可以:
- 长按识别二维码,进入名片页后一键拨打、复制微信
- 或者你发图片时附上名片链接,客户点链接就能直接操作
两种方式结合最方便:图片让客户一眼看到名片,链接让客户能一键操作。
名片数据存在哪里?会不会泄露?
名片数据和统计一样,都存在您自己服务器上:
- 名片信息:
data/users.json - 头像和 Logo 等图片:
uploads/cards/目录
不上传任何第三方平台。除非服务器本身被攻破,否则数据不会被任何外部人员获取。
这也是我们和市面上第三方名片工具(如名片全能王、微名片等)最大的区别——那些工具的名片数据存在它们的服务器上,你无法控制,也不清楚它们拿来做什么。
data/ 目录的服务器备份,也建议在 Nginx 层加访问限制,防止 users.json 被直接下载。名片能统计访客吗?谁扫过我的名片?
目前名片模块还不带访客统计,但我们已经在路线图里规划。上线后,你可以在后台看到:
- 名片被扫了多少次
- 扫的人来自什么地区
- 用什么设备(iOS / Android / PC)
- 是首次访问还是复访
这项功能对于销售和商务特别有用——能判断哪些客户对你的名片真正感兴趣,跟进时更有针对性。
&utm_source=email、&utm_source=wechat),用网站的统计模块查看不同渠道的扫码来源。没有找到答案?
把你的具体问题和现象(截图/报错)发给我们,1 个工作日内回复