Определить поискового бота (PHP)

Определить поискового робота можно по содержимому заголовка User-Agent: из текущего запроса, если он есть. Поисковые боты, такие как Яндекс, Гугл и другие содержат в этом заголовке название своего бота, например googlebotyandexbox и т.д. В PHP эти данные содержатся в глобальном массиве $_SERVER под индексом HTTP_USER_AGENT.

Функция isBot

Простая функция bool isBot() проверяет заголовок User-Agent на наличие названия поисковых ботов и возвращает true - если это поисковый робот или false - если нет.

<?php /** * Функция определяет по поискового робота при помощи user-agent * @return string|bool */ function isBot($user_agent) { if (empty($user_agent)) { return false; } $bots = [ // Yandex 'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot', 'YandexDirectDyn', 'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser', 'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster', 'YandexPagechecker', 'YandexImageResizer', 'YandexAdNet', 'YandexDirect', 'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika', 'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus', 'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot', 'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI', 'YandexTurbo', 'YandexVerticals', // Google 'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google', 'APIs-Google', 'AdsBot-Google-Mobile', 'AdsBot-Google-Mobile', 'Googlebot-News', 'Googlebot-Video', 'AdsBot-Google-Mobile-Apps', // Other 'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves', 'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!', 'Ezooms', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus', 'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks', 'proximic', 'OpenindexSpider', 'statdom.ru', 'Exabot', 'Spider', 'SeznamBot', 'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti', 'DomainVader', 'DCPbot', 'PaperLiBot', 'StackRambler', 'msnbot', 'msnbot-media', 'msnbot-news', ]; foreach ($bots as $bot) { if (stripos($user_agent, $bot) !== false) { return $bot; } } return false; }

Пример

Ниже приведены примеры использования функции isBot(string $user_agent);

<?php # # Например $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)'; $result = isBot($_SERVER['HTTP_USER_AGENT']);// YandexBot # # Например $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'; $result = isBot($_SERVER['HTTP_USER_AGENT']);// Googlebot # # Например $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +//go.mail.ru/help/robots)'; $result = isBot($_SERVER['HTTP_USER_AGENT']);// Mail.RU_Bot # # Например $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'; $result = isBot($_SERVER['HTTP_USER_AGENT']);// false

Категории

ПрограммированиеPHPИнтернетПоисковые системыСтроки в PHPСтроки

Читайте также

Комментарии