【问题标题】:How to collect page views while excluding bots and crawlers in 2016?2016年如何在排除bot和爬虫的情况下收集页面浏览量?
【发布时间】:2017-02-21 20:29:16
【问题描述】:

我们想为我们的文章页面添加页面浏览量计数器(就像在 Stackoverflow 中一样),但我们不想添加机器人和爬虫的页面浏览量。

我搜索了很多,只发现了非常过时的答案,说要触发 AJAX 请求,因为爬虫和机器人不执行 javascript... 嗯,现在是 2016 年……我相信现在所有的主要爬虫都在执行 javascript。

我想到了两个可行的解决方案:

  1. 在服务器上保留所有已知机器人和爬虫用户代理的列表,并且仅在请求不属于其中之一的情况下增加计数器(似乎是一个非常糟糕的解决方案,因为需要维护和更新列表定期进行,并且可能会有很多列表无法捕获)。
  2. 使用 AJAX 向robots.txt 中不允许的端点发送请求。 (或带有src="/article/track/?id=xxxxx" 的隐藏图像)

第二个选项会为每个页面创建另一个请求,这并不可怕,但也许有更好的方法?当今常见的处理方式是什么?

如果需要,使用 ASP.NET Core 并将页面视图存储在 redis 中

【问题讨论】:

标签: javascript html asp.net .net bots


【解决方案1】:

我发现 Stackoverflow 自己是如何处理它的:

<script>
    StackExchange.ready(function(){$.get('/posts/40008735/ivc/e079');});
</script>
<noscript>
    <div>
        <img src="/posts/40008735/ivc/e079" class="dno" alt="" width="0" height="0">
    </div>
</noscript>

在 robots.txt 中:

Disallow: /*/ivc/*
...
User-agent: Googlebot-Image
Disallow: /*/ivc/*

所以基本上,他们按照我在选项 2 中的建议处理它:

发出 AJAX 请求(或在禁用 javascript 的情况下使用隐藏的 img)并指示爬虫和机器人不要使用 Disallow 抓取该 URL。

【讨论】:

    【解决方案2】:

    正如我在聊天中提到的,您可以在客户端请求 /robots.txt 时缓存客户端的 IP 地址。

    在其他请求上,检查IP地址是否在缓存中,如果是则不计入页面浏览量。

    【讨论】:

    • 谢谢,虽然我决定采用 SO 使用的解决方案。
    猜你喜欢
    • 2011-07-21
    • 2021-01-13
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多