我写了这篇博客。有人读吗?我怎么知道呢?
在互联网发展的早期,你的网络服务器会在页面请求时记录日志,然后各种工具会分析这些日志来了解你的访客情况。如今,这些日志在查看人工流量时几乎毫无用处,因为大多数流量都来自机器人,尤其是在人工智能公司都运行着自己的网络爬虫的情况下。
有些机器人,比如 Googlebot,会用User-Agent
标头或IP 范围来标记自己,但还有很多其他类型的机器人,包括那些将自己标识为浏览器的机器人。(我几十年前的记忆里,谷歌也曾有一种机制,可以以一种看起来不像机器人的方式抓取页面。)
如今,Web 访问日志记录使用的是 JavaScript。页面上的脚本会收集访问者的信息,并将其 POST 到某个日志记录端点。例如,Google Analytics 就是这样工作的。一些网站声称超过一半的网站都在使用它,这意味着使用 Google Analytics 可以让 Google 进一步了解互联网上每个人的浏览情况。
“遥测”脚本太烦人了,除了它还能做什么?这里有一个不需要 JavaScript 的技巧,但它同样不起作用。
在每个页面中嵌入一个不可见的图像:
仅获取 HTML 和遍历链接的机器人不会访问此日志记录端点。 <img src=/log width=1 height=1>
传递到/log
路径的Referer
标头将告诉您<img>
标签所在的页面。
不幸的是,如今的机器人也对图像感兴趣。
如果你真的使用 JavaScript 会怎么样?事实证明,那些花哨的机器人也运行 JS。机器人不会做什么?
我的一个想法是,机器人不太可能在任何特定页面上停留——它们有其他地方可去。我尝试了一个使用setTimeout
的脚本,只有当浏览器停留三秒后,才将页面加载记录为一次访问。
它看起来比我试过的其他方法效果更好,但不到一天,我就发现百度机器人抓取了我的主页,三秒钟后又抓取了日志记录端点。他们真的有可能在运行页面脚本并等待吗?也许我需要一个更长的计时器?
本博客也以 feed 的形式发布。Feed 阅读器会获取其内容,并在其自带的 UI 中重新发布。我还没试过,但我怀疑他们是否会运行我的脚本。
有些 Feed 阅读器在抓取 Feed 时,会报告它们代表的订阅者数量。这算不算人工阅读?我不这么认为。我以前用 Feed 阅读器的时候,有些订阅的内容我有时根本没看。
一方面,越来越精明的机器人在日志中的表现会越来越接近人流。另一方面,人类通过 feed 阅读器阅读,甚至不使用 JavaScript,但无论如何都不会被记录下来。但愿不会有人把我的帖子打印出来,然后纸上阅读,那样根本无法追踪!
这个问题体现了你在工程中可能遇到的一个更普遍的模式:有时,当你着手实施一项措施时,你会发现一个由越来越令人困惑的极端情况组成的无尽迷宫。如果有人加载了页面,但只是心不在焉地浏览了一下,该怎么办?这根本算不上真正的读者,对吧?如果有人加载了页面,并在日志信标运行之前立即找到了他们想要的内容,该怎么办?
这些问题表明,你需要退一步思考,重新思考你的真正目标是什么。我的目标是什么?我想我写这篇博客有两个原因。
-
花时间连载我的想法,追寻内心批评家发现的所有漏洞,是我巩固和存档知识的一种方式。为此,我不需要任何人阅读,只需要我自己。
-
我为想象中的“另一个我”的读者写作,他们与我有着相同的兴趣和技能水平,但还不了解我学到的东西。有时我写的文章正是别人需要的,他们最终会联系我。为此,我需要一个电子邮件地址,而不是访问日志。
原文: https://neugierig.org/software/blog/2025/09/access-log.html