Pergunta

Esta pode ser uma pergunta estúpida, mas é possível capturar o que um usuário digitado em uma caixa de pesquisa Google, para que este, em seguida, pode ser usado para gerar uma página dinâmica na página de destino no meu Web site?

Por exemplo, digamos que alguém procura no Google por "cachorro-quente", e meu site aparece como um dos links de resultados de pesquisa. Se o usuário clica no link que direciona-los para o meu site, é possível para mim de alguma forma saber ou capturar o texto "cachorro-quente" da caixa de pesquisa do Google, de modo que eu posso chamar um script que pesquisas meu banco de dados local para o conteúdo relacionadas com cachorros-quentes, e, em seguida, exibir isso? Parece totalmente impossível para mim, mas eu realmente não sei. Obrigado.

Foi útil?

Solução

Sim, é possível. Veja cabeçalho HTTP Referer . O cabeçalho Referer conterá URL da página de resultados de pesquisa do Google.

Quando o usuário clica em um link em uma página de resultados de pesquisa do Google, o navegador irá fazer um pedido para o seu site com esse tipo de cabeçalho HTTP:

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

Apenas URL de análise de cabeçalho do pedido, o termo de busca utilizado pelo usuário estará em q -parameter. Buscar termo usado no exemplo acima é " http cabeçalho de referência ".

O mesmo tipo de abordagem geralmente funciona também para outros motores de busca, eles só têm diferentes tipos de URL em Referer cabeçalho.

Esta resposta mostra como implementar isso em PHP.


Referer cabeçalho só está disponível com HTTP 1.1, mas que cobre praticamente qualquer navegador um pouco moderno. Navegador também pode forjar Referer cabeçalho ou o cabeçalho pode estar faltando completamente, portanto, não fazer desicions muito graves com base em Referer cabeçalho.

Outras dicas

Eu faria isso como este

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

Esta é uma velha questão ea resposta mudou desde que a pergunta original foi feita e respondida. Em outubro de 2011 via é criptografar esta informação de referência para quem está logado em uma conta do Google: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html

Para os usuários não registrados no Google, as palavras-chave de busca estão ainda encontrada no URL de referência e as respostas acima ainda se aplicam. No entanto, para os usuários do Google autenticadas, não há nenhuma maneira de um site para ver as suas palavras-chave de busca.

No entanto, com a criação de páginas de destino dedicado pode ainda ser possível fazer uma suposição inteligente. (Os visitantes do "desenhos a carvão dignos de Jabba the Hutt" página são provavelmente ... bem, insano.)

Esta é uma questão de idade, mas eu descobri que o Google não mais dá o termo de consulta, porque por padrão redireciona todos os usuários para https que não lhe dará o parâmetro "q". A menos que alguém entra manualmente a URL do Google com http ( http://google.com ) e, em seguida, pesquisas, não há nenhuma maneira como de agora para obter o parâmetro "q".

Sim, ele vem na url:

http://www.google.com/ procurar? hl = es & q = + cachorro-quente & lr = & aq = f & oq =

aqui é um exemplo:

O Google envia muitos visitantes ao seu site, se você quiser obter as palavras-chave eles usaram para chegar ao seu site, talvez para impressioná-los, exibindo-o Retornar à página, ou apenas para armazenar a palavra-chave em um banco de dados, aqui está a PHP código que eu uso:

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

Você pode pegar o URL de referência e agarrar o termo de pesquisa a partir da string de consulta. A pesquisa será na consulta como "q = searchTerm" onde searchTerm é o texto que deseja.

A mesma coisa, mas com alguma manipulação de erro

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

Desculpe, um pouco mais
Adiciona suporte para o Bing, Yahoo e 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; }
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top