我注意到 StackOverflow 对每个问题都有一个浏览次数,并且这些浏览次数相当低且准确。

我的一个网站上也有类似的东西。每当页面加载到后端代码中时,它基本上都会记录一个“点击”。不幸的是,它也会对搜索引擎点击次数进行此操作,从而给出臃肿且不准确的数字。

我想不计算机器人的一种方法是在页面加载后使用 AJAX 调用进行视图计数,但我确信还有其他更好的方法可以忽略点击计数器中的搜索引擎,同时仍然让它们进入抓取您的网站。你知道任何?

有帮助吗?

解决方案

AJAX 调用即可完成此操作,但搜索引擎通常不会加载图像、javascript 或 CSS 文件,因此在页面中包含这些文件之一并传递您想要记录请求的页面的 URL 可能会更容易作为文件请求中的参数。

例如,在页面...

http://www.example.com/example.html

您可以在头部包含

<link href="empty.css?log=example.html" rel="stylesheet" type="text/css" />

并让您的服务器端记录请求,然后返回一个空的 css 文件。同样的方法也适用于 JavaScript 或图像文件,尽管在所有情况下您都需要仔细查看可能发生的缓存。

另一种选择是消除基于搜索引擎的搜索引擎 用户代理. 。有一个可能的用户代理的大列表: http://user-agents.org/ 让您开始。当然,您也可以采取其他方式,只计算来自您所知道的网络浏览器的请求(包括 IE、Firefox、Safari、Opera 和这个新奇的 Chrome 浏览器,您可以完成 99% 的处理)。

更简单的是使用日志分析工具,例如 统计数据 或类似的服务 谷歌分析, ,两者都已经解决了这个问题。

其他提示

为了解决这个问题,我实现了一个简单的过滤器,它会查看 HTTP 请求中的 User-Agent 标头,并将其与已知机器人列表进行比较。

我从以下网站获得了机器人列表 www.robotstxt.org. 。它可以以简单的文本格式下载,可以轻松解析以自动生成“黑名单”。

您实际上并不需要使用 AJAX,只需使用 JavaScript 在屏幕外添加 iFrame 即可。把事情简单化

<script type="javascript">
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">');
</script>

马特·谢泼德(Matt Sheppard)的答案的延伸可能如下:

  <script type="text/javascript">
  var thePg=window.location.pathname;
  var theSite=window.location.hostname;
  var theImage=new Image;
  theImage.src="/test/hitcounter.php?pg=" + thePg + "?site=" + theSite;
  </script>

可以将其插入页面页眉或页脚模板中,而无需在服务器端替换页面名称。请注意,如果您包含查询字符串 (window.location.search),则该字符串的强大版本应该对该字符串进行编码,以防止作恶者根据 URL 中的奇怪内容制作利用漏洞的页面请求。与此相比,好的一点是一个常规的 <img> 标签或 <iframe> 如果 hitcounter 脚本有问题,用户将不会看到红色 x。在某些情况下,了解浏览器在重写之前看到的 URL 等也很重要。这发生在服务器端,这给了你。如果您想要两种方式,请添加另一个服务器端参数,该参数也会将该版本的页面名称插入到查询字符串中。

此页面测试中的日志文件示例:

10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/testpage.html HTTP/1.1" 200 306 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"
10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/hitcounter.php?pg=/test/testpage.html?site=www.home.***.com HTTP/1.1" 301 - "http://www.home.***.com/test/testpage.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"

Stack Overflow 具有准确的浏览次数的原因是它只对每个浏览/用户进行一次计数。

第三方点击计数器(和网络统计)应用程序通常会过滤掉搜索引擎并将其显示在单独的窗口/选项卡/部分中。

您要么必须使用 AJAX 执行您在问题中所说的操作。或者排除已知搜索引擎的用户代理字符串。阻止机器人的唯一可靠方法是使用 AJAX。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top