Подтвердить что ты не робот

Можно ли зафиксировать поисковый запрос из поиска Google?

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

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

4b9b3361

Ответ 1

Да, это возможно. См. 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-заголовок".

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

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


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

Ответ 2

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

$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
}

Ответ 3

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

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

Однако, создавая целевые целевые страницы, возможно, все еще можно сделать разумную догадку. (Посетители "Знаменитых угольных зарисовки Джабба Хатта", вероятно,... ну, безумные.)

Ответ 4

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

Ответ 5

Да, он входит в 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.

Ответ 6

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

Ответ 7

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

<?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"; }
?>

Ответ 8

Извините, немного больше
Добавляет поддержку Bing, Yahoo и Altavista​​p >

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