网站上线之后,老板或自己最常问的一句话就是:现在每天有多少人来看?他们从哪个渠道进来、看了哪些页面、有没有留下联系方式?如果你只能用“大概”“还行”这类词回答,说明站里还没接统计工具。百度统计是国内站长用得最普遍的一套免费网站分析工具,安装门槛低、报表齐全。本文把它的安装、报表和事件跟踪一条线讲清楚,照着做,半天就能把数据接起来、看明白。
有个做本地家政站的站长,建站半年一直凭直觉改版,哪个月访客少了就猛加文章。后来接上百度统计才发现,每天真正进来的访客不到三十,而且七成来自同一个城市——说明他的推广资源一直砸在错误的渠道上。数据接上之前,所有的优化都是在盲人摸象,改了也不知道有没有用。
一、安装部署:代码拿到手,放到哪
登录百度统计后台,进入“管理—网站中心—代码管理—网站代码”,会拿到一段以 _hmt 开头的 JavaScript 跟踪代码。核心动作只有两步:第一步,把这段代码完整复制,注意不要漏掉任何一行;第二步,粘贴到你每个页面的标签之前。如果你用的是模板建站程序(如 WordPress、织梦、帝国),一般在“主题设置”或“页脚”里有个第三方代码输入框,粘进去就能全站生效;如果是自己写的静态站或框架站,就把代码放进公共 footer 模板,保证每个页面都输出。漏掉一个页面,那一页的数据就是空的。
装完之后最怕的是“以为装了其实没装全”——尤其是模板站,有时代码只粘到了首页,内页没生效。下面这段脚本用来批量检查一批页面有没有把统计代码输出、且位置在之前:把待检查的地址填进 URLS 列表,跑一次,它会请求每个页面并判断页面里是否包含 _hmt 这个关键标识,以及它是否出现在之前。要改的地方只有 URLS 那一行,换成你自己的页面地址。
# 检查一批页面是否都装了百度统计代码、且位置在 之前
import urllib.request
from urllib.error import HTTPError, URLError
UA = {'User-Agent': 'Mozilla/5.0 (compatible; TrackCheck/1.0)'}
MARK = '_hmt'
def check(url):
try:
html = urllib.request.urlopen(
urllib.request.Request(url, headers=UA), timeout=10
).read().decode('utf-8', 'ignore')
except (HTTPError, URLError) as e:
return '抓取失败', str(e)
pos = html.find(MARK)
body_pos = html.rfind('')
if pos < 0:
return '未安装', '页面里找不到 _hmt'
if body_pos >= 0 and pos > body_pos:
return '位置偏后', '代码在 之后,可能漏统计'
return '正常', '已安装且在 之前'
for u in ['https://www.example.com/', 'https://www.example.com/about.html']:
print(u, check(u))
跑完重点看两类结果:输出“未安装”的页面,回去把代码补上;输出“位置偏后”的,说明代码被放到了之后甚至之外,部分异步加载或快速跳走的访问会漏统计,要移到之前。全部输出“正常”后,再到统计后台的“代码状态”确认是否显示“代码安装成功”,两边一致才算真正装好。
二、报表模块怎么进、先看哪几个
代码生效之后,打开“报告”页,左侧导航有趋势分析、来源分析、页面分析、访客分析、转化分析等模块。新手不用全看,先把“趋势分析—实时访客”和“来源分析—全部来源”打开:实时访客能看到此刻谁在访问、用什么设备、从哪个页面进来;全部来源能看到流量来自搜索引擎、直接访问还是外部链接,以及各渠道的访客数和占比。这两个一开,每天访客的轮廓就有了。其余模块等你看懂这两个再逐步点开,别一上来被满屏图表劝退。
三、事件跟踪:把关键按钮的点击记下来
光看整体访客还不够,很多时候你想知道“有多少人点了那个咨询按钮”“有多少人把商品加进了购物车”。这就需要事件跟踪。百度统计的事件跟踪原理是:在你想监控的元素上挂一段 _hmt.push 调用,把“类别、动作、标签”三个信息传上去。比如要监控首页的咨询按钮点击,就在按钮旁加下面这段代码。要改的地方有三处:第一,把 getElementById 里的 id 换成你按钮真实的 id;第二,把第一个参数(类别,如“咨询按钮”)换成你的业务含义;第三,把第二个参数(动作,如“点击”)和第三个参数(标签,如“首页”)换成能区分同类型按钮出现在不同页面的标记。
<!-- 在咨询按钮上挂事件跟踪,记录“咨询按钮—点击—首页” -->
<button id="askBtn">立即咨询</button>
<script>
document.getElementById('askBtn').onclick = function () {
_hmt.push(['_trackEvent', '咨询按钮', '点击', '首页']);
};
</script>
跑完到后台“事件分析”里,就能按类别和动作看到每个按钮的点击次数,哪个按钮没人点、哪个按钮点得多,一目了然。除了手动埋点,还有更省事的目标设置。进入“转化分析—目标设置”,可以定义“访问某个 URL 算一次转化”(比如支付成功页),也可以定义“停留超过 N 秒算一次转化”。电商站用它统计下单量,内容站用它统计“认真读完”的人数,都比事后猜靠谱。
四、和服务器日志对一遍账,确认没漏统计
统计代码偶尔会漏,比如用户浏览器装了拦截插件、或者页面还没加载完脚本就跳走了。一个稳妥的做法是用服务器访问日志和统计报表对一遍账。下面这段脚本读 nginx 的访问日志,按天统计 PV 和独立 IP,再和统计后台“趋势分析”里的 PV、UV 比对。要改的地方只有一处:把 LOG 变量改成你服务器上 access.log 的真实路径,如果日志格式不是默认Combined格式,相应的正则也要跟着调。
# 读 nginx 访问日志,按天统计 PV 与独立 IP,用来和统计报表对账
import re
from collections import defaultdict
LOG = '/var/log/nginx/access.log'
day_pv = defaultdict(int)
day_ip = defaultdict(set)
pattern = re.compile(r'^(\d+\.\d+\.\d+\.\d+).*\[(\d{2})/(\w{3})/(\d{4})')
with open(LOG, encoding='utf-8', errors='ignore') as f:
for line in f:
m = pattern.match(line)
if not m:
continue
ip, dd, mon, yyyy = m.groups()
key = '%s-%s-%s' % (yyyy, mon, dd)
day_pv[key] += 1
day_ip[key].add(ip)
for k in sorted(day_pv):
print(k, 'PV=%d' % day_pv[k], 'UV=%d' % len(day_ip[k]))
跑完看每天的输出,把 PV 那列和统计后台同日的 PV 放一起对比。日志里的 PV 是“全量请求”,统计里的 PV 是“成功加载脚本的页面浏览”,两者天然有差距——通常日志比统计高 5% 到 15%,因为脚本没加载的访问不会被统计记录。如果统计只有日志的一半甚至更少,基本可以确定代码漏装或被拦截严重,要回去重查第三步的安装检查。
把安装、报表、事件跟踪这三步接起来,你的站就不再是一个黑箱。下一步是把每周的关键数记进一张表,一个月后回看趋势,比天天盯实时访客有用得多。
相关阅读:
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!
