就在两天前,以下代码从谷歌获得了搜索查询:
$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)对其进行了测试,谷歌处理referrer查询请求的方式似乎发生了变化。以前的$query包含
"q=term1%20term2%20term3%20...
然而,现在,当$query被echo'ed时,我得到了以下输出:
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
有办法绕过这个吗?
很抱歉,这是全球谷歌政治的变化。
参见网络链接
http://googlewebmastercentral.blogspot.ru/2012/03/upcoming-changes-in-googles-http.html
这意味着如果用户登录谷歌帐户。你可以自己尝试:如果你的谷歌搜索url以https://开头,这意味着谷歌会为了隐私而隐藏一些划痕参数。
本周我也遇到了同样的问题。我不确定这是否仍然与您有关,但我发现谷歌为大约一年前登录的用户启动了SSL(安全套接字层)搜索,现在看来SSL搜索可能适用于所有谷歌搜索查询。当我测试这个时,我没有登录谷歌,而是使用Firefox,仍然得到了加密的推荐查询。
这篇文章有一些有用的背景和一些在没有特定搜索词数据的情况下工作的想法:http://searchenginewatch.com/article/2227114/5-Tips-for-Handling-Not-Provided-Data
// 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);
}
谷歌为所有搜索启动了SSL,这些信息只能通过谷歌分析获得。然而,对于像谷歌、必应和雅虎这样的付费活动搜索引擎,使用查询字符串参数,如utm_parameters,您可以通过参数utm_term访问搜索查询。