come rilevare i bot dei motori di ricerca con php?


Risposte:


74

Ecco una directory dei motori di ricerca di nomi di ragno

Quindi $_SERVER['HTTP_USER_AGENT'];controlli se l'agente è detto ragno.

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"; } funzionerà bene ??
fantastico

3
Poiché strpos può restituire 0 (la posizione), strstr restituisce FALSE in caso di errore, puoi utilizzare strpos se aggiungi un segno di spunta! == false alla fine.
Ólafur Waage

2
Ehm, strpostorna anche FALSEin caso di fallimento. Tuttavia, è più veloce ed efficiente (nessuna pre-elaborazione e nessuna memorizzazione O (m)).
Damon

6
E i falsi useragent ?!

2
E se qualcuno potesse cambiare il suo agente utente con un nome falso e chiamarlo come "Googlebot"? Penso che controllare l'intervallo di ip sia più affidabile!
Mojtaba Rezaeian

235

Uso il seguente codice che sembra funzionare bene:

function _bot_detected() {

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

aggiornamento 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=it

aggiunto mediapartners


2
Ciò presuppone che i bot si rivelino come tali?
Jeromie Devera

2
Vota, l'agente utente può essere modificato nelle impostazioni di Chrome, Firefox,
barwnikk

24
Sì, lo useragent può essere cambiato, ma se qualcuno lo sta cambiando per contenere "bot", "crawl", "slurp" o "spider" sa cosa gli sta succedendo. Dipende anche dall'utilità. Non lo userei per eliminare tutti i CSS, ma lo userei per non memorizzare i cookie, ignorare la registrazione della posizione o saltare una pagina di destinazione.
JonShipman

2
Nessuno è d'accordo con me sul fatto che questo sia un modo per abbinare un'ampia gamma?
Daan

Ho usato la tua funzione per più di 1 giorno e sembra funzionare. Ma non sono sicuro. Come posso inviare bot di test per verificare se funziona?
FarrisFahad

19

Controlla $_SERVER['HTTP_USER_AGENT']alcune delle stringhe elencate qui:

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

O più specificamente per i crawler:

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

Se vuoi -dire- registrare il numero di visite dei crawler dei motori di ricerca più comuni, puoi usare

$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

Puoi effettuare il checkout se si tratta di un motore di ricerca con questa funzione:

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

Quindi puoi usarlo come:

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

2
Penso che questo elenco sia obsoleto, non vedo "slurp", ad esempio, che è Yahoo è spider help.yahoo.com/kb/SLN22600.html
Daan

11

Lo sto usando per rilevare i bot:

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
}

Inoltre utilizzo una whitelist per bloccare i bot indesiderati:

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 indesiderato (= utente falso positivo) è quindi in grado di risolvere un captcha per sbloccarsi per 24 ore. E poiché nessuno risolve questo captcha, so che non produce falsi positivi. Quindi il rilevamento dei bot sembra funzionare perfettamente.

Nota: la mia lista bianca si basa sul file robots.txt di Facebook .


hai dimenticato una chiusura )nel tuo primo pezzo di codice.
Ludo - Non registrato il

10

Poiché qualsiasi cliente può impostare lo user-agent su ciò che desidera, cercare "Googlebot", "bingbot" ecc. È solo metà del lavoro.

La seconda parte sta verificando l'IP del client. Ai vecchi tempi ciò richiedeva il mantenimento degli elenchi di indirizzi IP. Tutti gli elenchi che trovi online non sono aggiornati. I principali motori di ricerca supportano ufficialmente la verifica tramite DNS, come spiegato da Google https://support.google.com/webmasters/answer/80553 e Bing http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26

Inizialmente eseguire una ricerca DNS inversa dell'IP del client. Per Google questo porta un nome host sotto googlebot.com, per Bing è sotto search.msn.com. Quindi, poiché qualcuno potrebbe impostare un DNS inverso di questo tipo sul suo IP, è necessario verificare con una ricerca DNS in avanti su quel nome host. Se l'IP risultante è uguale a quello del visitatore del sito, sei sicuro che si tratti di un crawler di quel motore di ricerca.

Ho scritto una libreria in Java che esegue questi controlli per te. Sentiti libero di portarlo su PHP. È su GitHub: https://github.com/optimaize/webcrawler-verifier


1
Tutte le altre risposte che utilizzano le stringhe dell'agente utente sono solo a metà strada. Wow.
mlissner

