как обнаружить ботов поисковой системы с помощью php?

Ответы:

74

Вот каталог поисковых систем с именами пауков

Затем вы используете, $_SERVER['HTTP_USER_AGENT'];чтобы проверить, называется ли агент пауком.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // what to do
}
Олафур Вааге
источник
if ((eregi ("yahoo", $ this-> USER_AGENT)) && (eregi ("slurp", $ this-> USER_AGENT))) {$ this-> Browser = "Yahoo! Slurp"; $ this-> Type = "робот"; } это будет работать нормально ??
потрясающе,
3
Поскольку strpos может возвращать 0 (позиция), strstr возвращает FALSE при ошибке, вы можете использовать strpos, если в конце добавите проверку! == false.
Ólafur Waage
2
Эмм , тоже strposвозвращается FALSEпри неудаче. Однако это быстрее и эффективнее (без предварительной обработки и без O (m) хранилища).
Дэймон
6
А как насчет фальшивых агентов ?!
2
А что, если кто-то может изменить свой пользовательский агент на вымышленное имя и назвать его как «Googlebot»? Думаю, проверка диапазона ip более надежна!
Mojtaba Rezaeian 01
235

Я использую следующий код, который, похоже, работает нормально:

function _bot_detected() {

  return (
    isset($_SERVER['HTTP_USER_AGENT'])
    && preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT'])
  );
}

обновление 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=en

добавлены медиапартнеры

minnur
источник
2
Предполагает ли это, что боты проявляют себя как таковые?
Jeromie Devera
2
Проголосуйте против, пользовательский агент можно изменить в настройках Chrome, Firefox,
barwnikk
24
Да, агент пользователя может быть изменен, но если кто-то меняет его, чтобы он содержал «бота», «сканирование», «прихлебку» или «паук», он знает, что к ним приходит. Это также зависит от полезности. Я бы не использовал это для удаления всего CSS, но я бы использовал это, чтобы не хранить файлы cookie, игнорировать регистрацию местоположения или пропускать целевую страницу.
JonShipman
2
Неужели никто не согласен со мной, что это способ соответствия широкому диапазону?
Daan
1
Регулярное выражение в этом ответе приятно тем, что оно простое и обширное. Для моей цели я хочу действовать быстро, но меня не волнует, есть ли несколько ложных срабатываний или ложных отрицаний.
Грегори
19

Проверьте $_SERVER['HTTP_USER_AGENT']некоторые из перечисленных здесь строк:

http://www.useragentstring.com/pages/useragentstring.php

Или, точнее, для сканеров:

http://www.useragentstring.com/pages/useragentstring.php?typ=Crawler

Если вы хотите -сообщить- регистрировать количество посещений наиболее распространенных сканеров поисковых систем, вы можете использовать

$interestingCrawlers = array( 'google', 'yahoo' );
$pattern = '/(' . implode('|', $interestingCrawlers) .')/';
$matches = array();
$numMatches = preg_match($pattern, strtolower($_SERVER['HTTP_USER_AGENT']), $matches, 'i');
if($numMatches > 0) // Found a match
{
  // $matches[1] contains an array of all text matches to either 'google' or 'yahoo'
}
Юкка Дальбом
источник
16

Вы можете проверить, является ли это поисковой системой с помощью этой функции:

<?php
function crawlerDetect($USER_AGENT)
{
$crawlers = array(
'Google' => 'Google',
'MSN' => 'msnbot',
      'Rambler' => 'Rambler',
      'Yahoo' => 'Yahoo',
      'AbachoBOT' => 'AbachoBOT',
      'accoona' => 'Accoona',
      'AcoiRobot' => 'AcoiRobot',
      'ASPSeek' => 'ASPSeek',
      'CrocCrawler' => 'CrocCrawler',
      'Dumbot' => 'Dumbot',
      'FAST-WebCrawler' => 'FAST-WebCrawler',
      'GeonaBot' => 'GeonaBot',
      'Gigabot' => 'Gigabot',
      'Lycos spider' => 'Lycos',
      'MSRBOT' => 'MSRBOT',
      'Altavista robot' => 'Scooter',
      'AltaVista robot' => 'Altavista',
      'ID-Search Bot' => 'IDBot',
      'eStyle Bot' => 'eStyle',
      'Scrubby robot' => 'Scrubby',
      'Facebook' => 'facebookexternalhit',
  );
  // to get crawlers string used in function uncomment it
  // it is better to save it in string than use implode every time
  // global $crawlers
   $crawlers_agents = implode('|',$crawlers);
  if (strpos($crawlers_agents, $USER_AGENT) === false)
      return false;
    else {
    return TRUE;
    }
}
?>

