como detectar bots de mecanismo de pesquisa com php?

118

Como detectar os bots do mecanismo de busca usando php?

formidável
fonte

Respostas:

74

Aqui está um diretório do mecanismo de pesquisa de nomes de aranhas

Aí você usa $_SERVER['HTTP_USER_AGENT'];para verificar se o agente se chama aranha.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // what to do
}
Ólafur Waage
fonte
if ((eregi ("yahoo", $ this-> USER_AGENT)) && (eregi ("slurp", $ this-> USER_AGENT))) {$ this-> Navegador = "Yahoo! Slurp"; $ this-> Type = "robot"; } isso vai funcionar bem ??
ótimo
3
Como strpos pode retornar 0 (a posição), strstr retorna FALSE em caso de falha, você pode usar strpos se adicionar uma verificação! == false no final.
Ólafur Waage
2
Erm, strposretorna FALSEem caso de falha também. É mais rápido e eficiente, porém (sem pré-processamento e sem armazenamento O (m)).
Damon
6
E quanto a useragents falsos ?!
2
E se alguém pudesse mudar seu user agent com um nome falso e nomeá-lo como "Googlebot"? Acho que verificar o intervalo de ip é mais confiável!
Mojtaba Rezaeian
235

Eu uso o seguinte código, que parece estar funcionando bem:

function _bot_detected() {

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

atualização 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=en

adicionado mediapartners

Minnur
fonte
2
Isso pressupõe que os bots se revelam como tais?
Jeromie Devera
2
Vote, o agente do usuário pode ser alterado nas configurações do Chrome, firefox,
barwnikk
24
Sim, o useragent pode ser alterado, mas se alguém está alterando para conter "bot", "crawl", "slurp" ou "spider" sabe o que está vindo para eles. Também depende da utilidade. Eu não usaria isso para remover todo o CSS, mas usaria para não armazenar cookies, ignorar o registro de localização ou pular uma página de destino.
JonShipman
2
Alguém não concorda comigo que esta é uma maneira ampla de combinar?
Daan
Usei sua função por mais de 1 dia e parece estar funcionando. Mas eu não tenho certeza. Como posso enviar bots de teste para testar se funciona?
FarrisFahad
19

Verifique o $_SERVER['HTTP_USER_AGENT']para algumas das strings listadas aqui:

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

Ou mais especificamente para rastreadores:

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

Se você quiser - dizer - o número de visitas dos rastreadores de mecanismos de pesquisa mais comuns, você pode usar

$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'
}
Jukka Dahlbom
fonte
16

Você pode verificar se é um mecanismo de pesquisa com esta função:

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

Então você pode usá-lo como:

<?php $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
  if(crawlerDetect($USER_AGENT)) return "no need to lang redirection";?>
macherif
fonte
2
Acho que esta lista está desatualizada, não vejo "slurp", por exemplo, que é o Yahoo, seu spider help.yahoo.com/kb/SLN22600.html
Daan
11

Estou usando isso para detectar bots:

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
}

Além disso, uso uma lista de permissões para bloquear bots indesejados:

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
}

Um bot indesejado (= usuário falso-positivo) é então capaz de resolver um captcha para se desbloquear por 24 horas. E como ninguém resolve este captcha, sei que não produz falsos positivos. Portanto, a detecção do bot parece funcionar perfeitamente.

Nota: Minha lista de permissões é baseada no robots.txt do Facebook .

mgutt
fonte
você esqueceu um fechamento )em seu primeiro trecho de código.
Ludo -
10

Como qualquer cliente pode definir o agente de usuário para o que quiser, procurar por 'Googlebot', 'bingbot' etc. é apenas metade do trabalho.

A 2ª parte é verificar o IP do cliente. Antigamente, isso exigia a manutenção de listas de IP. Todas as listas que você encontra online estão desatualizadas. Os principais mecanismos de pesquisa suportam oficialmente a verificação por meio de DNS, conforme explicado pelo Google https://support.google.com/webmasters/answer/80553 e Bing http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26

Em primeiro lugar, execute uma pesquisa DNS reversa do IP do cliente. Para o Google, isso traz um nome de host em googlebot.com, para Bing em search.msn.com. Então, como alguém pode definir esse DNS reverso em seu IP, você precisa verificar com uma pesquisa DNS direta nesse nome de host. Se o IP resultante for o mesmo do visitante do site, você tem certeza de que é um rastreador daquele mecanismo de busca.

Escrevi uma biblioteca em Java que realiza essas verificações para você. Sinta-se à vontade para portá-lo para PHP. Está no GitHub: https://github.com/optimaize/webcrawler-verifier

