comment détecter les robots des moteurs de recherche avec php?


Réponses:


74

Voici un répertoire de moteurs de recherche de noms d'araignées

Ensuite, vous utilisez $_SERVER['HTTP_USER_AGENT'];pour vérifier si l'agent est dit araignée.

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 = "robot"; } cela fonctionnera-t-il bien ??
formidable

3
Étant donné que strpos peut renvoyer 0 (la position), strstr renvoie FALSE en cas d'échec, vous pouvez utiliser des strpos si vous ajoutez une! == false check à la fin.
Ólafur Waage

2
Euh, strposretourne aussi FALSEen cas d'échec. C'est plus rapide et plus efficace (pas de prétraitement et pas de stockage O (m)).
Damon

6
Et les faux useragents?!

2
Et si quelqu'un pouvait changer son agent utilisateur avec un faux nom et le nommer comme "Googlebot"? Je pense que la vérification de la plage IP est plus fiable!
Mojtaba Rezaeian

235

J'utilise le code suivant qui semble fonctionner correctement:

function _bot_detected() {

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

mise à jour 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=fr

ajouté mediapartners


2
Cela suppose-t-il que les bots se révèlent comme tels?
Jeromie Devera

2
Vote contre, l'agent utilisateur peut être modifié dans les paramètres de chrome, Firefox,
barwnikk

24
Oui, l'agent utilisateur peut être changé, mais si quelqu'un le modifie pour qu'il contienne "bot", "crawl", "slurp" ou "spider" sait ce qui leur arrive. Cela dépend également de l'utilité. Je n'utiliserais pas cela pour supprimer tous les CSS, mais je l'utiliserais pour ne pas stocker de cookies, ignorer la journalisation de l'emplacement ou ignorer une page de destination.
JonShipman

2
Est-ce que personne n'est d'accord avec moi pour dire que c'est un moyen de faire correspondre une large gamme?
Daan

J'utilise votre fonction depuis plus d'un jour maintenant et elle semble fonctionner. Mais je ne suis pas sûr. Comment puis-je envoyer des robots de test pour tester si cela fonctionne?
FarrisFahad

19

Vérifier la $_SERVER['HTTP_USER_AGENT'] certaines des chaînes répertoriées ici:

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

Ou plus spécifiquement pour les robots d'exploration:

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

Si vous souhaitez enregistrer le nombre de visites des moteurs de recherche les plus courants, vous pouvez utiliser

$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

Vous pouvez vérifier s'il s'agit d'un moteur de recherche avec cette fonction:

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

Ensuite, vous pouvez l'utiliser comme:

<?php $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
  if(crawlerDetect($USER_AGENT)) return "no need to lang redirection";?>

2
Je pense que cette liste est obsolète, je ne vois pas "slurp" par exemple qui est Yahoo c'est spider help.yahoo.com/kb/SLN22600.html
Daan

11

J'utilise ceci pour détecter les 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
}

De plus, j'utilise une liste blanche pour bloquer les bots indésirables:

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 indésirable (= utilisateur faux positif) est alors capable de résoudre un captcha pour se débloquer pendant 24 heures. Et comme personne ne résout ce captcha, je sais qu'il ne produit pas de faux positifs. La détection des robots semble donc fonctionner parfaitement.

Remarque: ma liste blanche est basée sur le fichier robots.txt de Facebook .


vous avez oublié une fermeture )dans votre premier morceau de code.
Ludo - Off the record

10

Parce que n'importe quel client peut définir l'agent utilisateur comme il le souhaite, la recherche de «Googlebot», «bingbot», etc. ne représente que la moitié du travail.

La 2ème partie vérifie l'adresse IP du client. Dans l'ancien temps, cela nécessitait de maintenir des listes d'adresses IP. Toutes les listes que vous trouvez en ligne sont obsolètes. Les principaux moteurs de recherche prennent officiellement en charge la vérification via DNS, comme expliqué par Google https://support.google.com/webmasters/answer/80553 et Bing http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26

Dans un premier temps, effectuez une recherche DNS inversée de l'adresse IP du client. Pour Google, cela apporte un nom d'hôte sous googlebot.com, pour Bing, c'est sous search.msn.com. Ensuite, comme quelqu'un pourrait définir un tel DNS inversé sur son IP, vous devez vérifier avec une recherche DNS directe sur ce nom d'hôte. Si l'adresse IP résultante est la même que celle du visiteur du site, vous êtes sûr qu'il s'agit d'un robot d'exploration de ce moteur de recherche.

J'ai écrit une bibliothèque en Java qui effectue ces vérifications pour vous. N'hésitez pas à le porter en PHP. C'est sur GitHub: https://github.com/optimaize/webcrawler-verifier


1
Toutes les autres réponses utilisant des chaînes user-agent ne sont qu'à mi-chemin. Sensationnel.
mlissner

