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

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

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

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

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

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

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

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

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

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

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

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

вот пример:

Google отправляет много посетителей на ваш сайт, если вы хотите получить ключевые слова, которые они использовали для входа на ваш сайт, возможно, чтобы произвести впечатление на них, показывая его на странице или просто для хранения ключевого слова в базе данных, вот код PHP I использование:

 // 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. 

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

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

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

Извините, немного больше
Добавляет поддержку 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; } ?>