2010-12-01 11 views
4

Ich habe meine gesamte Website mit AJAX (in der Tat ist es GWT) gebaut. Ich habe auch das von Google vorgeschlagene AJAX-Crawling implementiert. Nach der Implementierung habe ich jedoch festgestellt, dass weder Yahoo, Bing noch Baidu dieses Schema implementiert haben!Wie identifiziert man den Client als Suchroboter?

Ich frage mich, ob es eine Möglichkeit gibt, den Webclient zu identifizieren, ist ein Suchroboter. Wenn dies der Fall ist, wird ihnen der von mir erstellte HTML-Snapshot angezeigt.

Es wird am besten sein, wenn ich sie in APACHE-Ebene identifizieren kann, dann kann ich einfach ein mod_rewrite machen. Aber es ist immer noch in Ordnung, wenn ich das in PHP oder GWT machen kann.

Antwort

1

es zu tun mit Apache können Sie einen rewriteRule zusammen mit einem RewriteCond auf %{HTTP_USER_AGENT} verwenden.

Der RewriteCond akzeptiert RegExp, daher müssen Sie dort ein Muster verwenden, das mit all diesen Bots übereinstimmt (Informationen zum Erstellen des Musters finden Sie auf der Seite, die mit acme verknüpft ist).

Aber Vorsicht: Suchmaschinen können Seiten bestrafen, die unterschiedliche Inhalte an die Bots und an die anderen Clients liefern.

2

Es ist ziemlich schwierig, da es so viele verschiedene Suchmaschinen gibt. Ich denke, das kann nicht in einem einzigen Liner gemacht werden. Wenn PHP in Ordnung ist, empfehle ich die Verwendung von php_browscap.ini (verfügbar für verschiedene Sprachen). Dies kann zum Beispiel mit P HPs get_browser()-function verwendet werden.

Dann können Sie gegen alle anderen Browser-Sachen und natürlich Bots überprüfen.

In meinem eigenen Code-Schnipsel verwende ich die folgende Funktion (auf der Grundlage der genannten browscap) die entsprechenden Angaben einfach in meinem Code zu bekommen:

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); 
} 

Beispiele:

/* 
// 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>'; 
Verwandte Themen