Как идентифицировать клиента поискового робота? - PullRequest
4 голосов
/ 01 декабря 2010

Я построил весь свой сайт, используя AJAX (на самом деле это GWT).Я также реализовал сканирование AJAX, предложенное Google.Однако после внедрения я обнаружил, что ни Yahoo, ни Bing, ни Baidu не реализовали эту схему!

Мне интересно, есть ли способ идентифицировать веб-клиента как поискового робота.Если это так, им будет показан созданный мной снимок HTML.

Будет лучше, если я смогу идентифицировать их на уровне APACHE, тогда я могу просто выполнить mod_rewrite.Но все еще нормально, если я могу сделать это на PHP или GWT.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2010

Это довольно сложно, так как есть много разных поисковых систем.Я думаю, что это не может быть сделано в один лайнер.Если с PHP все в порядке, я предлагаю использовать php_browscap.ini (доступно для разных языков).Это можно использовать, например, с P HPs get_browser () - функцией .

Затем вы можете проверить все браузеры и, конечно же, боты.собственные фрагменты кода Я использую следующую функцию (на основе упомянутого browscap), чтобы легко получить соответствующую информацию в моем коде:

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

Примеры:

<code>/*
// 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 '
';
1 голос
/ 01 декабря 2010

Если вы используете PHP, вы можете проверить $_SERVER['HTTP_USER_AGENT'] по строке строки агента пользователя поисковой системы - некоторые подробности находятся здесь: http://en.wikipedia.org/wiki/Web_crawler

Вы также можете использовать плагин Firefox, чтобы увидеть, как поисковые системы будут видеть вашу страницу: http://chrispederick.com/work/user-agent-switcher/

1 голос
/ 01 декабря 2010

Чтобы сделать это с Apache, вы можете использовать rewriteRule вместе с RewriteCond на %{HTTP_USER_AGENT}.

RewriteCond принимает RegExp, поэтому вы должны использовать там шаблон, который соответствует всем этим ботам (вы должны найти информацию о том, как построить шаблон на странице, связанной acme).

Но будьте осторожны: поисковые системы могут оштрафовать страницы, которые доставляют разное содержимое ботам и другим клиентам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...