Артём Мáлков

Как определить, что посетитель вашего сайта поисковый робот, а не человек на PHP?

13 фев5 комм

Почти каждое устройство в сети Интернет при посещении того или иного сайта посылает так называемых «User Agent», некую информацию в виде названия операционной системы, языка, браузера и прочих параметров.

Некоторые из этих данных динамичны (меняются с течением времени), а некоторые – статичны, то есть не изменяются. По заголовку, посылаемому браузером посетителя к вашему веб-сайту, мы можем определить, является ли он человеком или же поисковым роботом.

Для такого определения мы воспользуемся PHP и готовой для него функцией определения популярных поисковых (и не только) ботов.

Сама функция выглядит так:

function isBot() {

	if(!isset($_SERVER['HTTP_USER_AGENT'])) {

		$_SERVER['HTTP_USER_AGENT'] = '';

	}
	
	$bots = [
		'Google', 'Yandex', 'Baiduspider', 'Lycos', 'Genieo', 'Slurp', 'WebAlta', 'facebook',
		'Mail.Ru', 'ia_archiver', 'Teoma', 'Yahoo', 'Ask', 'Rambler', 'crawler4j', 'MJ12',
		'Seznam', 'Bot', 'cURL', 'DuckDuckGo', 'AOL', 'Lighthouse'
	];
	
	foreach($bots as $bot) {
	
		if(stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) {
		
			return $bot;
			
		}
		
	}
	
	return false;

}

И вот пример ее использования:

if(isBot()) { // Условие, если это бот

	// Выполняем действие или выводим имя бота через echo isBot();
   
}

Функция содержит в себе идентификаторы всех популярных поисковых роботов. По желанию вы можете дополнить их своим списком или, например, ограничиться только определенными ботами.

Хочется отметить, что этот вариант определения поисковых роботов не дает 100% точности, так как заголовок (User Agent) можно подменить.

Рекомендуем к просмотру
Как получить IP-адрес посетителя сайта в PHP?
Посты
Как определить время выполнения PHP-скрипта?
Статьи и советы
Как определить, авторизован ли пользователь или нет в WordPress?
Статьи и советы
5
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 26
    1066
      •  Команда Pandoge
    27 мар в 14:40

    Инструкция обновлена.

    Изменен код и расширена база ботов.

      • 1
      30
        •  Проверенный
      9 окт в 13:53

      Артём Мáлков, привет, куда надо добавить/вставить функцию, и пример использования

      • 1
      1066
        •  Команда Pandoge
      9 окт в 22:44

      Damirlt, здравствуйте! Подскажите, на чём сделан сайт?

      • 1
      30
        •  Проверенный
      10 окт в 20:07

      Артём Мáлков, сайт на html

      • 1
      1066
        •  Команда Pandoge
      изменено 12 окт в 13:03

      Sergey, наверное самый простой вариант:

      1. В корне сайта создаете файл check-bots.php. Открываете. В самом верху пишите:

      <?php

      и сразу после вставляете функцию из статьи.

      2. У нужной страницы меняете формат с .html на .php. Это нужно делать аккуратно, т.к страница поменяет свой адрес, в следствии чего может пропасть с поиска. Чтобы этого не было - прописывайте редирект. Так же новый адрес нужно прописать в меню сайта, если такие есть.

      После смены формата на странице будет работать PHP-код (если нет ограничений со стороны хостинга).

      3. На странице из шага 2, в самый верх вставляете:

      <?php
      
      	require_once $_SERVER['DOCUMENT_ROOT'].'/check-bots.php';
      	
      ?>

      и на этой же странице вам будет доступно условие из статьи:

      if(isBot()) {

      Пример:

      <?php
      
      	if(isBot()) {
      		
      		echo 'Вы - бот';
      		
      	} else {
      		
      		echo 'Вы - не бот';
      		
      	}
      	
      ?>

      Проверить, что скрипт действительно определяет ботов можно через сервис Яндекса - https://webmaster.yandex.ru/tools/server-response/

      Указываете страницу с условием и смотрите возвращаемое содержимое.

Подняться наверх
«Pandoge» - помощник вебмастера