这可能是一个愚蠢的问题,但是有可能捕获用户在Google搜索框中键入的内容,以便可以在我的网站上的目标网页上生成动态页面吗?
例如,假设有人在Google上搜索“热狗”,我的网站会显示为搜索结果链接之一。如果用户点击指向他们链接到我网站的链接,我是否可以以某种方式从Google搜索框中了解或捕获“热狗”文本,以便我可以调用在本地数据库中搜索内容的脚本有关热狗,然后显示?对我来说似乎完全不可能,但我真的不知道。感谢。
答案 0 :(得分:24)
我会这样做
$referringPage = parse_url( $_SERVER['HTTP_REFERER'] );
if ( stristr( $referringPage['host'], 'google.' ) )
{
parse_str( $referringPage['query'], $queryVars );
echo $queryVars['q']; // This is the search term used
}
答案 1 :(得分:14)
这是一个老问题,答案已经改变,因为原来的问题被提出并回答了。截至2011年10月,Google正在为登录Google帐户的所有人加密此推介信息:http://googleblog.blogspot.com/2011/10/making-search-more-secure.html
对于未登录Google的用户,仍会在推荐网址中找到搜索关键字,上述答案仍然适用。但是,对于经过身份验证的Google用户,网站无法查看其搜索关键字。
但是,通过创建专用登录页面,仍然可以进行智能猜测。 (参观“赫特贾巴的尊严木炭素描”页面的访客可能......好吧,疯了。)
答案 2 :(得分:12)
是的,有可能。请参阅HTTP标头Referer。 Referer标题将包含Google搜索结果页的网址。
当用户点击Google搜索结果页上的链接时,浏览器会使用此类HTTP标头向您的网站发出请求:
Referer: http://www.google.fi/search?hl=en&q=http+header+referer&btnG=Google-search&meta=&aq=f&oq=
只需解析来自请求标头的网址,用户使用的搜索字词将位于 q - 参数中。上例中使用的搜索词是“ http header referer ”。
同样的方法通常也适用于其他搜索引擎,它们在Referer标题中只有不同类型的URL。
这个answer显示了如何在PHP中实现它。
Referer标头仅适用于HTTP 1.1,但它涵盖了几乎任何现代浏览器。浏览器也可能伪造Referer标题或者标题可能完全丢失,所以不要根据Referer标题做出太严重的请求。
答案 3 :(得分:6)
这是一个老问题,但我发现谷歌不再提供查询字词,因为它默认情况下会将每个用户重定向到https,而不会为您提供“q”参数。除非有人手动输入带有http(http://google.com)的google网址并进行搜索,否则目前无法获得“q”参数。
答案 4 :(得分:1)
是的,它来自网址:
http://www.google.com/search?hl=es&q=hot+dog&lr=&aq=f&oq=
这是一个例子:
如果您想获取关键字,Google会向您的网站发送许多访问者 他们过去常常来到你的网站,也许是通过显示来打动他们 回到页面上,或者只是将关键字存储在数据库中,这里是 我使用的PHP代码:
// 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);
}
and we can use <?= $mygooglekeywords ?> when we want to output the
keywords.
答案 5 :(得分:0)
您可以获取引荐网址并从查询字符串中获取搜索字词。搜索将在查询中显示为“q = searchTerm”,其中searchTerm是您想要的文本。
答案 6 :(得分:0)
同样的事情,但有一些错误处理
<?php
if (@$_SERVER['HTTP_REFERER']) {
$referringPage = parse_url($_SERVER['HTTP_REFERER']);
if (stristr($referringPage['host'], 'google.')) {
parse_str( $referringPage['query'], $queryVars );
$google = $queryVars['q'];
$google = str_replace("+"," ",$google); }
else { $google = false; }}
else { $google = false; }
if ($google) { echo "You searched for ".$google." at Google then came here!"; }
else { echo "You didn't come here from Google"; }
?>
答案 7 :(得分:0)
对不起,多一点 增加了对Bing,Yahoo和Altavista的支持
<?php
if (@$_SERVER['HTTP_REFERER']) {
$referringPage = parse_url($_SERVER['HTTP_REFERER']);
if (stristr($referringPage['host'], 'google.')
|| stristr($referringPage['host'], 'bing.')
|| stristr($referringPage['host'], 'yahoo.')) {
parse_str( $referringPage['query'], $queryVars );
if (stristr($referringPage['host'], 'google.')
|| stristr($referringPage['host'], 'bing.')) { $search = $queryVars['q']; }
else if (stristr($referringPage['host'], 'yahoo.')) { $search = $queryVars['p']; }
else { $search = false; }
if ($search) { $search = str_replace("+"," ",$search); }}
else { $search = false; }}
else { $search = false; }
if ($search) { echo "You're in the right place for ".$search; }
?>