我为PHP网站建立了一个非常基本的广告管理器。
我说基本是因为它不像Google或Facebook广告那样复杂,甚至不是大多数高端广告服务器。不处理付款或任何事情,甚至不针对用户。
它可以用于我的低流量网站,但只是展示随机横幅广告,计算展示次数和点击次数。
功能
我希望逐渐为系统添加更多功能。
我注意到的一件事是Impressions / views计数器经常被夸大了。
我认为其原因来自社交网络的蜘蛛和机器人以及搜索引擎蜘蛛。
例如,如果有人从我网站上的网页输入网址到Facebook,Google +,Twitter,LinkedIn,Pinterest和其他网络,这些网站通常会抓取我的网站来收集网页标题,图片和说明。
我真的希望能够禁用此功能,因为当实际人员没有查看该页面时,广告展示次数/查看次数会计算在内。
我意识到这将很难检测到所有这些,但如果有办法获得大部分,至少它会使我的统计数据更准确。
所以我正在寻求有关如何实现目标的任何帮助或想法?请不要说使用其他广告系统,不在卡片中,谢谢
答案 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
}