В прошлой статье «Как выдать роботу Google страницы, которые он еще не видел?«, я попытался обрисовать ситуацию, когда нам нужно запомнить где бывал робот и выдать ему контент который он еще не видел.
В принципе алгоритм простой, но он очень сильно заполняет базу данных. Кроме того как по мне, получилось достаточно не мало кода, некоторый возможно лишний, я все-таки его выставил в учебных целях.
Но все же я подумал что нужно выставить на эту тему что-то более простое и универсальное — и вот тут пришла в голову идея. Наша цель просто опознать робота на странице верно?
Так давайте сделаем простую функцию которая будет его детектить, а дальше уже можно что-то к ней допилить, например выдачу контента определенного, либо блокировку, редиректы и т.п.
Определение робота поисковой системы с помощью user-agent
Это самый четкий способ, хотя сказать по правде, я уверен в том, что поисковые системы не глупые и рядом с поисковыми ботами они пускают эмуляторы, которые под видом обычного пользователя заходят на сайт и что-то проверяют.
Эти эмуляторы определить будет практически невозможно, но если поисковый робот зайдет со своим user-agent’ом, то мы его точно опознаем.
Ниже хочу привести к вниманию простую функцию:
function is_bot() { if (!empty($_SERVER['HTTP_USER_AGENT'])) { $options = array( 'APIs-Google','Mediapartners-Google','AdsBot-Google-Mobile','AdsBot-Google-Mobile','AdsBot-Google','Googlebot','Mediapartners-Google', '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', 'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google', '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' ); foreach($options as $row) { if (stripos($_SERVER['HTTP_USER_AGENT'], $row) !== false) { return true; } } } return false; } if(is_bot()){ // Споймали его можем делать чет с этой информацией }
Алгоритм функции очень простой — кто-то заходит на страницу, функция запускается и начинает перебирать все данный имеющиеся в его массиве.
Если находится совпадение — профит!
User agent’ы, где же их брать?
В документации того источника который хотим отследить. Вот к примеру по Google информация об их юзер-агентах.
Думаю такая-же страничка есть и у яндекса, и у других ресурсов. Но все же советую не ловить все что заходит на сайт. Дело в том, что на сайт может заходить сотни и тысячи роботов даже если посещаемость равна 0.
Я на личной шкуре это прочувствовал когда начал запись всех кто заходит. Semrash, Ahrefs, за один день забили базу данных на 100 000 записей, были и другие роботы, но все же будь внимателен.