Тогда вы можете использовать это как:

<?php $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
  if(crawlerDetect($USER_AGENT)) return "no need to lang redirection";?>
macherif
источник
2
Я думаю, что этот список устарел, я не вижу "slurp", например Yahoo, это spider help.yahoo.com/kb/SLN22600.html
Daan
11

Я использую это для обнаружения ботов:

if (preg_match('/bot|crawl|curl|dataprovider|search|get|spider|find|java|majesticsEO|google|yahoo|teoma|contaxe|yandex|libwww-perl|facebookexternalhit/i', $_SERVER['HTTP_USER_AGENT'])) {
    // is bot
}

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

if (preg_match('/apple|baidu|bingbot|facebookexternalhit|googlebot|-google|ia_archiver|msnbot|naverbot|pingdom|seznambot|slurp|teoma|twitter|yandex|yeti/i', $_SERVER['HTTP_USER_AGENT'])) {
    // allowed bot
}

Затем нежелательный бот (= ложноположительный пользователь) может решить капчу, чтобы разблокировать себя на 24 часа. И поскольку никто не решает эту капчу, я знаю, что она не дает ложных срабатываний. Так что обнаружение ботов, похоже, работает отлично.

Примечание. Мой белый список основан на файле robots.txt Facebook .

mgutt
источник
вы забыли закрытие )в своем первом фрагменте кода.
Людо - Не для записи
10

Поскольку любой клиент может настроить пользовательский агент на то, что он хочет, поиск «роботов Google», «bingbot» и т. Д. - это только половина дела.

Вторая часть - это проверка IP клиента. Раньше для этого требовалось вести списки IP-адресов. Все списки, которые вы найдете в Интернете, устарели. Ведущие поисковые системы официально поддерживают проверку через DNS, как объяснили Google https://support.google.com/webmasters/answer/80553 и Bing http://www.bing.com/webmaster/help/how-to-verify. -bingbot-3905dc26

Сначала выполните обратный поиск в DNS IP-адреса клиента. Для Google это дает имя хоста в googlebot.com, для Bing - в search.msn.com. Затем, поскольку кто-то может установить такой обратный DNS на свой IP-адрес, вам необходимо выполнить проверку с помощью прямого поиска DNS на этом имени хоста. Если полученный IP-адрес совпадает с IP-адресом посетителя сайта, вы уверены, что это сканер из этой поисковой системы.

Я написал библиотеку на Java, которая выполняет эти проверки за вас. Не стесняйтесь портировать его на PHP. Это на GitHub: https://github.com/optimaize/webcrawler-verifier

