jdhao / jdhao.github.io

My personal blog: https://jdhao.github.io/
25 stars 6 forks source link

2020/10/31/busuanzi_pv_count_error/ #46

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

解决不蒜子 (busuanzi) 文章计数出错问题 - jdhao's digital space

一个月之前,就发现自己的博客用的计数系统“不蒜子”对每篇博客访问量的统计出现了问题,刚写的博文,访问量都是几十万,显然不正常,但是很神奇,整个博客的访问量统计似乎并没有问题。当时也在 v2ex 发帖咨询了,不过没有人给出合理的答案

https://jdhao.github.io/2020/10/31/busuanzi_pv_count_error/

leimao commented 2 years ago

有意思的是,我在PC端,iOS和iPadOS上看你这个文章的阅读量是近乎50万,这个计数是有问题的。 这里另外有个兄弟,https://blog.deepexplore.top/2021/03/07/2021030700/ 用的方法是和你一样的,我在PC端,iOS和iPad上看他的文章阅读量是正常的。 我自己的网站,用了和你们一样的方法,在PC端的文章阅读量是正常的,在iOS和iPad上确是不正常的。比如说这个文章 https://leimao.github.io/article/Automatic-Differentiation/ 这说明一定还有另外至少一个变量在影响计数。

jdhao commented 2 years ago

我这边用 macOS 上的 Chrome 浏览器,显示的阅读量是正常的(看下面的截图),iOS 和 iPad 你用的是 Chrome 浏览器吗,如果也是 chrome 浏览器,但是显示不正常,怀疑是移动端的 chrome 浏览器和桌面端浏览器某些设置或者内核不一样?

image

Edit,用 macOS 上的 safari 浏览器也测试了这篇文章,访问数量显示是错误的,有 47 万+,苹果自己在 safari 加了啥黑魔法。。

image
leimao commented 2 years ago

我在三个端都使用过至少三个以上的浏览器,对于同一个网站的显示结果都是一致的。 浏览器包括Chrome,Brave,Safari,Firefox。

jdhao commented 2 years ago

Chrome 也显示不正常就有点奇怪,目前能想到的原因可能是版本不同?我测试的环境:

leimao commented 2 years ago

我的iPad是

leimao commented 2 years ago

无论怎么说吧,至少肯定还是有个东西影响着计数没有被发现出来。需要一个比较懂前端的人来研究一下。

jdhao commented 2 years ago

嗯,我这里用 iPad 上的 Chrome 和 Firefox 测试,显示阅读数也不对,是 47 万+,所以 iPad 上 Chrome 和 mac 上 Chrome 肯定是不同的,具体什么不同就不清楚了。

leimao commented 2 years ago

答案就在你我还有那个deepexplore那个兄弟的网站html中,需要有心人。

jdhao commented 2 years ago

看了你的那篇文章,在我这里 mac 上 Chrome 浏览器显示阅读量没有问题,112 visits。用 F12 打开 Chrome 调试工具,显示的请求 busuanzi 时候的 referer 也是没有问题的,你可以看看你那边用 mac 上的 Chrome 请求网页 referer 是否正常

image
leimao commented 2 years ago

谢谢验证。就是iOS和iPadOS端似乎没有这些Debug Console,无法查看Referrer Policy。不晓得是不是由于浏览器强行override,导致计数不正常。

jdhao commented 2 years ago

如果有拦截请求/抓包的工具,应该也是可以查看请求 busuanzi 时候具体发送的 header 是什么,不过这方面不懂,没具体做过。。😂

jdhao commented 2 years ago

终于发现原因了,原来是 iPad 上浏览器默认都是阻止 cross-site tracking 的,你加了 meta tag 也没有用。

safari 设置,在 “PRIVACY & SECURITY” 部分,关掉 Prevent Cross-Site Tracking 即可。

对于 Chrome 和 Firefox 浏览器,设置里面,打开 Allow Cross-Website Tracking 即可。

结论:苹果你真牛逼,别人都遵守的,你就要搞个特别的。

Ref:

leimao commented 2 years ago

但为何这个兄弟的计数总是正常的? https://blog.deepexplore.top/2021/03/07/2021030700/

jdhao commented 2 years ago

不太清楚,你先按照我写的方法,看看你的 iPad 计数是否正常了,那个问题可能是另外一个问题。

leimao commented 2 years ago

我又看了看,似乎那个兄弟计数也不正常,他的其他文章的点击数量是上个文章点击数量+1

leimao commented 2 years ago

那这个无解了。以后的静态网站都无法计数了可能。要计数的话需要动态网站后端计数。

leimao commented 2 years ago

亦或者,把URL放到request的parameters里去,这样就能成功计数了。但是这个需要busuanzi进行升级。

leimao commented 2 years ago

可以找个机会跟busuanzi的开发者说一下,这个问题不解决,随着浏览器安全级别越来越高,静态网站就没法用busuanzi计数了。

jdhao commented 2 years ago

嗯,需要更新一下计数的策略,不过 busuanzi 作者似乎已经不怎么维护了?没看到这几年有什么动静,网站很久没更新过

ivon852 commented 1 year ago

外国开发者提供的计数器解法是用谷歌的Firebase,似乎比较可靠,例如这个主题就是内置Firebase https://blowfish.page/docs/configuration/#firebase

另一个是GoatCounter https://robb.sh/posts/adding-goatcounter-analytics-to-hugo/

megarijndael commented 11 months ago

firefox 已經不支援 no-referrer-when-downgrade 和 unsafe-url 很久了,坑阿!busuanzi不能正常計數