2008-09-05 46 views
7

我注意到StackOverflow有一个针对每个问题的视图计数,并且这些视图数字相当低且准确。计算忽略搜索引擎的页面的浏览次数?

我在其中一个网站上有类似的事情。当页面加载到后端代码中时,它基本上会记录一个“命中”。不幸的是,它也为搜索引擎点击提供了臃肿和不准确的数字。

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

回答

4

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

例如,在页...

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

可能包括在头部分

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

,让你的服务器端的登录请求,然后返回一个空的CSS文件。同样的方法适用于JavaScript或图像文件,但在任何情况下,您都需要仔细研究可能发生的缓存。

另一种选择是根据他们的user agent消除搜索引擎。在http://user-agents.org/有很多可能的用户代理来帮助你入门。当然,你可以换个方式,只计算你所知道的网页浏览器的请求(包括IE,Firefox,Safari,Opera和这个新奇的Chrome浏览器会让你有99%的出现)。

更简单的方法是使用日志分析工具,如awstatsGoogle analytics等服务,两者都已解决此问题。

+0

我们已经改变了我们的增量方法一个Ajax后 - 虽然没有JavaScript的用户不会影响问题的观看次数,我们没也不想有机器人黑名单! – 2008-09-14 08:20:06

0

堆栈溢出具有准确的查看计数的原因是它只计数每个视图/用户一次。

第三方匹配计数器(和网站统计)应用程序经常筛选出搜索引擎并将其显示在单独的窗口/选项卡/部分中。

0

你要么必须做你在AJAX问题上所说的话。或者排除已知搜索引擎的用户代理字符串。阻止漫游器的唯一可靠方法是使用AJAX。

1

您并不需要使用AJAX,只需使用JavaScript将屏幕上的iFrame添加即可。保持简单

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

为了解决这个问题,我实现了一个简单的过滤器会看在HTTP请求中的用户代理标头,并将其与已知机器人的列表。

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

1

马特·谢泼德的答案扩展可能是类似以下内容:

<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>标记或相比,这个好处在于,如果hitcounter脚本出现问题,用户将看不到红色的x。 在某些情况下,了解浏览器看到的URL之前,在重写之前等服务器端发生的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"