我注意到StackOverflow每个问题都有一个视图计数,并且这些视图编号相当低且准确。
我的一个网站上有类似的东西。每当页面加载到后端代码中时,它基本上都会记录“命中”。不幸的是,它也为搜索引擎命中率提供了膨胀和不准确的数字。
我想一种不计算机器人的方法是在页面加载后用AJAX调用进行视图计数,但我确信还有其他更好的方法可以忽略搜索引擎中的搜索引擎他们在抓取您的网站。你知道吗?
答案 0 :(得分: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%的方式)。
更简单的方法是使用awstats之类的日志分析工具或Google analytics之类的服务,这两种工具都已解决了这个问题。
答案 1 :(得分:2)
为了解决这个问题,我实现了一个简单的过滤器,它会查看HTTP请求中的User-Agent标头,并将其与已知机器人列表进行比较。
我从www.robotstxt.org获得了机器人列表。它可以用简单的文本格式下载,可以很容易地解析为自动生成“黑名单”。
答案 2 :(得分:1)
您不需要使用AJAX,只需使用JavaScript在屏幕上添加iFrame即可。保持简单
<script type="javascript">
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">');
</script>
答案 3 :(得分:1)
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"
答案 4 :(得分:0)
Stack Overflow具有准确视图计数的原因是它只计算每个视图/用户一次。
第三方点击计数器(和网络统计信息)应用程序通常会过滤掉搜索引擎并将其显示在单独的窗口/标签/部分中。
答案 5 :(得分:0)
你要么必须用AJAX做你在问题中所说的话。或者排除已知搜索引擎的用户代理字符串。停止机器人的唯一可靠方法是使用AJAX。