Prasad N
Prasad N

Reputation: 543

Get keyword from a (search engine) referrer url using PHP

I am trying to get the search keyword from a referrer url. Currently, I am using the following code for Google urls. But sometimes it is not working...

$query_get = "(q|p)";
$referrer = "http://www.google.com/search?hl=en&q=learn+php+2&client=firefox";
preg_match('/[?&]'.$query_get.'=(.*?)[&]/',$referrer,$search_keyword);

Is there another/clean/working way to do this?

Thank you, Prasad

Upvotes: 8

Views: 20783

Answers (7)

Navaneeth
Navaneeth

Reputation: 1418

I believe google and yahoo had updated their algorithm to exclude search keywords and other params in the url which cannot be received using http_referrer method.

Please let me know if above recommendations will still provide the search keywords.

What I am receiving now are below when using http referrer at my website end.

from google: https://www.google.co.in/ from yahoo: https://in.yahoo.com/

Ref: https://webmasters.googleblog.com/2012/03/upcoming-changes-in-googles-http.html

Upvotes: 0

user3419431
user3419431

Reputation:

<?php 
class GET_HOST_KEYWORD 
{ 
    public function get_host_and_keyword($_url) { 
        $p = $q = "";
        $chunk_url = parse_url($_url); 
        $_data["host"] = ($chunk_url['host'])?$chunk_url['host']:''; 
        parse_str($chunk_url['query']); 
        $_data["keyword"] = ($p)?$p:(($q)?$q:''); 
        return $_data; 
    } 
}     
// Sample Example 
$obj = new GET_HOST_KEYWORD(); 
print_r($obj->get_host_and_keyword('http://www.google.co.in/search?sourceid=chrome&ie=UTF-&q=hire php php programmer')); 

// sample output
//Array
//(
//    [host] => www.google.co.in
//    [keyword] => hire php php programmer
//)

// $search_engines = array(
//    'q' => 'alltheweb|aol|ask|ask|bing|google',
//    'p' => 'yahoo',
//    'wd' => 'baidu',
//    'text' => 'yandex'
//);


?>

Upvotes: 1

Dan Solovay
Dan Solovay

Reputation: 3154

To supplement the other answers, note that the query string parameter that contains the search terms varies by search provider. This snippet of PHP shows the correct parameter to use:

$search_engines = array(
    'q' => 'alltheweb|aol|ask|ask|bing|google',
    'p' => 'yahoo',
    'wd' => 'baidu',
    'text' => 'yandex'
);

Source: http://betterwp.net/wordpress-tips/get-search-keywords-from-referrer/

Upvotes: 1

Jhourlad Estrella
Jhourlad Estrella

Reputation: 3670

This one should work For Google, Bing and sometimes, Yahoo Search:

if( isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']) {
    $query = getSeQuery($_SERVER['HTTP_REFERER']);
    echo $query;
} else {
    echo "I think they spelled REFERER wrong? Anyways, your browser says you don't have one.";
}



function getSeQuery($url = false) {
    $segments = parse_url($url);
    $keywords = null;
    if($query = isset($segments['query']) ? $segments['query'] : (isset($segments['fragment']) ? $segments['fragment'] : null)) {
    parse_str($query, $segments);
    $keywords = isset($segments['q']) ? $segments['q'] : (isset($segments['p']) ? $segments['p'] : null);
    }
    return $keywords;
}

Upvotes: 0

Prasad N
Prasad N

Reputation: 543

There are different query strings on different search engines. After trying Wiliam's method, I have figured out my own method. (Because, Yahoo's is using 'p', but sometimes 'q')

$referrer = "http://search.yahoo.com/search?p=www.stack+overflow%2Ccom&ei=utf-8&fr=slv8-msgr&xargs=0&pstart=1&b=61&xa=nSFc5KjbV2gQCZejYJqWdQ--,1259335755";
$referrer_query = parse_url($referrer);
$referrer_query = $referrer_query['query'];
$q = "[q|p]"; //Yahoo uses both query strings, I am using switch() for each search engine
preg_match('/'.$q.'=(.*?)&/',$referrer,$keyword);
$keyword = urldecode($keyword[1]);
echo $keyword; //Outputs "www.stack overflow,com"

Thank you, Prasad

Upvotes: 1

powtac
powtac

Reputation: 41050

$query = parse_url($request, PHP_URL_QUERY);

Upvotes: 0

William
William

Reputation: 15593

If you're using PHP5 take a look at http://php.net/parse_url and http://php.net/parse_str

Example:


// The referrer
$referrer = 'http://www.google.com/search?hl=en&q=learn+php+2&client=firefox';

// Parse the URL into an array
$parsed = parse_url( $referrer, PHP_URL_QUERY );

// Parse the query string into an array
parse_str( $parsed, $query );

// Output the result
echo $query['q'];

Upvotes: 16

Related Questions