2009-06-02 7 views
17

Questa potrebbe essere una domanda stupida, ma è possibile catturare ciò che un utente ha digitato in una casella di ricerca di Google, in modo che questo possa essere utilizzato per generare una pagina dinamica nella pagina di destinazione sul mio sito Web?È possibile acquisire termini di ricerca dalla ricerca di Google?

Ad esempio, supponiamo che qualcuno cerchi Google come "hot dog" e il mio sito si presenta come uno dei collegamenti dei risultati di ricerca. Se l'utente fa clic sul collegamento che li indirizza al mio sito Web, è possibile che conosca o acquisisca in qualche modo il testo "hot dog" dalla casella di ricerca di Google, in modo da poter richiamare uno script che cerca il contenuto del mio database locale legati agli hot dog, e poi mostrarli? Mi sembra del tutto impossibile, ma non lo so davvero. Grazie.

+1

Essere consapevoli del fatto che il referente può essere falsificato o bloccato interamente ai capricci del cliente. – Powerlord

+1

solo una nota, visto che sei nuovo: non essere così veloce ad accettare la prima risposta. solo perché ha 1 upvote, non significa che è giusto – TStamper

+0

@TStamper: buon punto e grazie per il suggerimento. Ero troppo eccitato per quanto velocemente ho avuto una risposta. – johnnyb10

risposta

13

Sì, è possibile. Vedere l'intestazione HTTP Referer. L'intestazione Referer conterrà l'URL della pagina dei risultati di ricerca di Google.

Quando l'utente fa clic su un collegamento in una pagina dei risultati di ricerca di Google, il browser farà una richiesta al tuo sito con questo tipo di intestazione HTTP:

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

Proprio parsing URL dalla richiesta di intestazione, il termine di ricerca usato dall'utente sarà in q -parametro. Il termine di ricerca utilizzato nell'esempio precedente è "http header referer".

Lo stesso tipo di approccio di solito funziona anche per altri motori di ricerca, hanno solo un diverso tipo di URL nell'intestazione Referer.

Questo answer mostra come implementarlo in PHP.


L'intestazione di referer è disponibile solo con HTTP 1.1, ma copre praticamente qualsiasi browser un po 'moderno. Il browser potrebbe anche falsificare l'intestazione del Referer o l'intestazione potrebbe mancare del tutto, quindi non prendere in considerazione le intenzioni troppo serie basate sull'intestazione del Referer.

+3

Ad eccezione del fatto che, per avere la pagina visualizzata nei risultati di ricerca, è già necessario disporre di contenuti pertinenti – kdgregory

+6

a causa di modifiche alla sicurezza di Google alla fine del 2011, questo non è più possibile quando la ricerca è stata eseguita da un utente Google che ha eseguito l'accesso: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html e http : //analytics.blogspot.com/2011/10/making-search-more-secure-accessing.html –

1

Sì, si tratta in url:

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

Ecco un esempio:

Google invia molti visitatori del tuo sito, se si desidera ottenere le parole chiave hanno usato per venire al tuo sito, forse per impressionarli visualizzandolo nella pagina o semplicemente per memorizzare la parola chiave in un database, ecco il codice PHP che 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. 
+1

Wow, grazie a tutti. Sono un principiante umiliato. Ho postato la mia domanda QUATTRO MINUTI fa e ho ricevuto tre risposte utili. Stack Overflow rules! – johnnyb10

+1

Ci sono molti modi migliori per farlo. PHP ha una funzione incorporata per analizzare un url. parse_url, parse_str rende queste 3 linee. –

0

È possibile prendere l'URL di riferimento e afferrare il termine di ricerca dalla stringa di query. La ricerca sarà nella query come "q = searchTerm" dove searchTerm è il testo che desideri.

24

lo farei in questo modo

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

+1 molto più pulito per farlo. –

+1

+1 per rendere il codice compatibile con i nomi di dominio google internazionali (google.fi, google.de, ecc.) E con la ricerca di immagini google. –

+1

grazie! Immagino che ci sia ancora un potenziale per un falso positivo - qualcuno con google.domain.com - ma questo era solo un esempio. Potresti rafforzarlo controllando anche il valore di $ referringPage ['path'] e, successivamente, un semplice controllo isset() su $ queryVars ['q'] –

0

stessa cosa, ma con un po 'di movimentazione

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

spiacenti errori, un po' più
aggiunge il supporto per 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; } 
?> 
+0

NB: altavista sembra essere di proprietà di yahoo, quando si cerca con esso si viene reindirizzati alla pagina di ricerca di yahoo, quindi la ricerca di yahoo.nell'intestazione copre entrambi i motori di ricerca – Senya

13

Questa è una vecchia domanda e la risposta è cambiata da quando il o È stata posta una domanda originale e ha risposto. A partire da ottobre 2011 Google sta crittografando queste informazioni di riferimento per chiunque abbia effettuato l'accesso a un account Google: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html

Per gli utenti che non hanno effettuato l'accesso a Google, le parole chiave di ricerca sono ancora presenti nell'URL di riferimento e le risposte sopra riportate si applicano ancora. Tuttavia, per gli utenti Google autenticati, non esiste un modo per un sito Web di visualizzare le proprie parole chiave di ricerca.

Tuttavia, creando pagine di destinazione dedicate potrebbe essere ancora possibile fare una congettura intelligente. (I visitatori della pagina "Dignified charcoal charcoal of Jabba the Hutt" sono probabilmente ... beh, pazzi.)

5

Questa è una vecchia domanda ma ho scoperto che Google non fornisce più il termine di ricerca perché di default reindirizza ogni utente a https che non ti darà il parametro "q". A meno che qualcuno inserisca manualmente l'URL di Google con http (http://google.com) e poi esegua la ricerca, non è più possibile ottenere il parametro "q".

+0

Questa è la risposta che temevo troverei. Avevo notato che il mio monitoraggio delle ricerche ora non ha nessuno dei termini di ricerca e questo deve essere il motivo. – felwithe