tags: 博客 教程 统计 [TOC] ## 为什么推荐 GoatCounter 如果你想给静态博客加一个“文章阅读数”,`GoatCounter` 是很适合的一类服务: - 它本身就支持静态网站 - 接入只需要一段脚本 - 可以按页面 path 统计访问 - 可以直接通过 `counter/*.json` 这样的接口把数字读出来,显示在文章页或者文章列表里 对个人博客来说,它的优点是足够轻,而且不需要自己先搭后端。 ## 第一步:注册并创建站点 先到 GoatCounter 官网创建一个站点。 创建完成之后,你会拿到一段类似下面的脚本: ```html ``` 这里最重要的是: - `data-goatcounter` 里是你的站点地址 - `count.js` 是 GoatCounter 提供的统计脚本 只要这个脚本被插入到页面里,页面访问就会开始上报。 ## 第二步:把统计脚本放进博客配置 如果你是像我这样用 `mdwiki` 生成静态博客,可以把这段脚本放到站点根目录的 `config.json` 里: ```json { "goatcounter_script": "" } ``` 这样做的好处是: - 统计脚本不写死在模板里 - 换站点时只需要改配置 - 不启用 GoatCounter 时删掉这个字段即可 如果你不是用 `mdwiki`,思路也是一样的:把这段脚本统一插入到每一个页面。 ## 第三步:确保脚本真的插入到了每个页面 这一点非常关键。 正确做法是: - 把 GoatCounter 脚本插入到所有页面 - 最好放在 `
` 里,至少要保证在你自己读取阅读数的脚本之前加载 例如: ```html ... ``` 如果你只是把它插在某几个页面里,或者插在页面很后面,而你自己的计数脚本又先执行了,就会出现页面上一直显示“读取中”或者“未知”。 ## 第四步:在 GoatCounter 后台打开 visitor counter 只插入 `count.js` 还不够。 如果你还想把“阅读数”显示在网页上,而不只是去 GoatCounter 后台看统计,还要在 GoatCounter 后台打开 visitor counter 功能。 关键设置是: ```text Allow adding visitor counts on your website ``` 这项打开之后,前端页面才能去请求类似下面这样的计数接口: ```text https://drunkpig.goatcounter.com/counter/xxx.json ``` 如果这项没打开,页面读取计数时通常会失败。 ## 第五步:先让文章详情页显示阅读数 最容易先做通的是文章详情页。 因为详情页当前浏览器地址就是真实页面地址,可以直接按 GoatCounter 默认的 path 规则取数。 GoatCounter 的默认 path 规则是: - 优先用 canonical - 否则用 `location.pathname + location.search` 所以详情页前端脚本可以按这个思路写: ```html ``` 这里有两个小点很重要: - `404` 不一定是程序错了,很多时候只是这个页面还没有统计记录,这时显示 `0` 比显示错误更合理 - path 最终要和 GoatCounter 实际记录的 path 保持一致,所以尽量按它的默认规则来 ## 第六步:再让首页文章列表显示阅读数 文章列表页的做法和详情页差不多,只是 path 不再来自 `window.location`,而是来自每篇文章自己的链接。 思路是: 1. 页面里先渲染出文章列表链接 2. 遍历每个文章链接 3. 从链接里解析出 `pathname + search` 4. 去 GoatCounter 读对应 path 的计数 5. 把数字填回列表里的占位元素 像这样: ```html