Что я могу использовать вместо HTTP_REFERER для надежного отслеживания?

Я работаю над сценарием, который сохраняет URL ссылки для каждого посетителя в сеансе var, а затем сохраняет его в БД с другими данными, такими как ключевое слово / фраза Google, которая привела посетителя на сайт, а также ссылка на ссылку. была обычная запись в Google (или обычный результат) или платная ссылка (Google AdWords). До сих пор я придумал это, но это не всегда работает. Продолжая читать, я обнаружил, что в некоторых случаях http_referer блокируется или скрывается, поэтому я ищу лучший способ заставить это работать.

    $session = & JFactory::getSession();
    if (!$session->get('referrer', $origref, 'extref')) //If does not exist
    {
        $origref = $_SERVER['HTTP_REFERER'];
        $session->set('referrer', $origref, 'extref');

        $url = $session->get('referrer', $origref, 'extref');
        if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
            $q = 'No referer';
        }

        $parts_url = parse_url($url);
        $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
        if(!$query) {
            $q = 'Not from Google';
        }
        parse_str($query, $parts_query);
        $q = isset($parts_query['q']) ? $parts_query['q'] : isset($parts_query['oq']) ? $parts_query['oq'] : (isset($parts_query['p']) ? $parts_query['p'] : 'could not fetch keyword');

      if(stristr($origref, 'aclk')) { // if referer is a google adwords link as opposed to an organic link
          $type = ', paid link, '.$_SERVER['HTTP_USER_AGENT'];
      } else {
          $type = ', organic result, '.$_SERVER['HTTP_USER_AGENT'];
      }

    $ginfo = $q.$type;
    $session->set('referrer', $ginfo, 'extref');  
    }

    function search_engine_query_string($url = false) {
        if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
            return 'No referer';
        }

        $parts_url = parse_url($url);
        $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
        if(!$query) {
            return 'Not from Google';
        }
        parse_str($query, $parts_query);
        return isset($parts_query['q']) ? $parts_query['q'] : (isset($parts_query['p']) ? $parts_query['p'] : '');
    }

Есть идеи?

2 ответа

Я могу ошибаться, но если вы не контролируете оба конца (то есть реферера и реферала), я не думаю, что это возможно за пределами того, что вы уже делаете.

Если это для целей анализа, вы можете использовать Google Analytics и Google Webmaster Tools.

Они оба дополняют друг друга, и очень хотят, чтобы вы достигли своего сценария

Другой типичный метод заключается в том, чтобы иметь специализированный URL-адрес для идентификации трекера. Например:

subdomain.mysite.com/tracker?userid=12345&source=adwords

Когда этот URL-адрес ударил, вы знаете, что источником является adwords, и вы немедленно перенаправили бы пользователя обратно на главную страницу с header перенаправления. Таким образом, они не имеют ни малейшего представления об отслеживании, и оно должно быть довольно надежным.

Другие вопросы по тегам