Фабиан Кесслер
источник
1
Все остальные ответы, использующие строки пользовательского агента, только на полпути. Вот это да.
mlissner 08
1
Есть много комментариев о том, что проверка агента пользователя - это только половина проверки. Это верно, но имейте в виду, что выполнение полного DNS и обратного поиска DNS оказывает огромное влияние на производительность. Все зависит от уровня уверенности, который вам необходим для поддержки вашего варианта использования. Это со 100% уверенностью в ущерб производительности. Вы должны решить, каков правильный баланс (и, следовательно, лучшее решение) для вашей ситуации.
Брэди Эмерсон
Нет никакого «огромного влияния на производительность». Во-первых, обратный поиск DNS выполняется только для посетителей, которые идентифицируют себя как поисковая система. Это затрагивает не всех людей. Затем этот поиск выполняется только один раз для каждого IP-адреса. Результат кешируется. Поисковые системы продолжают использовать одни и те же диапазоны IP-адресов в течение очень долгого времени и обычно попадают на один сайт только с одним или несколькими IP-адресами. Также: вы можете отложить проверку. Пропустите первый запрос, затем выполните фоновую проверку. А если отрицательный, предотвратить последовательные запросы. (Я бы не советовал этого делать, потому что теперь у харвестеров большие пулы IP ...)
Фабиан Кесслер
Есть ли какая-нибудь симуляционная библиотека, написанная на PHP?
userlond
8

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

    public function isBot()
{
    $bot_regex = '/BotLink|bingbot|AhrefsBot|ahoy|AlkalineBOT|anthill|appie|arale|araneo|AraybOt|ariadne|arks|ATN_Worldwide|Atomz|bbot|Bjaaland|Ukonline|borg\-bot\/0\.9|boxseabot|bspider|calif|christcrawler|CMC\/0\.01|combine|confuzzledbot|CoolBot|cosmos|Internet Cruiser Robot|cusco|cyberspyder|cydralspider|desertrealm, desert realm|digger|DIIbot|grabber|downloadexpress|DragonBot|dwcp|ecollector|ebiness|elfinbot|esculapio|esther|fastcrawler|FDSE|FELIX IDE|ESI|fido|H�m�h�kki|KIT\-Fireball|fouineur|Freecrawl|gammaSpider|gazz|gcreep|golem|googlebot|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|iajabot|INGRID\/0\.1|Informant|InfoSpiders|inspectorwww|irobot|Iron33|JBot|jcrawler|Teoma|Jeeves|jobo|image\.kapsi\.net|KDD\-Explorer|ko_yappo_robot|label\-grabber|larbin|legs|Linkidator|linkwalker|Lockon|logo_gif_crawler|marvin|mattie|mediafox|MerzScope|NEC\-MeshExplorer|MindCrawler|udmsearch|moget|Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|sharp\-info\-agent|WebMechanic|NetScoop|newscan\-online|ObjectsSearch|Occam|Orbsearch\/1\.0|packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|Getterrobo\-Plus|Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Search\-AU|searchprocess|Senrigan|Shagseeker|sift|SimBot|Site Valet|skymob|SLCrawler\/2\.0|slurp|ESI|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|nil|suke|http:\/\/www\.sygol\.com|tach_bw|TechBOT|templeton|titin|topiclink|UdmSearch|urlck|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|crawlpaper|wapspider|WebBandit\/1\.0|webcatcher|T\-H\-U\-N\-D\-E\-R\-S\-T\-O\-N\-E|WebMoose|webquest|webreaper|webs|webspider|WebWalker|wget|winona|whowhere|wlm|WOLP|WWWC|none|XGET|Nederland\.zoek|AISearchBot|woriobot|NetSeer|Nutch|YandexBot|YandexMobileBot|SemrushBot|FatBot|MJ12bot|DotBot|AddThis|baiduspider|SeznamBot|mod_pagespeed|CCBot|openstat.ru\/Bot|m2e/i';
    $userAgent = empty($_SERVER['HTTP_USER_AGENT']) ? FALSE : $_SERVER['HTTP_USER_AGENT'];
    $isBot = !$userAgent || preg_match($bot_regex, $userAgent);

    return $isBot;
}

В любом случае позаботьтесь о том, чтобы некоторые боты использовали браузер, например пользовательский агент, для подделки своей личности.
(у меня есть много русских IP-адресов, которые имеют такое поведение на моем сайте)

Отличительной особенностью большинства ботов является то, что они не хранят файлы cookie, и поэтому к ним не привязан сеанс.
(Я не уверен, как, но это наверняка лучший способ их отслеживать)

Волшебная страна
источник
6

Вы можете проанализировать пользовательский агент ( $_SERVER['HTTP_USER_AGENT']) или сравнить IP-адрес клиента ( $_SERVER['REMOTE_ADDR']) со списком IP-адресов роботов поисковых систем .

гумбо
источник
2
Список IP-адресов более безопасен, если вы хотите убедиться, что имя пользовательского агента действительно является ботом поисковой системы, потому что можно создавать поддельные пользовательские агенты по имени.
Mojtaba Rezaeian
5

Используйте библиотеку с открытым исходным кодом Device Detector, она предлагает функцию isBot (): https://github.com/piwik/device-detector

mattab
источник
Примечание. Эта библиотека анализирует только пользовательский агент, чтобы решить, является ли посетитель ботом.
Филипп
Слишком тяжело, чтобы проверить бота-верификатора.
Джоэл Джеймс
4
 <?php // IPCLOACK HOOK
if (CLOAKING_LEVEL != 4) {
    $lastupdated = date("Ymd", filemtime(FILE_BOTS));
    if ($lastupdated != date("Ymd")) {
        $lists = array(
        'http://labs.getyacg.com/spiders/google.txt',
        'http://labs.getyacg.com/spiders/inktomi.txt',
        'http://labs.getyacg.com/spiders/lycos.txt',
        'http://labs.getyacg.com/spiders/msn.txt',
        'http://labs.getyacg.com/spiders/altavista.txt',
        'http://labs.getyacg.com/spiders/askjeeves.txt',
        'http://labs.getyacg.com/spiders/wisenut.txt',
        );
        foreach($lists as $list) {
            $opt .= fetch($list);
        }
        $opt = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $opt);
        $fp =  fopen(FILE_BOTS,"w");
        fwrite($fp,$opt);
        fclose($fp);
    }
    $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
    $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    $agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    $host = strtolower(gethostbyaddr($ip));
    $file = implode(" ", file(FILE_BOTS));
    $exp = explode(".", $ip);
    $class = $exp[0].'.'.$exp[1].'.'.$exp[2].'.';
    $threshold = CLOAKING_LEVEL;
    $cloak = 0;
    if (stristr($host, "googlebot") && stristr($host, "inktomi") && stristr($host, "msn")) {
        $cloak++;
    }
    if (stristr($file, $class)) {
        $cloak++;
    }
    if (stristr($file, $agent)) {
        $cloak++;
    }
    if (strlen($ref) > 0) {
        $cloak = 0;
    }

    if ($cloak >= $threshold) {
        $cloakdirective = 1;
    } else {
        $cloakdirective = 0;
    }
}
?>

