首先科普一下目前網路廣告的類型,大體都有CPC,CPM,CPA,CPS,CPV這幾種。
CPC是按點擊(Click)計算,CPM就是按彈跳窗(Mxxx?)計算,CPA/CPS一個是按註冊一個是按銷售計算,CPV則是按顯示次數計算。於是CPC,CPA,CPS這種根據網站訪客行為來獲得收益的是一類,而CPM和CPV這種只和網站流量相關的則是另一類。
可想而知,CPC,CPA,CPS的效果要分析訪客群體,點擊習慣等諸多要素來進行調整,非一蹴而就,這篇文章中我主要想研究怎麼從流量上做文章,在不作弊的情況下取得盡可能多的收益;等廣告聯盟用得多了,時間長了,也會給予一點不同廣告聯盟的評價。
1. 最基本的投放
以聯盟為例,直接在網頁任意地方嵌入類似程式碼就能產生在右下角懸浮的展示廣告了。
<script type="text/javascript">
u_a_client="20326";
u_a_width="270";
u_a_height="200";
u_a_zones="37972";
u_a_type="1"
</script>
<script src=" http://www.XXXX.com/i.js"></script >
2. 不同廣告聯盟的同類廣告輪播
因為CPV/CPM是按IP計算瀏覽量的,那麼同一用戶重複瀏覽同一廣告是不會增加收入的,所以引入輪播機制。
通常情況下,如果是同一個聯盟,那麼是自動隨機輪播的,但是如果想在不同的聯盟的CPV廣告之間進行輪播,又該如何呢。
其實可以自己搞隨機,透過Javascript腳本,在對應位置隨機產生程式碼。可以定義檔案dynamic.js,然後在對應位置引入。
<script type="text/javascript" src="dynamic.js"></script>
然後dynamic.js利用document.write以及Math.random函數來實現動態展示不同網站的廣告,這裡我用了另一個廣告聯盟太極圈(這個聯盟我看playsc.com在用所以也申請了)的廣告。程式碼如下:
var choice = Math.random()*2;
if (choice<=1){
document.write('<script type="text/javascript">u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";</script> <script src=" http://js.tjq.com/i.js"></script>' );
}else{
document.write('<script type="text/javascript">u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";</script> <script src=" http://www.admin6.com/i.js"></script>' );
}
顯然,如果有3個需要展示的,那麼random*3,並且放上三個分支就行了,以此類推。這只是一種形式,如果有很多廣告的話,可以定義一個dynamic.js文件,把上述程式碼放在函數cpv裡面,然後在對應的地方呼叫cpv函數也可以。這樣方便統一管理廣告。
另外這樣做的另一個好處是,靜態化的頁面不用重新生成,只用修改dynamic.js的內容,也就是可以修改廣告內容。
使用中發現,javascript的隨機數產生並不太可靠,所以也可以摒棄Math.random方法,改用奇偶時間法:奇數分鐘顯示A廣告,偶數分鐘顯示B廣告,甚至可以按秒數來分,最多支援60個廣告輪播(好變態-。-)。這個方法的基本想法是,只要瀏覽網頁超過時間片的長度(我這裡用的是分鐘),那麼必然會同時瀏覽到兩個廣告。 dynamic.js的程式碼修改如下
var now = new Date();
var minutes = now.getMinutes();
if (minutes%2==0){
document.write('<script type="text/javascript">u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";</script> <script src=" http://js.tjq.com/i.js"></script>' );
}else{
document.write('<script type="text/javascript">u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";</script> <script src=" http://www.xxx.com/i.js"></script>' );
}
奇偶時間法的另一個優點在於可以比較哪個廣告聯盟量比較足,因為可想而之奇偶時間分配的話,一般來說兩個聯盟分配到的點擊數都應該差不多的,僅作參考。
3. 終極輪播絕招
使用2的那些方法以後,比起單聯盟來說,廣告投放效果立刻*1.5,但這還是不夠。我們應該更貪心一點:要壓榨光每一個IP的用戶流量。
怎樣才能壓榨乾淨呢?試想一下這個演算法:
用戶當天第一次來訪,顯示廣告1
用戶當天第二次來訪,顯示廣告2
只要使用者造訪次數小於現存廣告的數量,那麼他每次造訪都會顯示不一樣的廣告,點幾次頁面就顯示幾次廣告! CPV廣告就真正名符其實是Cost Per View了。 (但是這麼做會不會被誤認為作弊?因為明顯展示數和統計數比例太高了,看起來像假的,這個需要衡量)
還有一個問題是,怎麼確定用戶第幾次訪問,從而顯示第幾個廣告呢?最樸素的想法莫過於建立一個本機的流量統計系統,例如piwik系統,然後查詢本地數據庫,我一開始的確想這麼實現,但是可想而知這會多麼拖累主機的性能。想想看,javascript有沒有辦法自己來保存那些存取資訊呢?
其實是有的,那就是本機cookies,只要自動記錄cookie,那麼用戶是第幾次來那就顯而易見了;而且由於cookie有自動超時機制,我們只要讓它把超時設為24小時,那麼第二天就可以自動重新統計了。
首先,需要有set_cookie以及get_cookie函數
function set_cookie(name,value,expires){
var today = new Date();
today.setTime( today.getTime() );
expires = expires*1000;
var expires_date = new Date(today.getTime()+(expires));
document.cookie=name+"="+escape(value)+";expires="+expires_date.toGMTString()+";domain=simplecd.org";
}
function get_cookie(name){
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++){
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^s+|s+$/g,"");
if (x==name){
return unescape(y);
}
}
}
然後,我們可以稍微修改一下演算法,簡化程式碼:為各個廣告建立自己的cookie,值為造訪次數
新演算法如下:
1.遍歷各廣告位的cookie
2、如果有不存在的cookie,則顯示該廣告位,並且設定cookie
3.如果cookie全部存在則顯示任意廣告或不顯示,同時更新所顯示廣告的cookie
更進一步地,為了那個懸浮窗不要那麼擾民,也可以再加上一條:
如果使用者已顯示廣告總次數大於6次,那麼今天就不顯示該類廣告。
整個接下來的程式碼如下:
var total_ad = 3;
var max_show = 6;
var cookie_PRe = 'cpvad_counter_';
var cookie_time = 60*60*8;
var show = -1; // show ad id
var show_counter = 0;
// first pass, round robin
for (var i=0;i<total_ad;i++) {
var cookie_name = cookie_pre+i;
var counter = get_cookie(cookie_name);
if ( counter ){
show_counter += parseInt(counter);
}else{
show = i;
break;
}
}
// show if not showed more than max_show times
if (show_counter < max_show){
// second pass, random show
if (show == -1){
show = Math.floor(Math.random()*total_ad);
}
// handle cookie
var cookie_name = cookie_pre+show
var cookie_value = get_cookie(cookie_name);
if (cookie_value){
set_cookie(cookie_name,''+(parseInt(cookie_value)+1),cookie_time);
}else{
set_cookie(cookie_name,'1',cookie_time);
}
// show add
switch(show){
case 0:
document.write('<script type="text/javascript">u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";</script> <script src=" http://js.tjq.com/i.js"></script>' );
break;
case 1:
document.write('<script type="text/javascript">u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";</script> <script src=" http://www.xxx.com/i.js"></script>' );
break;
case 2:
document.write('<script type="text/javascript">u_a_client="20685";u_a_width="283";u_a_height="189";u_a_zones="63369";u_a_type="1";</script> <script src=" http://js.tjq.com/i.js"></script>' );
break;
}
}
4.小結
本文從技術上分析並實現了CPV類廣告的輪播最大化收益,至於同類的CPM廣告,那也是與此同理。
然而廣告投放可不只是耍耍這麼點javascript就能實現效用最大化的,還有CPC/CPA/CPS等其他廣告類別,還有數量和質量的關係,位置與顯示速度的關係,擾民和效果的關係等等一大堆的東西可以研究。
在網路廣告投放上,我只是才投了1週廣告的新人而已,還有很多需要學習和研究的,所以這篇文的標題是(一),再又有心得,自認為可以單獨成文的時候,那就是(二)了,然而目前我只是大概有個試驗思路,什麼時候去做和什麼時候能成文,那就不知道了。
文章來源: http://obmem.info/?p=844轉載請註明出處連結。