¿Cómo detectar bots de motores de búsqueda con php?

118

¿Cómo se pueden detectar los robots de los motores de búsqueda usando php?

estupendo
fuente

Respuestas:

74

Aquí hay un directorio de motores de búsqueda de nombres de arañas

Luego usas $_SERVER['HTTP_USER_AGENT'];para verificar si el agente se dice araña.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // what to do
}
Ólafur Waage
fuente
if ((eregi ("yahoo", $ this-> USER_AGENT)) && (eregi ("slurp", $ this-> USER_AGENT))) {$ this-> Browser = "Yahoo! Slurp"; $ this-> Type = "robot"; } ¿esto funcionará bien?
estupendo
3
Debido a que strpos puede devolver 0 (la posición), strstr devuelve FALSE en caso de falla, puede usar strpos si agrega un! == cheque falso al final.
Ólafur Waage
2
Erm, también strposregresa FALSEen caso de falla. Sin embargo, es más rápido y eficiente (sin preprocesamiento y sin almacenamiento O (m)).
Damon
6
¿Qué pasa con los agentes de uso falsos?
2
¿Y si alguien pudiera cambiar su agente de usuario con un nombre falso y nombrarlo como "Googlebot"? ¡Creo que verificar el rango de ip es más confiable!
Mojtaba Rezaeian
235

Utilizo el siguiente código que parece funcionar bien:

function _bot_detected() {

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

actualización 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=es

mediapartners añadidos

minnur
fuente
2
¿Asume esto que los bots se revelan a sí mismos como tales?
Jeromie Devera
2
Votar en contra, el agente de usuario se puede cambiar en la configuración de Chrome,
Firefox
24
Sí, el agente de usuario se puede cambiar, pero si alguien lo cambia para que contenga "bot", "crawl", "slurp" o "spider", sabe lo que le espera. También depende de la utilidad. No usaría esto para eliminar todo el CSS, pero lo usaría para no almacenar cookies, ignorar el registro de ubicación u omitir una página de destino.
JonShipman
2
¿Nadie está de acuerdo conmigo en que esta es una forma de combinar una amplia gama?
Daan
Usé su función durante más de 1 día y parece estar funcionando. Pero no estoy seguro. ¿Cómo puedo enviar bots de prueba para probar si funciona?
FarrisFahad
19

Verifique $_SERVER['HTTP_USER_AGENT']algunas de las cadenas enumeradas aquí:

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

O más específicamente para rastreadores:

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

Si desea, por ejemplo, registrar el número de visitas de los rastreadores de motores de búsqueda más comunes, puede 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
fuente
16

Puede pagar si es un motor de búsqueda con esta función:

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

Entonces puedes usarlo como:

<?php $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
  if(crawlerDetect($USER_AGENT)) return "no need to lang redirection";?>
macherif
fuente
2
Creo que esta lista está desactualizada, no veo "slurp", por ejemplo, que es Yahoo, es spider help.yahoo.com/kb/SLN22600.html
Daan
11

Estoy usando esto 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
}

Además, uso una lista blanca para bloquear bots no deseados:

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
}

Un bot no deseado (= usuario falso positivo) puede resolver un captcha para desbloquearse a sí mismo durante 24 horas. Y como nadie resuelve este captcha, sé que no produce falsos positivos. Entonces, la detección de bots parece funcionar perfectamente.

Nota: Mi lista blanca se basa en el archivo robots.txt de Facebook .

mgutt
fuente
olvidó un cierre )en su primer fragmento de código.
Ludo - Off the record
10

Debido a que cualquier cliente puede configurar el agente de usuario para lo que quiera, buscar 'Googlebot', 'bingbot', etc. es solo la mitad del trabajo.

La segunda parte es verificar la IP del cliente. En los viejos tiempos, esto requería mantener listas de IP. Todas las listas que encuentra en línea están desactualizadas. Los principales motores de búsqueda admiten oficialmente la verificación a través de DNS, como explican Google https://support.google.com/webmasters/answer/80553 y Bing. http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26

Al principio, realice una búsqueda DNS inversa de la IP del cliente. Para Google, esto trae un nombre de host en googlebot.com, para Bing está en search.msn.com. Entonces, debido a que alguien podría establecer un DNS inverso en su IP, debe verificar con una búsqueda de DNS directa en ese nombre de host. Si la IP resultante es la misma que la del visitante del sitio, está seguro de que es un rastreador de ese motor de búsqueda.

Escribí una biblioteca en Java que realiza estas comprobaciones por ti. Siéntase libre de portarlo a PHP. Está en GitHub: https://github.com/optimaize/webcrawler-verifier

