针对搜索引擎显示Adsense广告是一个很古老的话题,其目的是为了减少无效展示,提高eCPM,也就是所谓的有效每千次展示的费用。江湖上传言eCPM高了,Adsense机器人会自动匹配高单价的广告到你的网页,所以在点击率一定的情况下,提高eCPM是是一种有效提高广告收入的办法。

网上流传的有三种办法,原理都是一致的,只是有的简单有的复杂,有的功能强有的效率高。曾经一度使用大猫老湿的习作,但是后来发现还需要继续缩小范围,所以就自己研究了一下。

首先看看原始代码:

<?php
$referer = $_SERVER['HTTP_REFERER'];
$adsense = <<ad
你可以把ADsense的代码
复制到我的位置
ad; //Adsense代码赋值给$adsense
if(strpos($referer,'digglife.cn') == false){
echo $adsense;
}//判断$referer中是否含有digglife.cn,无则输出$adsense
?>

我虽然没学过PHP,但是这些代码还是很容易懂的,上面的注解尽管不专业,但是意思上不会有差错。Strpos本来是寻找字符串中某字符最先出现处,有则返回整数值,但是因为如果没有就返回false,所以这里用着刚刚好。

这段代码采用的是一种排除法,只要不是直接进入digglife的,一律显示广告。但是我通过Google Analystic分析的结果是,99%的收入来自谷歌,百度和搜搜,所以只想针对这三个搜索引擎显示广告,这样只能通过正面判断。

当然,可以如下这么写,还是大猫的家庭作业:

<?php
$referer = $_SERVER['HTTP_REFERER'];
$adsense = <<AD
adsense的代码
AD;
if(strpos($referer,'google') !== false){
echo $adsense;
}elseif(strpos($referer,'baidu') !== false){
echo $adsense;
}elseif(strpos($referer,'soso') !== false){
echo $adsense;
}
?>

但是适合对不同的搜索引擎显示一样的内容,如果内容相同,就可以利用foreach循环语句将其简化。另外,反链中包含有”google”和”baidu”并不代表一定来自这两个搜索引擎的搜索结果页,来自Greader和百度空间之类的访客也会看到广 告,如果觉得这个不爽,可以将’google’改为’google.com/search?’,”baidu”改为’baidu.com/s?’,这样更加精确。

<?php
$referer = $_SERVER['HTTP_REFERER'];
$se = array('google.com/search?', 'baidu.com/s?', 'soso.com/q?');
$adsense = <<AD
adsense代码
AD;
foreach ($se as $source) {//将se数组中的每一个值逐一赋给$source
if(strpos($referer,$source) !== false){
echo $adsense;
}
}
?>;

不过Foreach这个方法要将数组里面的每一个值都执行一遍,也就是所谓的遍历,执行效率从理论上说要比上面那个低一点。

PHP看起来好像很牛逼的样子,啥时候俺也来学学。