2009-06-02 7 views
17

Esto puede ser una pregunta estúpida, pero ¿es posible capturar lo que un usuario tipeó en un cuadro de búsqueda de Google, para que luego se pueda utilizar para generar una página dinámica en la página de destino de mi sitio web?¿Es posible capturar el término de búsqueda de la búsqueda de Google?

Por ejemplo, digamos que alguien busca en Google "hot dog", y mi sitio aparece como uno de los enlaces de búsqueda de resultados. Si el usuario hace clic en el enlace que los dirige a mi sitio web, ¿es posible que yo sepa o capture el texto del "hot dog" en el cuadro de búsqueda de Google, para que pueda llamar un script que busca contenido en mi base de datos local? relacionado con perros calientes, y luego mostrar eso? Me parece totalmente imposible, pero realmente no lo sé. Gracias.

+1

Tenga en cuenta que la referencia puede ser falsificada o bloqueada por completo a los caprichos del cliente. – Powerlord

+1

solo una nota, ya que eres nuevo: no aceptes tan rápido la primera respuesta. solo porque tiene 1 voto positivo, no significa que sea correcto – TStamper

+0

@TStamper: Buen punto y gracias por la sugerencia. Estaba demasiado emocionado por la rapidez con que obtuve una respuesta. – johnnyb10

Respuesta

13

Sí, es posible. Vea el encabezado HTTP Referer. El encabezado Referer contendrá la URL de la página de resultados de búsqueda de Google.

Cuando el usuario hace clic en un enlace en una página de resultados de Google, el navegador va a hacer una petición a su sitio con este tipo de encabezado HTTP:

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

Sólo PARSE URL del encabezado de la solicitud, el término de búsqueda utilizado por usuario estará en q -parameter. El término de búsqueda utilizado en el ejemplo anterior es "http referer de referencia".

El mismo tipo de enfoque generalmente funciona también para otros motores de búsqueda, solo tienen diferentes tipos de URL en el encabezado de Referer.

Este answer muestra cómo implementar esto en PHP.


cabecera Referer sólo está disponible con HTTP 1.1, pero que cubre casi cualquier navegador algo moderno. El navegador también puede falsificar encabezado Referer o el encabezado puede faltar por completo, así que no haga desiciones demasiado serias basadas en el encabezado Referer.

+3

Exceptuando que, para que su página aparezca en los resultados de búsqueda, ya debe tener contenido relevante – kdgregory

+6

Debido a cambios de seguridad de Google a finales de 2011, esto ya no es posible cuando la búsqueda fue realizada por un usuario de Google que inició sesión: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html y http : //analytics.blogspot.com/2011/10/making-search-more-secure-accessing.html –

1

Sí, se trata en la url:

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

aquí es un ejemplo:

Google envía a muchos visitantes a su sitio, si desea obtener las palabras clave que solían venir a su sitio, tal vez para impresionarlos mostrándolo en la página, o simplemente para almacenar la palabra clave en una base de datos, aquí está el código PHP que 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, gracias a todos. Soy un novato humillado. Publiqué mi pregunta hace CUATRO MINUTOS y obtuve tres respuestas útiles. Reglas de desbordamiento de pila – johnnyb10

+1

Hay formas mucho mejores de hacerlo que esto. PHP tiene una función incorporada para analizar una url. parse_url, parse_str hace estas 3 líneas. –

0

Puede tomar la URL de referencia y tomar el término de búsqueda de la cadena de consulta. La búsqueda estará en la consulta como "q = searchTerm" donde searchTerm es el texto que desea.

24

lo haría como esto

$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 forma mucho más limpia de hacerlo. –

+1

+1 para hacer que el código sea compatible con los nombres de dominio internacionales de google (google.fi, google.de, etc.) y con la búsqueda de imágenes de Google. –

+1

gracias! Me imagino que todavía hay un potencial aquí para un falso positivo, alguien con google.domain.com, pero esto fue solo un ejemplo. Podría ajustarlo también verificando el valor de $referencePage ['path'] y, después de eso, un simple isset() comprobar $ queryVars ['q'] –

0

lo mismo, pero con un poco de manipulación

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

Lo sentimos error, un poco más
añade soporte para Bing, Yahoo y 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 parece ser propiedad de yahoo, cuando buscas con ella te redirigen a la página de búsqueda de yahoo, entonces la búsqueda de yahoo.en el encabezado cubre ambos motores de búsqueda – Senya

13

Esta es una pregunta antigua y la respuesta ha cambiado desde el o La pregunta original fue hecha y respondida. A partir de octubre de 2011, Google encripta esta información de referencia para cualquier persona que haya iniciado sesión en una cuenta de Google: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html

Para los usuarios que no iniciaron sesión en Google, las palabras clave de búsqueda todavía se encuentran en la URL de referencia y las respuestas anteriores aún se aplican. Sin embargo, para los usuarios de Google autenticados, no hay forma de que un sitio web vea sus palabras clave de búsqueda.

Sin embargo, al crear páginas de destino dedicadas, aún es posible hacer una suposición inteligente. (Los visitantes de la página "Bocetos de carbón dignos de Jabba el Hutt" probablemente sean ... bueno, locos.)

5

Esta es una vieja pregunta, pero descubrí que Google ya no da el término de búsqueda porque de manera predeterminada redirige a cada usuario a https, lo que no le dará el parámetro "q". A menos que alguien ingrese manualmente la url de google con http (http://google.com) y luego busque, no hay forma de que ahora obtenga el parámetro "q".

+0

Esta es la respuesta que temía encontrar. Me di cuenta de que mi seguimiento de búsqueda ahora no tiene ninguno de los términos de búsqueda y esta debe ser la razón. – felwithe

Cuestiones relacionadas