如何从谷歌获取来源搜索查询?

12

就在两天前,以下代码可以用来获取Google搜索的查询:

$refer = parse_url($_SERVER['HTTP_REFERER']);
$host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
$query = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);

if(strstr($host,'www.google.com'))
{
    //do google stuff
    $qstart = strpos($query, 'q=') +2;
    $qend = strpos($query, '&', $qstart);
    $qlength = $qend - $qstart;
    $querystring = substr($query, $qstart, $qlength);
    $querystring = str_replace('q=','',$querystring);
    $keywords = explode('%20',$querystring);
    $keywords = implode(' ', $keywords);
    return $keywords;                      
    }

然而,现在不行了。我通过使用echo($query)测试了一下,发现谷歌处理引荐查询请求的方式已经改变。 以前的 $query 包括

"q=term1%20term2%20term3%20...

然而现在,当 $query 被 echo 时,我得到了以下输出:

sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCsQFjAB&url=http%3A%2F%2Fexample.com%2F&ei=vDA-UNnxHuOjyAHlloGYCA&usg=AFQjCNEvzNXHULR0OvoPMPSWxIlB9-fmpg&sig2=iPinsBaCFuhCLGFf0JHAsQ
有什么方法可以避开这个问题吗?

我遇到了同样的问题。你找到任何解决方案了吗? - Karthik
4个回答

14

1
    // take the referer
$thereferer = strtolower($_SERVER['HTTP_REFERER']);
// see if it comes from google
if (strpos($thereferer,"google")) {
    // delete all before q=
    $a = substr($thereferer, strpos($thereferer,"q="));     
    // delete q=
    $a = substr($a,2);
    // delete all FROM the next & onwards
    if (strpos($a,"&")) {
        $a = substr($a, 0,strpos($a,"&"));
    }   
    // we have the results.
    $mygooglekeyword = urldecode($a);
}

1

我这周也遇到了同样的问题。我不确定这对您是否仍然相关,但我发现Google大约一年前为已登录用户启动了SSL(安全套接字层)搜索,而且看起来SSL搜索现在可能适用于所有Google搜索查询。当我测试时,我没有登录Google并使用Firefox,但仍然得到了加密的引用查询。

这篇文章提供了一些有用的背景信息和一些处理特定搜索词数据的想法:http://searchenginewatch.com/article/2227114/5-Tips-for-Handling-Not-Provided-Data


0

Google为所有搜索启用了SSL,这些信息只能通过Google Analytics获得。 然而,对于付费广告活动,像Google、Bing和Yahoo这样的搜索引擎使用查询字符串参数,如utm_parameters,您可以从参数utm_term中访问搜索查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接