百度统计代码部署:你明明装了,为什么数据还是对不上?

“我贴了代码,也刷新看了,怎么后台一点动静都没有?”
这是上周客户发给我的第7条微信。不是代码没生效,是它卡在某个你根本没想到的地方。

别急着重装、别急着换工具。百度统计本身很稳,出问题的90%都是部署姿势不对——位置错了、重复了、被拦了,或者压根没跑起来。下面这些坑,我都替你踩过。

代码到底该放在哪里?一个位置不对,数据全白费

百度统计代码不是“扔进去就行”,它得抢在用户关掉页面前完成加载。

最保险的位置,是每个页面的 </head> 标签之前。
因为 <head> 是浏览器最先读的部分,放这儿,代码能第一时间启动,哪怕用户只看了半秒就划走,也算一次有效访问。

要是你把它塞到 <body> 底部,尤其页面里堆满了大图、视频、第三方插件……等代码开始执行时,人早就走了。

举个真事:帮一个做家居定制的客户查数据,商品页访问量一直偏低。一扒代码,果然在页面最底下。他们详情页要加载12张实景效果图,平均加载4秒以上,60%用户3秒内就跳出——代码根本没机会跑。挪到 </head> 前,第二天数据就回来了。

另外,如果你用的是 WordPress、织梦这类CMS,别光看主题设置页有没有“统计代码”填空框。得打开 header.php 文件,确认那段代码是不是真的出现在每个页面源码里。有些分类页、搜索页、404页会绕过默认头部,你以为装上了,其实它们压根没加载。

怎么判断代码是否生效?3个自检方法,不依赖第三方工具

部署完别急着关网页,花1分钟自己验一遍,比等一天看报表靠谱得多。

第一招:看网络请求
打开你的网站 → 按 F12 → 切到 Network 标签 → 刷新页面 → 在过滤框里输入 hm.baidu.com
如果看到一条状态是 200 的请求,说明代码已发出、服务器也接住了。
如果啥都没,或者显示 404 / blocked,那代码大概率没加载成功。

第二招:查变量是否存在
在浏览器地址栏粘贴这行:

javascript:alert(typeof _hmt)

回车。弹窗显示 object?OK,代码加载成功。
显示 undefined?代码没跑起来,回去检查位置或语法。

第三招:揪出重复代码
很多人一边在主题里加了统计代码,一边又在插件里开了百度统计开关,结果数据翻倍。
在开发者工具的 Sources 标签页里,按 Ctrl+Shift+F(Windows)或 Cmd+Opt+F(Mac),全局搜 hm.baidu.com
如果搜出两处及以上,立刻删掉多余的——只留一份,且必须在 </head> 前。

单页面应用(SPA)怎么破?默认代码根本不管用

Vue、React 做的网站,百度统计默认代码只能记下首页那一下。后面所有页面跳转,它都当“没发生”。

比如用户从 /home 点进 /product/205,再跳到 /contact,百度后台只会显示一次 /home 访问——其他全是黑盒。

解决办法:用 _hmt.push() 手动上报页面变化。
在路由切换的钩子里(比如 Vue Router 的 afterEach,React Router 的 useEffect),加上这一句:

_hmt.push(['_trackPageview', '/product/205'])

注意:传的必须是完整路径(不含域名),而且得是真实 URL。
如果用的是 hash 模式(URL 带 #),比如 /#/about,那就得传 #/about,不然全算首页。

我们帮一个用 Vue 做企业服务落地页的客户改完后,单日记录页面数从 1 个涨到 12 个,用户行为路径终于能串起来了。

HTTPS和CDN会拦截代码吗?这3个配置必须检查

HTTPS 和 CDN 不是来帮忙的,它们可能悄悄把你的统计代码“毙掉”。

HTTPS 问题最常见
老版本百度统计代码写的是 http://hm.baidu.com/hm.js?xxx
但你的网站强制跳 HTTPS 后,浏览器会直接屏蔽这种“混搭”请求,代码静默失败。
改法超简单:把 http:// 换成 https://,其余不动。

CDN 可能搞乱脚本
有些 CDN 为了加速,会合并、压缩、甚至重命名 JS 变量。
我们见过最邪门的一次:某金融客户用了某云 CDN,CDN 把 _hmt 变量自动改成 _hmt_abc123,百度统计直接失联。
解法:在 CDN 后台把 hm.baidu.com 加入“不压缩域名白名单”。

CSP(内容安全策略)也会挡路
如果你的网站启用了 CSP(尤其银行、政务、教育类站点),默认会禁止外链脚本。
得在服务器返回的 Content-Security-Policy 头里,给 script-src 加上:

script-src 'self' hm.baidu.com;

不然浏览器理都不理这段代码。

为什么数据总是有延迟?别被“实时数据”骗了

百度统计的“实时访客”本来就有几分钟缓冲期——用户刚点进来,数据不会秒同步。这正常。

真正要警觉的,是“今天实时看到500人,明天报表里只剩300人”。
这种断崖式缩水,八成是两个原因:

  • 免费版配额用完了:百度统计免费版每天最多接收 50 万 PV。超出部分直接丢弃,不报错、不提醒。
    查法:去后台「管理」→「数据导出」→ 下载最近7天的“请求量”日志。如果某天曲线突然被砍平,就是撞上限了。

  • 爬虫占坑:有些采集程序、监控机器人天天刷你首页,把配额吃干抹净。
    解法:在网站根目录的 robots.txt 里,明确禁止无关爬虫,比如:

    User-agent: DotBot  
    Disallow: /  
    User-agent: AhrefsBot  
    Disallow: /
    

多域名或子域名怎么统计?别让数据散落一地

shop.example.com、blog.example.com、example.cn —— 如果每个站单独装一个百度统计账号,你就永远看不到用户是怎么逛完博客又下单的。

正确做法:所有站点共用同一个百度统计 ID,并开启跨域统计。

操作分两步:

  1. 后台「管理」→「数据管理」→「跨域设置」,把你所有域名(含 www 和无 www 版本)都加进白名单;
  2. 每个页面的统计代码里,在 _hmt.push() 之前加一行:
    _hmt.push(['_setAutoPageview', false]);
    
    然后再手动调用 _trackPageview 上报每一次跨域跳转。

我们帮一个做小语种课程的客户配好后,发现大量用户是从法语博客跳转到中文主站报名的。这个路径以前完全看不见,现在成了他们优化法语内容的核心依据。

今天就做这一件事:检查你的页面是否装了重复代码

打开你网站任意一个页面 → 按 F12 → 切到 Console 标签 → 粘贴并回车:

document.querySelectorAll('script[src*="hm.baidu.com"]').length

如果返回数字大于 1,说明至少装了两份百度统计代码。
立刻登录你的网站后台(WordPress 就进外观→主题编辑器,织梦就进模板管理),找到多余的那一份删掉。
然后换几个页面(首页、列表页、详情页、404页)重复测一遍,确保每页都只返回 1

这事5分钟能搞定,但能解决绝大多数“数据对不上”的抱怨。做完,明早再看报表,你会明显感觉——数据终于像那么回事了。