【问题标题】:How to identify the client is a search robot?如何识别客户端是搜索机器人?
【发布时间】:2011-05-18 09:48:00
【问题描述】:

我已经使用 AJAX(实际上是 GWT)构建了我的整个网站。我还实现了 Google 提出的 AJAX 爬取。但是实施后发现,雅虎、必应、百度都没有实施该方案!

我想知道是否有办法识别网络客户端是搜索机器人。如果是,它们将显示我创建的 HTML 快照。

如果我能在 APACHE 级别识别它们将是最好的,然后我可以做一个 mod_rewrite。但是如果我可以在 PHP 或 GWT 中做到这一点,仍然可以。

【问题讨论】:

    标签: php apache seo


    【解决方案1】:

    要使用 Apache,您可以在 %{HTTP_USER_AGENT} 上使用 rewriteRuleRewriteCond

    RewriteCond 接受 RegExp,所以你必须在那里使用一个匹配所有这些机器人的模式(你应该在 acme 链接的页面上找到如何构建模式的信息)。

    但要小心:搜索引擎可能会惩罚向机器人和其他客户端提供不同内容的页面。

    【讨论】:

      【解决方案2】:

      如果你使用 PHP,你可以检查 $_SERVER['HTTP_USER_AGENT'] 与搜索引擎用户代理字符串的字符串 - 一些细节在这里找到:http://en.wikipedia.org/wiki/Web_crawler

      您还可以使用 Firefox 插件来查看搜索引擎如何查看您的页面:http://chrispederick.com/work/user-agent-switcher/

      【讨论】:

        【解决方案3】:

        这很棘手,因为有很多不同的搜索引擎。我想这不能在一个班轮中完成。如果 PHP 没问题,我建议使用php_browscap.ini(可用于不同的语言)。例如,这可以与 PHPs get_browser()-function 一起使用。

        然后您可以检查所有不同的浏览器内容,当然还有机器人。

        在我自己的代码 sn-ps 中,我使用以下函数(基于提到的 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);
        }
        

        例子:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 2016-05-06
          • 1970-01-01
          • 2016-02-23
          • 2012-08-06
          • 2018-03-16
          相关资源
          最近更新 更多