Можно ли получить поисковый запрос из поиска Google? - PullRequest
17 голосов
/ 02 июня 2009

Это может быть глупый вопрос, но возможно ли зафиксировать то, что пользователь ввел в поле поиска Google, чтобы затем его можно было использовать для создания динамической страницы на целевой странице на моем веб-сайте?

Например, скажем, кто-то ищет в Google «хот-дог», и мой сайт появляется как одна из ссылок на результаты поиска. Если пользователь щелкает ссылку, которая направляет его на мой веб-сайт, могу ли я каким-то образом узнать или захватить текст «хот-дога» из окна поиска Google, чтобы я мог вызвать сценарий, который ищет содержимое в моей локальной базе данных связанные с хот-догами, а затем показать это? Это кажется мне абсолютно невозможным, но я не знаю. Спасибо.

Ответы [ 8 ]

24 голосов
/ 02 июня 2009

Я бы сделал это так

$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
}
14 голосов
/ 07 апреля 2012

Это старый вопрос, и ответ изменился с тех пор, как был задан и дан ответ на оригинальный вопрос. По состоянию на октябрь 2011 года Google шифрует эту реферальную информацию для всех, кто вошел в учетную запись Google: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html

Для пользователей, не вошедших в Google, ключевые слова для поиска по-прежнему находятся в реферальном URL-адресе, и ответы выше все еще применяются. Однако для аутентифицированных пользователей Google веб-сайт не может увидеть их ключевые слова для поиска.

Тем не менее, создавая целевые страницы, вы все равно сможете сделать разумное предположение. (Посетители страницы «Достойные угольные рисунки Джаббы Хатта», вероятно, ... ну, безумны.)

12 голосов
/ 02 июня 2009

Да, это возможно. См. HTTP заголовок Referer . Заголовок Referer будет содержать URL страницы результатов поиска Google.

Когда пользователь нажимает ссылку на странице результатов поиска 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 ".

Такой же подход обычно работает и для других поисковых систем, у них просто есть другой тип URL в заголовке Referer.

Этот ответ показывает, как реализовать это в PHP.


Заголовок Referer доступен только с HTTP 1.1, но он охватывает практически любой современный браузер. Браузер может также подделать заголовок Referer или заголовок может вообще отсутствовать, поэтому не принимайте слишком серьезных решений на основе заголовка Referer.

6 голосов
/ 15 ноября 2012

Это старый вопрос, но я обнаружил, что Google больше не выдает термин запроса, потому что он по умолчанию перенаправляет каждого пользователя на https, который не даст вам параметр «q». Если кто-то не введет вручную URL-адрес Google с http (http://google.com)) и затем выполнит поиск, на данный момент нет способа получить параметр "q".

1 голос
/ 02 июня 2009

Да, это входит в URL:

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.
0 голосов
/ 20 сентября 2011

Извините, еще немного
Добавлена ​​поддержка 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; }
?>
0 голосов
/ 20 сентября 2011

То же самое, но с некоторой обработкой ошибок

<?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"; }
?>
0 голосов
/ 02 июня 2009

Вы можете получить ссылающийся URL и получить поисковый запрос из строки запроса. Поиск будет выполнен в запросе как "q = searchTerm", где searchTerm - это нужный вам текст.

...