17

这可能是一个愚蠢的问题,但是否有可能捕获用户在 Google 搜索框中输入的内容,然后可以将其用于在我的网站的登录页面上生成动态页面?

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

4

8 回答 8

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
}
于 2009-06-02T19:43:24.110 回答
17

这是一个古老的问题,自从提出并回答了原始问题以来,答案已经改变。自 2011 年 10 月起,Google 将为登录 Google 帐户的任何人加密此推荐信息:http: //googleblog.blogspot.com/2011/10/making-search-more-secure.html

对于未登录 Google 的用户,搜索关键字仍然可以在推荐 URL 中找到,并且上述答案仍然适用。但是,对于经过身份验证的 Google 用户,网站无法查看他们的搜索关键字。

但是,通过创建专门的登录页面,仍然可以做出明智的猜测。(“赫特人贾巴庄严的木炭素描”页面的访问者可能......嗯,疯了。)

于 2012-04-06T23:07:58.860 回答
13

对的,这是可能的。请参阅 HTTP 标头Referer。Referer 标头将包含 Google 搜索结果页面的 URL。

当用户点击 Google 搜索结果页面上的链接时,浏览器将使用以下 HTTP 标头向您的站点发出请求:

Referer: http://www.google.fi/search?hl=en&q=http+header+referer&btnG=Google-search&meta=&aq=f&oq=

只需从请求标头中解析 URL,用户使用的搜索词将在q参数中。上面示例中使用的搜索词是“ http header referer ”。

同一种方法通常也适用于其他搜索引擎,它们只是在 Referer 标头中有不同类型的 URL。

这个答案显示了如何在 PHP 中实现它。


Referer 标头仅在 HTTP 1.1 中可用,但这几乎涵盖了任何现代浏览器。浏览器也可能会伪造Referer header,或者header可能完全丢失,所以不要根据Referer header做出太严重的决定。

于 2009-06-02T19:37:06.230 回答
6

这是一个老问题,但我发现谷歌不再给出查询词,因为它默认将每个用户重定向到 https,这不会给你“q”参数。除非有人使用 http ( http://google.com )手动输入 google url然后搜索,否则目前无法获取“q”参数。

于 2012-11-15T11:23:10.250 回答
1

是的,它来自网址:

http://www.google.com/search?hl=es&q=hot+dog&lr=&aq=f&oq=

这是一个例子:

谷歌向您的网站发送了许多访问者,如果您想获取他们曾经访问您网站的关键字,可能通过将其显示在页面上来给他们留下深刻印象,或者只是将关键字存储在数据库中,这是我的 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.
于 2009-06-02T19:37:17.697 回答
0

您可以获取引用 URL 并从查询字符串中获取搜索词。搜索将在查询中显示为“q=searchTerm”,其中 searchTerm 是您想要的文本。

于 2009-06-02T19:38:25.713 回答
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; }
?>
于 2011-09-20T00:44:33.853 回答
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"; }
?>
于 2011-09-20T00:23:15.260 回答