1
Ci sono molti commenti sul controllo dello user-agent che è solo metà del controllo. Questo è vero, ma tieni presente che c'è un enorme impatto sulle prestazioni nell'esecuzione della ricerca DNS completa e inversa. Tutto dipende dal livello di certezza che devi ottenere per supportare il tuo caso d'uso. Questo è per la certezza del 100% a scapito delle prestazioni. Devi decidere qual è il giusto equilibrio (e quindi la migliore soluzione) per la tua situazione.
Brady Emerson,

Non c'è "un enorme impatto sulle prestazioni". Innanzitutto, la ricerca DNS inversa viene eseguita solo sui visitatori che si identificano come motore di ricerca. Tutti gli esseri umani non sono affatto influenzati. Quindi, questa ricerca viene eseguita solo una volta per IP. Il risultato viene memorizzato nella cache. I motori di ricerca continuano a utilizzare gli stessi intervalli IP per un tempo molto lungo e di solito colpiscono un sito con uno o pochi IP solo. Inoltre: potresti eseguire la convalida ritardata. Lascia passare la prima richiesta, quindi convalida in background. E se negativo, evita richieste successive. (Lo sconsiglio perché ora le mietitrici hanno grandi piscine IP ...)
Fabian Kessler

C'è qualche libreria simulare scritta in PHP?
userlond

8

Uso questa funzione ... parte della regex proviene da prestashop ma ho aggiunto un po 'di bot ad essa.

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

Comunque fai attenzione che alcuni bot usino browser come user agent per falsificare la loro identità
(ho molti ip russi che hanno questo comportamento sul mio sito)

Una caratteristica distintiva della maggior parte dei bot è che non trasportano alcun cookie e quindi non è associata alcuna sessione.
(Non sono sicuro di come ma questo è sicuramente il modo migliore per rintracciarli)


6

È possibile analizzare l'agente utente ( $_SERVER['HTTP_USER_AGENT']) o confrontare l'indirizzo IP del client ( $_SERVER['REMOTE_ADDR']) con un elenco di indirizzi IP dei bot dei motori di ricerca .


2
L'elenco degli IP è più sicuro se vuoi assicurarti che il nome dell'agente utente sia davvero un bot del motore di ricerca, perché è possibile creare falsi agenti utente per nome.
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;
    }
}
?>

Questo sarebbe il modo ideale per nascondere i ragni. Proviene da uno script open source chiamato [YACG] - http://getyacg.com

Ha bisogno di un po 'di lavoro, ma sicuramente la strada da percorrere.


2

Ho creato una funzione buona e veloce per questo

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

Questo copre il 99% di tutti i possibili bot, motori di ricerca ecc.


1

Sto usando questo codice, abbastanza bene. Sarà molto facile sapere che gli user-agent hanno visitato il tuo sito. Questo codice sta aprendo un file e scrive user_agent nel file. Puoi controllare ogni giorno questo file andando a yourdomain.com/useragent.txtconoscere i nuovi user_agents e metterli nella tua condizione di clausola 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);
    }
}

Questo è il contenuto di 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

Quale sarebbe il tuo pezzo di corda (if_clause) per questo? 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
Average Joe

1

Rilevatore Bot funzionante al 100%. Funziona con successo sul mio sito 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

Se hai davvero bisogno di rilevare i bot del motore GOOGLE, non dovresti mai fare affidamento sull'indirizzo "user_agent" o "IP" perché "user_agent" può essere modificato e in base a ciò che Google ha detto in: Verifica di Googlebot

Per verificare Googlebot come chiamante:

1.Esegui una ricerca DNS inversa sull'indirizzo IP di accesso dai tuoi log, utilizzando il comando host.

2.Verifica che il nome del dominio sia in googlebot.com o google.com

3. Eseguire una ricerca DNS in avanti sul nome di dominio recuperato nel passaggio 1 utilizzando il comando host sul nome di dominio recuperato. Verifica che sia lo stesso dell'indirizzo IP di accesso originale dai tuoi log.

Ecco il mio codice testato:

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

?>

In questo codice controlliamo "hostname" che dovrebbe contenere "googlebot.com" o "google.com" alla fine di "hostname" che è molto importante per controllare il dominio esatto e non il sottodominio. Spero ti piaccia ;)


0

Per Google sto usando questo metodo.

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

Crediti: 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;
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.