【问题标题】:Counting number of views for a page ignoring search engines?计算忽略搜索引擎的页面的浏览量?
【发布时间】:2010-09-07 22:21:50
【问题描述】:

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

我的一个网站上有类似的东西。每当页面加载到后端代码中时,它基本上都会记录一次“命中”。不幸的是,它也会对搜索引擎命中提供臃肿和不准确的数字。

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

【问题讨论】:

    标签: search-engine website-metrics


    【解决方案1】:

    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 这样的服务,两者都已经解决了这个问题。

    【讨论】:

    • 我们已将增量方法更改为 ajax 帖子 - 尽管没有 javascript 的用户不会影响问题的查看次数,但我们也不希望有机器人黑名单!
    • 搜索引擎确实会访问 css 文件:free-seo-news.com/newsletter246.htm ... 同样,当您检查 google 缓存中的某些网站时,它们已设置样式,这确认它们扫描并保存 css 文件。
    • 我很确定搜索引擎现在执行 Javascript
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您实际上不需要使用 AJAX,只需使用 JavaScript 在屏幕外添加 iFrame。保持简单

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

      【讨论】:

        【解决方案4】:

        对 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 中奇怪内容的漏洞制作页面请求。与常规的&lt;img&gt; 标签或&lt;iframe&gt; 相比,它的好处是,如果 hitcounter 脚本有问题,用户不会看到红色 x。 在某些情况下,在服务器端发生重写等之前,了解浏览器看到的 URL 也很重要,这给了你。如果你想要这两种方式,那么添加另一个参数 server-side 将该版本的页面名称也插入到查询字符串中。

        来自本页测试的日志文件示例:

        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"
        

        【讨论】:

          【解决方案5】:

          Stack Overflow 有准确的观看次数的原因是它只计算每个观看次数/用户一次。

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

          【讨论】:

            【解决方案6】:

            您将不得不使用 AJAX 执行您在问题中所说的内容。或者排除已知搜索引擎的用户代理字符串。阻止机器人的唯一可靠方法是使用 AJAX。

            【讨论】:

              猜你喜欢
              • 2011-04-07
              • 1970-01-01
              • 2020-10-24
              • 2015-03-24
              • 1970-01-01
              • 2018-01-08
              • 1970-01-01
              • 2011-08-13
              • 1970-01-01
              相关资源
              最近更新 更多