Fabian Kessler
fuente
1
Todas las otras respuestas que usan cadenas de agente de usuario están solo a la mitad. Guau.
mlissner
1
Hay muchos comentarios acerca de que la verificación de agente de usuario es solo la mitad de la verificación. Esto es cierto, pero tenga en cuenta que hay un gran impacto en el rendimiento al realizar la búsqueda completa de DNS y DNS inversa. Todo depende del nivel de certeza que necesite obtener para respaldar su caso de uso. Esto es para una certeza del 100% a expensas del rendimiento. Debe decidir cuál es el equilibrio adecuado (y, por lo tanto, la mejor solución) para su situación.
Brady Emerson
No hay un "gran impacto en el rendimiento". Primero, la búsqueda inversa de DNS solo se realiza en los visitantes que se identifican como motor de búsqueda. Todos los humanos no se ven afectados en absoluto. Entonces, esta búsqueda solo se realiza una vez por IP. El resultado se almacena en caché. Los motores de búsqueda siguen usando los mismos rangos de IP durante mucho tiempo y, por lo general, solo acceden a un sitio con una o pocas IP. Además: podría realizar la validación retrasada. Deje pasar la primera solicitud, luego valide en segundo plano. Y si es negativo, evita sucesivas solicitudes. (No recomendaría esto porque los recolectores tienen grandes grupos de IP ahora ...)
Fabian Kessler
¿Existe alguna biblioteca similar escrita en PHP?
userlond
8

Yo uso esta función ... parte de la expresión regular proviene de prestashop pero le agregué más bot.

    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 todos modos, tenga cuidado de que algunos bots usen el navegador como agente de usuario para falsificar su identidad
(tengo muchas ip rusas que tienen este comportamiento en mi sitio)

Una característica distintiva de la mayoría de los bot es que no llevan ninguna cookie, por lo que no se les adjunta ninguna sesión.
(No estoy seguro de cómo, pero esta es sin duda la mejor manera de rastrearlos)

Mundo maravilloso
fuente
6

Puede analizar el agente de usuario ( $_SERVER['HTTP_USER_AGENT']) o comparar la dirección IP del cliente ( $_SERVER['REMOTE_ADDR']) con una lista de direcciones IP de los robots de los motores de búsqueda .

Gumbo
fuente
2
La lista de IP es más segura si desea asegurarse de que el nombre del agente de usuario sea realmente un bot de motor de búsqueda, porque es posible crear agentes de usuario falsos por nombre.
Mojtaba Rezaeian
5

Use la biblioteca de código abierto Device Detector, ofrece una función isBot (): https://github.com/piwik/device-detector

mattab
fuente
Nota: Esta biblioteca solo analiza el agente de usuario para decidir si el visitante es un bot.
Philipp
Demasiado pesado, solo para verificar un bot de verificación.
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;
    }
}
?>

Esa sería la forma ideal de disfrazarse de arañas. Es de un script de código abierto llamado [YACG] - http://getyacg.com

Necesita un poco de trabajo, pero definitivamente es el camino a seguir.

L. Cosio
fuente
2

Hice una función buena y rápida para esto

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

Esto cubre el 99% de todos los posibles bots, motores de búsqueda, etc.

Ivijan Stefan Stipić
fuente
1

Estoy usando este código, bastante bien. Será muy fácil saber que los agentes de usuario visitaron su sitio. Este código abre un archivo y escribe el user_agent en el archivo. Puede comprobar cada día este archivo yourdomain.com/useragent.txtvisitando y conociendo nuevos user_agents y ponerlos en su condición 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 es el contenido 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
Faro Nguyen
fuente
¿Cuál sería su pieza de cuerda (if_clause) para esto? mozilla / 5.0 (iphone; cpu iphone os 9_3 como mac os x) applewebkit / 601.1.46 (khtml, como gecko) versión / 9.0 mobile / 13e198 safari / 601.1
Joe promedio
1

Detector 100% de bots de trabajo. Está funcionando correctamente en mi sitio web.

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
fuente
1

Si realmente necesita detectar bots del motor de GOOGLE, debería nunca confiar en la dirección "user_agent" o "IP" porque "user_agent" se puede cambiar y de acuerdo con lo que dijo Google en: Verificación de Googlebot

Para verificar que Googlebot es la persona que llama:

Ejecute una búsqueda DNS inversa en la dirección IP de acceso de sus registros, utilizando el comando host.

2.Verifique que el nombre de dominio esté en googlebot.com o google.com.

3.Ejecute un búsqueda de DNS hacia adelante en el nombre de dominio recuperado en el paso 1 usando el comando de host en el nombre de dominio recuperado. Verifique que sea la misma que la dirección IP de acceso original de sus registros.

Aquí está mi código probado:

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

?>

En este código, verificamos "nombre de host", que debe contener "googlebot.com" o "google.com" al final de "nombre de host", que es realmente importante para verificar el dominio exacto, no el subdominio. Espero que disfrutes ;)

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

Para Google, estoy usando este 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
fuente
-1
function bot_detected() {

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