2010-12-01 12 views
4

J'ai construit tout mon site en utilisant AJAX (en effet c'est GWT). J'ai également implémenté le crawling AJAX proposé par Google. Cependant, après la mise en œuvre, j'ai constaté que ni Yahoo, ni Bing, ni Baidu ne mettaient en œuvre ce système!Comment identifier le client est un robot de recherche?

Je me demande s'il existe un moyen d'identifier le client Web est un robot de recherche. Si c'est le cas, on leur montrera l'instantané HTML que j'ai créé.

Il vaudra mieux que je puisse les identifier au niveau APACHE, alors je peux simplement faire un mod_rewrite. Mais c'est toujours correct si je peux le faire en PHP ou GWT.

Répondre

1

Pour le faire avec Apache vous pouvez utiliser un rewriteRule avec un RewriteCond sur %{HTTP_USER_AGENT}. Le RewriteCond accepte RegExp, vous devez donc utiliser un pattern qui correspond à tous ces bots (vous devriez trouver des informations sur la façon de construire le pattern sur la page liée par acme). Mais attention: les moteurs de recherche peuvent pénaliser les pages qui fournissent des contenus différents aux bots et aux autres clients.

2

C'est assez compliqué car il y a tellement de moteurs de recherche différents. Je suppose que cela ne peut pas être fait dans un seul paquebot. Si PHP est correct, je suggère d'utiliser php_browscap.ini (disponible pour différentes langues). Cela peut être utilisé avec P HPs get_browser()-function, par exemple.

Ensuite, vous pouvez vérifier tous les différents aspects du navigateur et bien sûr Bots.

Dans mes propres extraits de code utiliser la fonction suivante (sur la base browscap mentionné) pour obtenir les infos appropriés facilement dans mon code:

function _browser($a_browser = false, $a_version = false, $name = false) 
{ 
$browser_list = 'msie firefox konqueror safari netscape navigator opera mosaic lynx amaya omniweb chrome avant camino flock seamonkey aol mozilla gecko'; 
$user_browser = strtolower($_SERVER['HTTP_USER_AGENT']); 
$this_version = $this_browser = ''; 

$browser_limit = strlen($user_browser); 
foreach ($this->_w($browser_list) as $row) 
{ 
    $row = ($a_browser !== false) ? $a_browser : $row; 
    $n = stristr($user_browser, $row); 
    if (!$n || !empty($this_browser)) continue; 

    $this_browser = $row; 
    $j = strpos($user_browser, $row) + strlen($row) + 1; 
    for (; $j <= $browser_limit; $j++) 
    { 
     $s = trim(substr($user_browser, $j, 1)); 
     $this_version .= $s; 

     if ($s === '') break; 
    } 
} 

if ($a_browser !== false) 
{ 
    $ret = false; 
    if (strtolower($a_browser) == $this_browser) 
    { 
     $ret = true; 

     if ($a_version !== false && !empty($this_version)) 
     { 
      $a_sign = explode(' ', $a_version); 
      if (version_compare($this_version, $a_sign[1], $a_sign[0]) === false) 
      { 
       $ret = false; 
      } 
     } 
    } 

    return $ret; 
} 

// 
$this_platform = ''; 
if (strpos($user_browser, 'linux')) 
{ 
    $this_platform = 'linux'; 
} 
elseif (strpos($user_browser, 'macintosh') || strpos($user_browser, 'mac platform x')) 
{ 
    $this_platform = 'mac'; 
} 
else if (strpos($user_browser, 'windows') || strpos($user_browser, 'win32')) 
{ 
    $this_platform = 'windows'; 
} 

if ($name !== false) 
{ 
    return $this_browser . ' ' . $this_version; 
} 

return array(
    "browser"  => $this_browser, 
    "version"  => $this_version, 
    "platform"  => $this_platform, 
    "useragent" => $user_browser 
); 
} 

function _w($a = '') 
{ 
    if (empty($a)) return array(); 

    return explode(' ', $a); 
} 

Exemples:

/* 
// Examples 

echo '<pre>'; 
print_r(_browser()); // return array of browser data 

var_dump(_browser('firefox')); // return true if using firefox 
var_dump(_browser('msie', '>= 7.0')); // return true if using IE 7.0 or above else false 
var_dump(_browser('firefox', '< 3.0.5')); // return true if using below firefox 3.0.5 (can check minor version) 
var_dump(_browser(false, false, true)); // return string of name of browser and version 

// To check if Gecko browser is used 
var_dump(_browser('gecko')); 

// version_compared function is used so you can use the same operator syntax 
var_dump(_browser('firefox', 'le 1.5')); 

echo '</pre>'; 
1

Si vous utilisez PHP, vous pouvez vérifier $_SERVER['HTTP_USER_AGENT'] contre la chaîne du moteur de recherche chaîne User Agent - certains détails se trouvent ici: http://en.wikipedia.org/wiki/Web_crawler

Vous pouvez également utiliser un plugin Firefox pour voir comment les moteurs de recherche verront votre page: http://chrispederick.com/work/user-agent-switcher/

+0

Vous pouvez également utiliser ce http://www.useragentstring.com/pages/Crawlerlist/ – Rahly