як виявити боти пошукових систем за допомогою 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, якщо ви додасте! == помилкову перевірку в кінці.
flafur Waage

2
Ем, strposповертається і FALSEна невдачу. Це швидше та ефективніше, хоча (без попередньої обробки та без O (m) зберігання).
Деймон

6
Що з підробленими корисними засобами ?!

2
А що, якби хтось міг змінити свого агента користувача на фальшиве ім’я та назвати його як "Googlebot"? Я думаю, що перевірка діапазону ip надійніша!
Mojtaba Rezaeian

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=uk

додали медіа-партнери


2
Чи припускає це, що боти виявляють себе як такі?
Jeromie Devera

2
Голосувати, користувацький агент можна змінити в налаштуваннях chrome, firefox,
barwnikk

24
Так, корисний засіб може бути змінено, але якщо хтось змінить його, щоб він містив "бот", "повзання", "бабака" або "павук", знає, що до них приходить. Це також залежить від корисності. Я б не використовував це, щоб викреслити всі CSS, але використовував би це, щоб не зберігати файли cookie, ігнорувати реєстрацію місцеположень чи пропускати цільову сторінку.
JonShipman

2
Хіба ніхто не погоджується зі мною, що це шлях до широкого кола?
Даан

Я використовував вашу функцію більше 1 дня і, здається, працює. Але я не впевнений. Як я можу надіслати тестові боти на тестування, чи працює?
FarrisFahad

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

2
Я думаю, що цей список застарів, я не бачу "балаканини", наприклад, Yahoo - це павук help.yahoo.com/kb/SLN22600.html
Дан

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 годин. І оскільки цю капчу ніхто не вирішує, я знаю, що вона не дає помилок. Тож виявлення бота, здається, працює чудово.

Примітка. Мій білий список заснований на Facebooks robots.txt .


ви забули закриття )свого першого коду.
Лудо - Вимкнений запис

10

Оскільки будь-який клієнт може встановити користувальницький агент на те, що він хоче, шукаючи "Googlebot", "bingbot" тощо - це лише половина роботи.

2-а частина - це перевірка 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-код збігається з відвідувачем сайту, ви впевнені, що це сканер із цієї пошукової системи.

Я написав бібліотеку на Java, яка виконує ці перевірки для вас. Сміливо перенесіть його на PHP. Це на GitHub: https://github.com/optimaize/webcrawler-verifier


1
Усі інші відповіді за допомогою рядків користувача-агента знаходяться лише на півдорозі. Ого.
mlissner

1
Існує багато коментарів щодо перевірки агентом користувача, що є лише половиною перевірки. Це правда, але майте на увазі, що повний DNS і зворотний пошук DNS має величезний вплив на продуктивність. Все залежить від рівня визначеності, який потрібно отримати, щоб підтримати ваш випадок використання. Це на 100% визначеність за рахунок продуктивності. Ви повинні вирішити, який правильний баланс (і, отже, найкраще рішення) для вашої ситуації.
Брейді Емерсон

Немає "величезного впливу на продуктивність". По-перше, зворотний пошук dns виконується лише для відвідувачів, які ідентифікуються як пошукова система. Всі люди взагалі не постраждали. Потім цей пошук виконується лише один раз за IP. Результат кешований. Пошукові системи дуже довго користуються одними і тими ж діапазонами IP і зазвичай потрапляють на один сайт лише з одним або кількома IP-адресами. Також: ви можете виконати перевірку із запізненням. Пропустіть перший запит, а потім підтвердіть тло. І якщо це негативно, запобігайте послідовним запитам. (Я б радив цього не робити, оскільки комбайни зараз мають великі басейни IP ...)
Fabian Kessler

Чи є в 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

Використовуйте бібліотеку відкритого коду Detector Detector, вона пропонує функцію isBot (): https://github.com/piwik/device-detector


Примітка. Ця бібліотека аналізує лише агент користувача, щоб визначити, чи відвідувач - бот.
Філіп

Занадто важкий, просто перевірити перевіреного бота.
Джоель Джеймс

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_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, як gecko) версія / 9.0 mobile / 13e198 safari / 601.1
середній Joe

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: Перевірка Googlebot

Щоб підтвердити Googlebot як абонента:

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

2.Перевірте, чи є доменне ім'я або на googlebot.com, або на google.com

3.Запустіть прямий пошук DNS на ім'я домену, отримане на кроці 1, використовуючи команду хоста для отриманого доменного імені. Переконайтеся, що він такий самий, як і вихідна 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;
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.