Я делаю все на стороне сервера Google Analytics, но GA отслеживает только прямые или рефералы, и я не знаю, как отслеживать органические. Это код кода, который получает либо прямой, либо реферал:
//Campaign is used for the referrals //If not in session and there is a referrer, create campaign from referrer //and add it to the tracker and to session. if (!isset($_SESSION['campaign'])) { if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], parse_url($this->config['url']['base'], PHP_URL_HOST)) === FALSE) { $campaign = GoogleAnalytics\Campaign::createFromReferrer($_SERVER['HTTP_REFERER']); $this->tracker->setCampaign($campaign); $_SESSION['campaign'] = serialize($campaign); } } else { //If already in session, add it to the tracker $this->tracker->setCampaign(unserialize($_SESSION['campaign'])); }
Вышеуказанное в основном анализирует референта; если из другого источника создается реферал, если нет, то нет. Затем он сохраняется в сеансе, если есть реферал.
Теперь, как бы я идентифицировал органические источники? Я думал о создании таблицы возможных органических источников, это как Google это делает? Что-то вроде:
protected $organic_sources = array('www.google.com', 'www.yahoo.com')
Затем я должен проверить источник там, прежде чем создавать кампанию, если в массиве я создам ее как органическую кампанию. Это оптимальное решение? Любые мысли о том, как идентифицировать органический трафик?
Да, именно так Google это делает. Я создал небольшую функцию для определения органического трафика. Это происходит так:
/* * Organic sources */ protected $organic_sources = array('www.google' => array('q='), 'daum.net/' => array('q='), 'eniro.se/' => array('search_word=', 'hitta:'), 'naver.com/' => array('query='), 'yahoo.com/' => array('p='), 'msn.com/' => array('q='), 'bing.com/' => array('q='), 'aol.com/' => array('query=', 'encquery='), 'lycos.com/' => array('query='), 'ask.com/' => array('q='), 'altavista.com/' => array('q='), 'search.netscape.com/' => array('query='), 'cnn.com/SEARCH/' => array('query='), 'about.com/' => array('terms='), 'mamma.com/' => array('query='), 'alltheweb.com/' => array('q='), 'voila.fr/' => array('rdata='), 'search.virgilio.it/' => array('qs='), 'baidu.com/' => array('wd='), 'alice.com/' => array('qs='), 'yandex.com/' => array('text='), 'najdi.org.mk/' => array('q='), 'aol.com/' => array('q='), 'mamma.com/' => array('query='), 'seznam.cz/' => array('q='), 'search.com/' => array('q='), 'wp.pl/' => array('szukai='), 'online.onetcenter.org/' => array('qt='), 'szukacz.pl/' => array('q='), 'yam.com/' => array('k='), 'pchome.com/' => array('q='), 'kvasir.no/' => array('q='), 'sesam.no/' => array('q='), 'ozu.es/' => array('q='), 'terra.com/' => array('query='), 'mynet.com/' => array('q='), 'ekolay.net/' => array('q='), 'rambler.ru/' => array('words=') );
Просто поместите выше в свой класс и добавьте эту функцию:
/* * Check if source is organic * * @param string $referrer The referrer page * * @return true if organic, false if not */ public function isTrafficOrganic($referrer) { //Go through the organic sources foreach($this->organic_sources as $searchEngine => $queries) { //If referrer is part of the search engine... if (strpos($referrer, $searchEngine) !== false) { //Check if query is also there foreach ($queries as $query) { if (strpos($referrer, $query) !== false) { //If there, traffic is organic return true; } } } } return false; }
Затем вы можете просто вызвать функцию выше, передав $_SERVER['HTTP_REFERER']
качестве параметра. Надеюсь, это полезно для кого-то.
это то, как Google это делает
В принципе, да, насколько это касается GA, поиск в обычном поиске – это референт из известной поисковой системы (по URL-адресу) плюс параметр поиска (для захвата ключевого слова поиска), но без параметров utm- или glcid (что превратило бы референт в URL кампании). В клиентской стороне GA вы можете даже добавить свой собственный набор поисковых систем, поэтому я бы сказал, что так оно и должно работать на стороне сервера.