是否可以从Google搜索中捕获搜索字词?

时间:2009-06-02 19:33:20

标签: php html search http-referer

这可能是一个愚蠢的问题,但是有可能捕获用户在Google搜索框中键入的内容,以便可以在我的网站上的目标网页上生成动态页面吗?

例如,假设有人在Google上搜索“热狗”,我的网站会显示为搜索结果链接之一。如果用户点击指向他们链接到我网站的链接,我是否可以以某种方式从Google搜索框中了解或捕获“热狗”文本,以便我可以调用在本地数据库中搜索内容的脚本有关热狗,然后显示?对我来说似乎完全不可能,但我真的不知道。感谢。

8 个答案:

答案 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; }
?>