1
Il existe de nombreux commentaires sur le fait que la vérification de l'agent utilisateur ne représente que la moitié de la vérification. C'est vrai, mais gardez à l'esprit que la recherche DNS complète et inversée a un impact énorme sur les performances. Tout dépend du niveau de certitude que vous devez obtenir pour prendre en charge votre cas d'utilisation. C'est pour une certitude à 100% au détriment de la performance. Vous devez décider quel est le bon équilibre (et donc la meilleure solution) pour votre situation.
Brady Emerson

Il n'y a pas "d'impact énorme sur les performances". Premièrement, la recherche DNS inversée n'est effectuée que sur les visiteurs qui s'identifient comme moteur de recherche. Tous les humains ne sont pas du tout affectés. Ensuite, cette recherche n'est effectuée qu'une seule fois par IP. Le résultat est mis en cache. Les moteurs de recherche continuent à utiliser les mêmes plages d'adresses IP pendant très longtemps et atteignent généralement un site avec une ou quelques adresses IP uniquement. Aussi: vous pouvez effectuer la validation différée. Laissez passer la première requête, puis validez en arrière-plan. Et si négatif, évitez les requêtes successives. (Je déconseillerais cela car les moissonneurs ont maintenant de grands pools IP ...)
Fabian Kessler

Existe-t-il une bibliothèque simulaire écrite en PHP?
userlond

8

J'utilise cette fonction ... une partie de la regex vient de prestashop mais j'y ai ajouté plus de 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;
}

Quoi qu'il en soit, veillez à ce que certains robots utilisent un navigateur comme un agent utilisateur pour simuler leur identité
(j'ai de nombreuses adresses IP russes qui ont ce comportement sur mon site)

Une caractéristique distinctive de la plupart des robots est qu'ils ne portent aucun cookie et qu'aucune session ne leur est attachée.
(Je ne sais pas comment mais c'est certainement la meilleure façon de les suivre)


6

Vous pouvez analyser l'agent utilisateur ( $_SERVER['HTTP_USER_AGENT']) ou comparer l'adresse IP du client ( $_SERVER['REMOTE_ADDR']) avec une liste d'adresses IP des robots des moteurs de recherche .


2
La liste d'adresses IP est plus sécurisée si vous voulez vous assurer que le nom de l'agent utilisateur est vraiment un robot de moteur de recherche, car il est possible de créer de faux agents utilisateurs par nom.
Mojtaba Rezaeian


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

Ce serait le moyen idéal de dissimuler les araignées. Cela provient d'un script open source appelé [YACG] - http://getyacg.com

Besoin d'un peu de travail, mais certainement la voie à suivre.


2

J'ai fait une bonne et rapide fonction pour cela

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

Cela couvre 99% de tous les robots, moteurs de recherche, etc.


1

J'utilise ce code, plutôt bien. Vous connaîtrez très facilement les utilisateurs-agents visités sur votre site. Ce code ouvre un fichier et écrit le user_agent dans le fichier. Vous pouvez vérifier chaque jour ce fichier en yourdomain.com/useragent.txtaccédant à et connaître les nouveaux user_agents et les mettre dans votre condition de clause 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);
    }
}

C'est le contenu 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

Quel serait votre morceau de chaîne (if_clause) pour cela? mozilla / 5.0 (iphone; cpu iphone os 9_3 comme mac os x) applewebkit / 601.1.46 (khtml, comme gecko) version / 9.0 mobile / 13e198 safari / 601.1
Moyenne Joe

1

Détecteur de Bot 100% fonctionnel. Cela fonctionne avec succès sur mon site 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()

1

Si vous avez vraiment besoin de détecter les robots du moteur GOOGLE, vous ne devez jamais vous fier à l'adresse "user_agent" ou "IP", car "user_agent" peut être modifié et en fonction de ce que Google a dit dans: Vérification de Googlebot

Pour vérifier Googlebot en tant qu'appelant:

Exécutez un DNS inversé recherche inversée sur l'adresse IP d'accès à partir de vos journaux, à l'aide de la commande host.

2.Vérifiez que le nom de domaine se trouve sur googlebot.com ou google.com

3.Lancez une recherche DNS directe sur le nom de domaine récupéré à l'étape 1 à l'aide de la commande host sur le nom de domaine récupéré. Vérifiez qu'elle est la même que l'adresse IP d'accès d'origine de vos journaux.

Voici mon code testé:

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

?>

Dans ce code, nous vérifions "hostname" qui doit contenir "googlebot.com" ou "google.com" à la fin de "hostname", ce qui est vraiment important pour vérifier le domaine exact et non le sous-domaine. J'espère que tu apprécies ;)


0

Pour Google, j'utilise cette méthode.

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édits: 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;
  }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.