Fabian Kessler
fonte
1
Todas as outras respostas usando strings de agente de usuário estão apenas na metade do caminho. Uau.
mlissner
1
Há muitos comentários sobre a verificação do agente do usuário ser apenas metade da verificação. Isso é verdade, mas lembre-se de que há um grande impacto no desempenho em fazer o DNS completo e a pesquisa DNS reversa. Tudo depende do nível de certeza que você precisa obter para dar suporte ao seu caso de uso. Isso é para uma certeza de 100% em detrimento do desempenho. Você tem que decidir qual é o equilíbrio certo (e, portanto, a melhor solução) para sua situação.
Brady Emerson
Não há "grande impacto no desempenho". Em primeiro lugar, a pesquisa de dns reversa só é realizada em visitantes que se identificam como mecanismo de pesquisa. Todos os humanos não são afetados de forma alguma. Então, essa consulta é realizada apenas uma vez por IP. O resultado é armazenado em cache. Os mecanismos de pesquisa continuam usando os mesmos intervalos de IP por um longo tempo e geralmente chegam a um site com um ou poucos IPs. Além disso: você pode realizar a validação atrasada. Deixe a primeira solicitação passar e, em seguida, valide em segundo plano. E, se negativo, evita solicitações sucessivas. (Eu desaconselho isso porque os harvesters têm grandes pools de IP agora ...)
Fabian Kessler
Existe alguma biblioteca semelhante escrita em PHP?
userlond
8

Eu uso esta função ... parte da regex vem de prestashop, mas adicionei mais um bot a ela.

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

De qualquer forma, tome cuidado para que alguns bots usem navegador como agente de usuário para falsificar sua identidade
(eu tenho muitos ip russos que tem esse comportamento no meu site)

Uma característica distintiva da maioria dos bots é que eles não carregam nenhum cookie e, portanto, nenhuma sessão é anexada a eles.
(Não sei como, mas esta é com certeza a melhor maneira de rastreá-los)

País das maravilhas
fonte
6

Você pode analisar o agente do usuário ( $_SERVER['HTTP_USER_AGENT']) ou comparar o endereço IP do cliente ( $_SERVER['REMOTE_ADDR']) com uma lista de endereços IP de robôs de mecanismos de pesquisa .

quiabo
fonte
2
A lista de IP é mais segura se você quiser ter certeza de que o nome do agente de usuário é realmente um bot de mecanismo de pesquisa, porque é possível criar agentes de usuário falsos por nome.
Mojtaba Rezaeian
5

Use a biblioteca de código aberto Device Detector, que oferece uma função isBot (): https://github.com/piwik/device-detector

mattab
fonte
Nota: Esta biblioteca analisa apenas o agente do usuário para decidir se o visitante é um bot.
Philipp
Muito pesado, apenas para verificar um bot de verificação.
Joel James
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;
    }
}
?>

Essa seria a maneira ideal de camuflagem para aranhas. É de um script de código aberto chamado [YACG] - http://getyacg.com

Precisa de um pouco de trabalho, mas definitivamente é o caminho a percorrer.

L. Cosio
fonte
2

Eu fiz uma função boa e rápida para isso

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

Isso cobre 99% de todos os bots, mecanismos de pesquisa, etc. possíveis.

Ivijan Stefan Stipić
fonte
1

Estou usando esse código, muito bom. Será muito fácil saber que os usuários-agentes visitaram seu site. Este código está abrindo um arquivo e grava o user_agent no arquivo. Você pode verificar a cada dia esse arquivo yourdomain.com/useragent.txtacessando e saber sobre novos user_agents e colocá-los em sua condição de cláusula 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);
    }
}

Este é o conteúdo de 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
Farol Nguyen
fonte
Qual seria o seu pedaço de corda (if_clause) para isso? mozilla / 5.0 (iphone; cpu iphone os 9_3 como mac os x) applewebkit / 601.1.46 (khtml, como gecko) versão / 9.0 mobile / 13e198 safari / 601.1
Joe médio em
1

Detector de bot 100% funcionando. Está funcionando no meu site com sucesso.

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()
Irshad Khan
fonte
1

Se você realmente precisa detectar os bots do mecanismo do GOOGLE, nunca deve confiar no endereço "user_agent" ou "IP" porque "user_agent" pode ser alterado de acordo com o que o Google disse em: Verificando o Googlebot

Para verificar o Googlebot como o autor da chamada:

1. Execute uma pesquisa DNS reversa no endereço IP de acesso de seus logs, usando o comando host.

2. Verifique se o nome de domínio está em googlebot.com ou google.com

3. Execute uma pesquisa DNS direta no nome de domínio recuperado na etapa 1 usando o comando host no nome de domínio recuperado. Verifique se ele é o mesmo que o endereço IP de acesso original de seus registros.

Aqui está meu código testado:

<?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
}

?>

Neste código, verificamos "hostname", que deve conter "googlebot.com" ou "google.com" no final de "hostname", o que é realmente importante para verificar o domínio exato, não o subdomínio. Espero que você goste ;)

طراحی سایت تهران
fonte
0

Para o Google, estou usando esse método.

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

Créditos: https://support.google.com/webmasters/answer/80553

Mike Aron
fonte
-1
function bot_detected() {

  if(preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT']){
    return true;
  }
  else{
    return false;
  }
}
Elyor
fonte