Отделение поискового трафа от остального
Сегодня я расскажу как можно отделить поисковый траф от остального, если вы например хотите сливать траф с гугла в одно место, а траф с других поисковых систем куда-нибудь еще
Для начала разработаем функцию анализа рефера с которым пришли на скрипт редиректа
function parse_se($seoref) { $out = array(); $seo_info = parse_url($seoref); $se = @$seo_info['host']; $query = @$seo_info['query']; if(strstr($se, 'google') !== false) { $out['se'] = 'google'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['q']); } if(strstr($se, 'msn') !== false) { $out['se'] = 'msn'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['q']); } if(strstr($se, 'yahoo') !== false) { $out['se'] = 'yahoo'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['p']); } if((strstr($se, 'aol') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['query']); } if((strstr($se, 'netscape') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['query']); if($out['q'] == '')$out['q'] = urldecode(@$out['q']['s']); } if((strstr($se, 'ask') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['q']); } if((strstr($se, 'starware') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['qry']); } return $out; }
Дальше просто используем выборку по правилам (для какой SE какое правило перехода и все готово :))
$se_out = parse_se($ref); switch ($se_out['se']) { case 'google': $url = 'for google'; break; case 'yahoo': $url = 'for yahoo'; break; case'msn': $url = 'for msn'; break; default: $url = 'for other se'; break; }
Теперь осталось соединить это все в одно целое и вуаля
<? function parse_se($seoref) { $out = array(); $seo_info = parse_url($seoref); $se = @$seo_info['host']; $query = @$seo_info['query']; if(strstr($se, 'google') !== false) { $out['se'] = 'google'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['q']); } if(strstr($se, 'msn') !== false) { $out['se'] = 'msn'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['q']); } if(strstr($se, 'yahoo') !== false) { $out['se'] = 'yahoo'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['p']); } if((strstr($se, 'aol') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['query']); } if((strstr($se, 'netscape') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['query']); if($out['q'] == '')$out['q'] = urldecode(@$out['q']['s']); } if((strstr($se, 'ask') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['q']); } if((strstr($se, 'starware') !== false)) { $out['se'] = 'other'; parse_str($query, $out['q']); $out['q'] = urldecode(@$out['q']['qry']); } return $out; } $ref = @$_SERVER['HTTP_REFERER']; //traff with referer if($ref != '') { $se_out = parse_se($ref); switch ($se_out['se']) { case 'google': $url = 'for google'; break; case 'yahoo': $url = 'for yahoo'; break; case'msn': $url = 'for msn'; break; default: $url = 'for other se'; break; } } //no ref traff else { $url = 'http://google.com'; } header("Location: $url"); ?>

January 24th, 2008 at 2:40 pm
А что же Яши нету?((
January 25th, 2008 at 7:31 am
над этим ведется работа

в принципе немного модернизировать функцию parse_se() по аналогии с другими
May 1st, 2008 at 10:24 am
А практическая польза от этого есть? Зачем посылать трафик с одного поисковика в одно место, а другого в другое?