Как определить поисковых роботов с помощью PHP

В прошлой статье «Как выдать роботу 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 записей, были и другие роботы, но все же будь внимателен.

Метки: , , ,

Оставьте комментарий