Это был бы идеальный способ прикрыть пауков. Это из сценария с открытым исходным кодом под названием [YACG] - http://getyacg.com

Требуется немного поработать, но это определенно способ.

Л. Косио
источник
2

Я сделал для этого одну хорошую и быструю функцию

function is_bot(){

        if(isset($_SERVER['HTTP_USER_AGENT']))
        {
            return preg_match('/rambler|abacho|acoi|accona|aspseek|altavista|estyle|scrubby|lycos|geona|ia_archiver|alexa|sogou|skype|facebook|twitter|pinterest|linkedin|naver|bing|google|yahoo|duckduckgo|yandex|baidu|teoma|xing|java\/1.7.0_45|bot|crawl|slurp|spider|mediapartners|\sask\s|\saol\s/i', $_SERVER['HTTP_USER_AGENT']);
        }

        return false;
    }

Это покрывает 99% всех возможных ботов, поисковых систем и т. Д.

Ивьян Стефан Стипич
источник
1

Я использую этот код, очень хорошо. Вы очень легко узнаете, что пользовательские агенты посетили ваш сайт. Этот код открывает файл и записывает user_agent в файл. Вы можете проверять этот файл каждый день, yourdomain.com/useragent.txtзаходя и узнавая о новых user_agents и помещая их в свое условие if.

$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
if(!preg_match("/Googlebot|MJ12bot|yandexbot/i", $user_agent)){
    // if not meet the conditions then
    // do what you need

    // here open a file and write the user_agent down the file. You can check each day this file useragent.txt and know about new user_agents and put them in your condition of if clause
    if($user_agent!=""){
        $myfile = fopen("useragent.txt", "a") or die("Unable to open file useragent.txt!");
        fwrite($myfile, $user_agent);
        $user_agent = "\n";
        fwrite($myfile, $user_agent);
        fclose($myfile);
    }
}

