Pregunta

Estoy tratando de obtener la palabra clave de búsqueda de una URL de referencia. Actualmente, estoy usando el siguiente código para las URL de Google. Pero a veces no funciona ...

$query_get = "(q|p)";
$referrer = "http://www.google.com/search?hl=en&q=learn+php+2&client=firefox";
preg_match('/[?&]'.$query_get.'=(.*?)[&]/',$referrer,$search_keyword);

¿Hay otra forma de / limpiar / trabajar para hacer esto?

Gracias, Prasad

¿Fue útil?

Solución

Si está utilizando PHP5, eche un vistazo a http://php.net/parse_url y http://php.net/parse_str

Ejemplo:

// The referrer
$referrer = 'http://www.google.com/search?hl=en&q=learn+php+2&client=firefox';

// Parse the URL into an array
$parsed = parse_url( $referrer, PHP_URL_QUERY );

// Parse the query string into an array
parse_str( $parsed, $query );

// Output the result
echo $query['q'];

Otros consejos

Hay diferentes cadenas de consulta en diferentes motores de búsqueda. Después de probar el método de Wiliam, he descubierto mi propio método. (Porque, Yahoo está usando 'p', pero a veces 'q')

$referrer = "http://search.yahoo.com/search?p=www.stack+overflow%2Ccom&ei=utf-8&fr=slv8-msgr&xargs=0&pstart=1&b=61&xa=nSFc5KjbV2gQCZejYJqWdQ--,1259335755";
$referrer_query = parse_url($referrer);
$referrer_query = $referrer_query['query'];
$q = "[q|p]"; //Yahoo uses both query strings, I am using switch() for each search engine
preg_match('/'.$q.'=(.*?)&/',$referrer,$keyword);
$keyword = urldecode($keyword[1]);
echo $keyword; //Outputs "www.stack overflow,com"

Gracias, Prasad

Para complementar las otras respuestas, tenga en cuenta que el parámetro de cadena de consulta que contiene los términos de búsqueda varía según el proveedor de búsqueda. Este fragmento de PHP muestra el parámetro correcto a utilizar:

$search_engines = array(
    'q' => 'alltheweb|aol|ask|ask|bing|google',
    'p' => 'yahoo',
    'wd' => 'baidu',
    'text' => 'yandex'
);

Fuente: http://betterwp.net/wordpress-tips / get-search-keywords-from-referrer /

<?php 
class GET_HOST_KEYWORD 
{ 
    public function get_host_and_keyword(<*>url) { 
        $p = $q = "";
        $chunk_url = parse_url(<*>url); 
        <*>data["host"] = ($chunk_url['host'])?$chunk_url['host']:''; 
        parse_str($chunk_url['query']); 
        <*>data["keyword"] = ($p)?$p:(($q)?$q:''); 
        return <*>data; 
    } 
}     
// Sample Example 
$obj = new GET_HOST_KEYWORD(); 
print_r($obj->get_host_and_keyword('http://www.google.co.in/search?sourceid=chrome&ie=UTF-&q=hire php php programmer')); 

// sample output
//Array
//(
//    [host] => www.google.co.in
//    [keyword] => hire php php programmer
//)

// $search_engines = array(
//    'q' => 'alltheweb|aol|ask|ask|bing|google',
//    'p' => 'yahoo',
//    'wd' => 'baidu',
//    'text' => 'yandex'
//);


?>
$query = parse_url($request, PHP_URL_QUERY);

Este debería funcionar para Google, Bing y, a veces, Yahoo Search:

if( isset(

Este debería funcionar para Google, Bing y, a veces, Yahoo Search:

<*>SERVER['HTTP_REFERER']) &&

Este debería funcionar para Google, Bing y, a veces, Yahoo Search:

<*>SERVER['HTTP_REFERER']) { $query = getSeQuery(

Este debería funcionar para Google, Bing y, a veces, Yahoo Search:

<*>SERVER['HTTP_REFERER']); echo $query; } else { echo "I think they spelled REFERER wrong? Anyways, your browser says you don't have one."; } function getSeQuery($url = false) { $segments = parse_url($url); $keywords = null; if($query = isset($segments['query']) ? $segments['query'] : (isset($segments['fragment']) ? $segments['fragment'] : null)) { parse_str($query, $segments); $keywords = isset($segments['q']) ? $segments['q'] : (isset($segments['p']) ? $segments['p'] : null); } return $keywords; }

Creo que Google y Yahoo han actualizado su algoritmo para excluir las palabras clave de búsqueda y otros parámetros en la URL que no pueden recibirse usando el método http_referrer.

Por favor, avíseme si las recomendaciones anteriores seguirán proporcionando las palabras clave de búsqueda.

Lo que estoy recibiendo ahora se encuentra a continuación cuando utilizo la referencia http en mi sitio web.

de google: https://www.google.co.in/ de yahoo: https://in.yahoo.com/

Ref: https: //webmasters.googleblog .com / 2012/03 / next-changes-in-googles-http.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top