Задать вопрос

Как определить что поисковый бот а не человек?

Есть модуль который определяет город и перекидывает на поддомен принадлежащий этому городу. Поисковик (яндекс) заходят на сайт перебрасывается на Москву.
Думаю надо проверить является ли посетител ботом и если нет, то не редиректить его.
Как можно точно определить что на сайт зашел поисковик?
  • Вопрос задан
  • 15750 просмотров
Подписаться 8 Оценить 4 комментария
Решения вопроса 1
rework
@rework
Помог ответ? В благодарность отметь его решением
Вот есть решение на всех известных ботов:

function isBot(&$botname = ''){
/* Эта функция будет проверять, является ли посетитель роботом поисковой системы */
  $bots = array(
    'rambler','googlebot','aport','yahoo','msnbot','turtle','mail.ru','omsktele',
    'yetibot','picsearch','sape.bot','sape_context','gigabot','snapbot','alexa.com',
    'megadownload.net','askpeter.info','igde.ru','ask.com','qwartabot','yanga.co.uk',
    'scoutjet','similarpages','oozbot','shrinktheweb.com','aboutusbot','followsite.com',
    'dataparksearch','google-sitemaps','appEngine-google','feedfetcher-google',
    'liveinternet.ru','xml-sitemaps.com','agama','metadatalabs.com','h1.hrn.ru',
    'googlealert.com','seo-rus.com','yaDirectBot','yandeG','yandex',
    'yandexSomething','Copyscape.com','AdsBot-Google','domaintools.com',
    'Nigma.ru','bing.com','dotnetdotcom'
  );
  foreach($bots as $bot)
    if(stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false){
      $botname = $bot;
      return true;
    }
  return false;
}


Использование:

if( isBot($bname) ) {
   // Перебрасываем на Москву
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@l2sap
Спасибо Евгений Калибров за скрипт. Пользовался данным скриптом некоторое время. Позже решил упростить его. Мой скрипт универсальный, ловит любого робота: Google, Yandex, Yahoo и Bing. Он удобен тем, что не нужно перечислять роботов каждого отдельно и здесь мы обходимся без циклов, что работает в несколько раз быстрее. Проверено, ботов находит идеально! Пробуйте и юзайте на здоровье.

class ScanBot
{

    public function isBot()
    {

        $down_reg = mb_strtolower($_SERVER['HTTP_USER_AGENT']);
        $down_reg = str_replace(array(' '), '', $down_reg);

        $find_bot_step1 = str_replace(array('yandex', 'google', 'yahoo', 'bing'), ' this_is_bot! ', $down_reg);
        $find_bot_step2 = explode(' ', $find_bot_step1);

        if ($find_bot_step2[1] == "this_is_bot!") {
            return true;
        }

        return false;
    }
}
Ответ написан
Комментировать
@ctacua
class BotDetector
{
    public function isBot()
    {
        $userAgent = $_SERVER['HTTP_USER_AGENT'];

        $botPatterns = [
            '/bot/i',
            '/crawler/i',
            '/spider/i',
            '/curl/i',
            '/facebookexternalhit/i',
            '/twitterbot/i',
            '/pingdom/i',
            '/google/i',
            '/yahoo/i',
            '/bing/i'
            // Добавьте другие паттерны для определения ботов по User-Agent
        ];

        foreach ($botPatterns as $pattern) {
            if (preg_match($pattern, $userAgent)) {
                return true;
            }
        }

        return false;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы