就在两天前,以下代码用于从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)对其进行了测试,看来google进程引用查询请求的方式已经改变。以前$查询包括
"q=term1%20term2%20term3%20...
但是,现在,当$ query被回显时,我得到以下输出:
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
有没有办法解决这个问题?
答案 0 :(得分:11)
很抱歉,但这是谷歌政治的全球变化。
参见网站链接
http://googlewebmastercentral.blogspot.ru/2012/03/upcoming-changes-in-googles-http.html
这意味着如果用户登录Google帐户。 您可以自己尝试:如果您的Google搜索网址以https://开头,则表示Google会隐藏一些临时参数以保护隐私。
答案 1 :(得分:1)
本周我也遇到了同样的问题。我不确定这是否仍然与您相关,但我发现Google发起的SSL(安全套接字层)搜索大约一年前签名的用户,看起来SSL搜索现在可能应用于所有Google搜索查询。当我测试这个时,我没有登录Google并使用Firefox并且仍然获得了加密的引用查询。
本文有一些有用的背景知识和一些没有特定搜索字词数据的工作方法:http://searchenginewatch.com/article/2227114/5-Tips-for-Handling-Not-Provided-Data
答案 2 :(得分: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);
}
答案 3 :(得分:0)
Google为所有搜索启动了SSL,并且只能通过Google Analytics获取这些信息。 但是,对于付费广告系列,Google,Bing和Yahoo等搜索引擎会使用utm_parameters等查询字符串参数,您可以从 utm_term 参数中访问搜索查询。