从PHP中的View计数器中排除机器人和蜘蛛

时间:2013-07-07 19:10:25

标签: php advertising web-crawler

我为PHP网站建立了一个非常基本的广告管理器。

我说基本是因为它不像Google或Facebook广告那样复杂,甚至不是大多数高端广告服务器。不处理付款或任何事情,甚至不针对用户。

它可以用于我的低流量网站,但只是展示随机横幅广告,计算展示次数和点击次数。

功能

  • 页面上的广告位/位置
  • 横幅图片
  • 名称
  • 查看/展示计数器
  • 点击计数器
  • 开始和结束日期,或永不结束
  • 停用/启用广告

我希望逐渐为系统添加更多功能。

我注意到的一件事是Impressions / views计数器经常被夸大了。

我认为其原因来自社交网络的蜘蛛和机器人以及搜索引擎蜘蛛。

例如,如果有人从我网站上的网页输入网址到Facebook,Google +,Twitter,LinkedIn,Pinterest和其他网络,这些网站通常会抓取我的网站来收集网页标题,图片和说明。

我真的希望能够禁用此功能,因为当实际人员没有查看该页面时,广告展示次数/查看次数会计算在内。

我意识到这将很难检测到所有这些,但如果有办法获得大部分,至少它会使我的统计数据更准确。

所以我正在寻求有关如何实现目标的任何帮助或想法?请不要说使用其他广告系统,不在卡片中,谢谢

enter image description here

4 个答案:

答案 0 :(得分:11)

您需要使用JavaScript为AD提供服务。这是避免大多数抓取工具的唯一方法。只有浏览器加载图像,JS和CSS等依赖项。 99%的机器人都避开它们。

你也可以这样做:

// basic crawler detection and block script (no legit browser should match this)
if(!empty($_SERVER['HTTP_USER_AGENT']) and preg_match('~(bot|crawl)~i', $_SERVER['HTTP_USER_AGENT'])){
    // this is a crawler and you should not show ads here
}

你会以这种方式获得更好的统计数据。 将JS用于广告。

PS 您还可以尝试在JS中设置Cookie并稍后检查它。抓取工具可能会获得通过HTTP在PHP中发送的cookie,但是在JS中设置的那些,99.9有机会他们会错过它。因为他们需要加载JS文件并解释它。这只是由浏览器完成的。

答案 1 :(得分:0)

你可以这样做: 这里有一个很好的文本格式的抓取工具列表:http://www.robotstxt.org/db/all.txt

假设您已在名为$botList

的数组中收集该文件中的所有用户代理
$ua = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : NULL;

if($ua && in_array($ua, $botList)) {
  // this is probably a bot
}

当然,用户代理很容易被更改或有时可能会丢失,但谷歌和雅虎等搜索引擎对自己是诚实的。

答案 2 :(得分:0)

抓取工具会下载robots.txt,即使它不尊重它并且是出于好奇。这是一个很好的迹象,你可能正在处理一个,虽然它不明确。

如果他在很短的时间内访问了大量链接,您就可以检测到它。这在代码中可能非常复杂。

但是,只有当您不想或不能运行Javascript时,这才是可行的。否则请使用CodeAngry的答案。


编辑:为响应@keune的回答,您可以保留所有访客IP并通过cron作业中的列表运行它们,然后发布更新的访客数量。

答案 3 :(得分:0)

试试这个:

if (preg_match("/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i", $_SERVER['HTTP_USER_AGENT']) && !preg_match("/bot|crawl|crawler|slurp|spider|link|checker|script|robot|discovery|preview/i", $_SERVER['HTTP_USER_AGENT'])) {
    It's not a bot
} else {
    It's a bot
}