Как лучше отсеивать поисковых роботов?

Discussion in 'PHP' started by inlanger, 11 Feb 2009.

  1. inlanger

    inlanger Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    985
    Likes Received:
    283
    Reputations:
    27
    Нужно показывать поисковым бота немного другой контент... Как определить, что посетитель сайт - поисковый бот?
     
  2. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    либо по диапазону его IP (имхо это гавно метод) а второй вариант по юзер агенту

    PHP:
    function SpiderDetect() {
        
    $engines = array(
            array(
    'Google''Google Bot'),
            array(
    'Gsa-crawler''Google Bot'),
            array(
    'Yandex''Yandex Bot'),
            array(
    'YaDirectBot''Yandex Direct Bot'),
            array(
    'Yahoo''Yahoo Bot'),
            array(
    'Rambler''Rambler Bot'),
            array(
    'msn''MSN Bot'),
            array(
    'Gigabot''Giga Bot'),
            array(
    'Aport''Aport Bot'),
            array(
    'Lycos''Lycos Bot'),
            array(
    'FAST-WebCrawler''WebCrawler Bot'),
            array(
    'Mail.Ru''Mail.Ru Bot'),
            array(
    'IDBot''ID-Search Bot'),
            array(
    'eStyle''eStyle Bot'),
            array(
    'AbachoBOT''Abacho Bot'),
            array(
    'accoona''Accoona Bot'),
            array(
    'AcoiRobot''Acoi Bot'),
            array(
    'ASPSeek''ASPSeek Bot'),
            array(
    'CrocCrawler''CrocCrawler Bot'),
            array(
    'Dumbot''Dumbot Bot'),
            array(
    'GeonaBot''Geona Bot'),
            array(
    'MSRBOT''MSR Bot'),
            array(
    'Scooter''Altavista Bot'),
            array(
    'AltaVista''Altavista Bot'),
            array(
    'WebAlta''WebAlta Bot'),
            array(
    'Scrubby''Scrubby Bot'),
            array(
    'Slurp''Slurp Bot'),
            array(
    'ia_archiver''IA.Archiver Bot'),
            array(
    'Baiduspider''Baidu.com'),
            array(
    'oBot''oBot'),
            array(
    'Speedy Spider''EntireWeb Bot'),
            array(
    'Speedy_Spider''EntireWeb Bot'),
            array(
    'Teoma''Ask Bot'),
            array(
    'Binky''libwww.Binky Bot'),
            array(
    'amaya''libwww.amaya Bot'),
            array(
    'Webgate''libwww.Webgate Bot'),
            array(
    'W3C_Validator''libwww.W3C Validator Bot'),
            array(
    'libwww''libwww.nothing Bot'),
            array(
    'What You Seek''WhatYouSeek Bot'),
            
    ////////////////////////////////////////////////////////
            
    array('Offline Explorer''Offline Explorer Bot'),
            array(
    'Teleport''Teleport Bot'),
        );

        foreach (
    $engines as $engine) {
            if (
    stristr($_SERVER['HTTP_USER_AGENT'], $engine[0])) {
                return(
    $engine[1]);
            }
        }

        return 
    false;
    }
    ет тока набросок и то не мой.. за исключение списка ботов (я его начал делать но не успел проверить все до конца + многих не хватает)
     
    1 person likes this.
  3. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    по UserAgent

    http://devaka.ru/articles/list-of-search-bots например

    PHP:
    if (strstr($user_agent getenv("HTTP_USER_AGENT");, "Yandex"))   $robot "Яндекс";
     
    1 person likes this.
  4. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    По юзер агенту - метод стар как мир, они заходят и под обычным юзер агентом...

    Так что лучше делать gethostbyaddr(ip) и смотреть там вхождения на google, yahoo и прочее
     
  5. inlanger

    inlanger Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    985
    Likes Received:
    283
    Reputations:
    27
    а подробнее?
     
  6. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    ну что то типа того

    <?php
    $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);

    if(strstr($hostname,'google')){
    echo $content1;
    }else{
    echo $content2;
    }
    ?>
     
  7. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    DNS детектирование согласен это более эффективно но и геморройней по ряду причин но если речь идет о клоакинге то игра стоит свечь но не стоит забывать о том что 100% метода определения поискового бота не существует в природе.

    я думаю публике стоит знать зачем TC хочет отлавливать ботов.. тогда и можно будет подобрать самый оптимальный метод.

    ЗЫ: на самом деле меня тоже волнует этот вопрос.. но мне это требуется только для сбора примерной статистики вот я и машинально предложил палить по юзер агенту