Это содержимое useragent.txt

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (compatible; MJ12bot/v1.4.6; http://mj12bot.com/)Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (iphone; cpu iphone os 9_3 like mac os x) applewebkit/601.1.46 (khtml, like gecko) version/9.0 mobile/13e198 safari/601.1
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.143 safari/537.36
mozilla/5.0 (compatible; linkdexbot/2.2; +http://www.linkdex.com/bots/)
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.143 safari/537.36
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.143 safari/537.36
mozilla/5.0 (compatible; baiduspider/2.0; +http://www.baidu.com/search/spider.html)
zoombot (linkbot 1.0 http://suite.seozoom.it/bot.html)
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/44.0.2403.155 safari/537.36 opr/31.0.1889.174
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/44.0.2403.155 safari/537.36 opr/31.0.1889.174
sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/44.0.2403.155 safari/537.36 opr/31.0.1889.174
Маяк Нгуен
источник
Что бы вы для этого сделали (if_clause)? mozilla / 5.0 (iphone; cpu iphone os 9_3 like mac os x) applewebkit / 601.1.46 (khtml, like gecko) version / 9.0 mobile / 13e198 safari / 601.1
средний Джо
1

100% рабочий детектор ботов. Он успешно работает на моем сайте.

function isBotDetected() {

    if ( preg_match('/abacho|accona|AddThis|AdsBot|ahoy|AhrefsBot|AISearchBot|alexa|altavista|anthill|appie|applebot|arale|araneo|AraybOt|ariadne|arks|aspseek|ATN_Worldwide|Atomz|baiduspider|baidu|bbot|bingbot|bing|Bjaaland|BlackWidow|BotLink|bot|boxseabot|bspider|calif|CCBot|ChinaClaw|christcrawler|CMC\/0\.01|combine|confuzzledbot|contaxe|CoolBot|cosmos|crawler|crawlpaper|crawl|curl|cusco|cyberspyder|cydralspider|dataprovider|digger|DIIbot|DotBot|downloadexpress|DragonBot|DuckDuckBot|dwcp|EasouSpider|ebiness|ecollector|elfinbot|esculapio|ESI|esther|eStyle|Ezooms|facebookexternalhit|facebook|facebot|fastcrawler|FatBot|FDSE|FELIX IDE|fetch|fido|find|Firefly|fouineur|Freecrawl|froogle|gammaSpider|gazz|gcreep|geona|Getterrobo-Plus|get|girafabot|golem|googlebot|\-google|grabber|GrabNet|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|HTTrack|ia_archiver|iajabot|IDBot|Informant|InfoSeek|InfoSpiders|INGRID\/0\.1|inktomi|inspectorwww|Internet Cruiser Robot|irobot|Iron33|JBot|jcrawler|Jeeves|jobo|KDD\-Explorer|KIT\-Fireball|ko_yappo_robot|label\-grabber|larbin|legs|libwww-perl|linkedin|Linkidator|linkwalker|Lockon|logo_gif_crawler|Lycos|m2e|majesticsEO|marvin|mattie|mediafox|mediapartners|MerzScope|MindCrawler|MJ12bot|mod_pagespeed|moget|Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|NationalDirectory|naverbot|NEC\-MeshExplorer|NetcraftSurveyAgent|NetScoop|NetSeer|newscan\-online|nil|none|Nutch|ObjectsSearch|Occam|openstat.ru\/Bot|packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pingdom|pinterest|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|rambler|Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Scrubby|Search\-AU|searchprocess|search|SemrushBot|Senrigan|seznambot|Shagseeker|sharp\-info\-agent|sift|SimBot|Site Valet|SiteSucker|skymob|SLCrawler\/2\.0|slurp|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|spider|suke|tach_bw|TechBOT|TechnoratiSnoop|templeton|teoma|titin|topiclink|twitterbot|twitter|UdmSearch|Ukonline|UnwindFetchor|URL_Spider_SQL|urlck|urlresolver|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|wapspider|WebBandit\/1\.0|webcatcher|WebCopier|WebFindBot|WebLeacher|WebMechanic|WebMoose|webquest|webreaper|webspider|webs|WebWalker|WebZip|wget|whowhere|winona|wlm|WOLP|woriobot|WWWC|XGET|xing|yahoo|YandexBot|YandexMobileBot|yandex|yeti|Zeus/i', $_SERVER['HTTP_USER_AGENT'])
    ) {
        return true; // 'Above given bots detected'
    }

    return false;

} // End :: isBotDetected()
Иршад Хан
источник
1

Если вам действительно нужно обнаруживать роботов движка GOOGLE, вам никогда не следует полагаться на адрес user_agent или IP, потому что user_agent можно изменить и в соответствии с тем, что Google сказал в: Проверка робота Google

Чтобы подтвердить, что Googlebot является вызывающим абонентом:

1. Запустите обратный поиск DNS по IP-адресу доступа из ваших журналов, используя команду host.

2. Убедитесь, что доменное имя находится в googlebot.com или google.com.

3. Запустите прямой DNS-поиск для доменного имени, полученного на шаге 1, с помощью команды host для полученного доменного имени. Убедитесь, что он совпадает с исходным IP-адресом доступа из ваших журналов.

Вот мой проверенный код:

<?php
$remote_add=$_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($remote_add);
$googlebot = 'googlebot.com';
$google = 'google.com';
if (stripos(strrev($hostname), strrev($googlebot)) === 0 or stripos(strrev($hostname),strrev($google)) === 0 ) 
{
//add your code
}

?>

В этом коде мы проверяем «имя хоста», которое должно содержать «googlebot.com» или «google.com» в конце «имени хоста», что действительно важно для проверки точного домена, а не субдомена. Надеюсь вам нравится ;)

طراحی سایت تهران
источник
0

Для Google я использую этот метод.

function is_google() {
    $ip   = $_SERVER['REMOTE_ADDR'];
    $host = gethostbyaddr( $ip );
    if ( strpos( $host, '.google.com' ) !== false || strpos( $host, '.googlebot.com' ) !== false ) {

        $forward_lookup = gethostbyname( $host );

        if ( $forward_lookup == $ip ) {
            return true;
        }

        return false;
    } else {
        return false;
    }

}

var_dump( is_google() );

Кредиты: https://support.google.com/webmasters/answer/80553

Майк Арон
источник
-1
function bot_detected() {

  if(preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT']){
    return true;
  }
  else{
    return false;
  }
}
Elyor
источник