Определение поискового робота по User-Agent на PHP. Что нам понадобится

Данный код на PHP поможет определить, кто зашёл на сайт — поисковый робот или обычный пользователь. Если передать в функцию переменную, то в неё, в случае, если это поисковый робот, запишется название поискового робота.

Эта функция будет проверять, является ли посетитель роботом поисковой системы

function isBot(&$botname = "") { $bots = array("rambler","googlebot","aport","yahoo","msnbot","turtle","mail.ru","omsktele", "yetibot","picsearch","sape.bot","sape_context","gigabot","snapbot","alexa.com", "megadownload.net","askpeter.info","igde.ru","ask.com","qwartabot","yanga.co.uk", "scoutjet","similarpages","oozbot","shrinktheweb.com","aboutusbot","followsite.com", "dataparksearch","google-sitemaps","appEngine-google","feedfetcher-google", "liveinternet.ru","xml-sitemaps.com","agama","metadatalabs.com","h1.hrn.ru", "googlealert.com","seo-rus.com","yaDirectBot","yandeG","yandex", "yandexSomething","Copyscape.com","AdsBot-Google","domaintools.com", "Nigma.ru","bing.com","dotnetdotcom"); foreach ($bots as $bot) { if (stripos($_SERVER["HTTP_USER_AGENT"], $bot) !== false) { $botname = $bot; return true; } } return false; }

function isBot (& $botname = "" ) {

$bots = array (

"rambler" , "googlebot" , "aport" , "yahoo" , "msnbot" , "turtle" , "mail.ru" , "omsktele" ,

"yetibot" , "picsearch" , "sape.bot" , "sape_context" , "gigabot" , "snapbot" , "alexa.com" ,

"megadownload.net" , "askpeter.info" , "igde.ru" , "ask.com" , "qwartabot" , "yanga.co.uk" ,

"scoutjet" , "similarpages" , "oozbot" , "shrinktheweb.com" , "aboutusbot" , "followsite.com" ,

"dataparksearch" , "google-sitemaps" , "appEngine-google" , "feedfetcher-google" ,

"liveinternet.ru" , "xml-sitemaps.com" , "agama" , "metadatalabs.com" , "h1.hrn.ru" ,

"googlealert.com" , "seo-rus.com" , "yaDirectBot" , "yandeG" , "yandex" ,

"yandexSomething" , "Copyscape.com" , "AdsBot-Google" , "domaintools.com" ,

"Nigma.ru" , "bing.com" , "dotnetdotcom"

foreach ($bots as $bot ) {

if (stripos ($_SERVER [ "HTTP_USER_AGENT" ] , $bot ) !== false ) {

$botname = $bot ;

return true ;

return false ;

Вроде большинство записей, которые могут быть в User-Agent различных поисковиков, эта функция покрывает.

Конечно это не 100% способ, так как User-Agent можно менять. Но настоящие поисковики этим по-моему не занимаются. Разве что кто то захочет прикинуться поисковым роботом. Короче используйте этот метод в зависимости от вашего случая.

На просторах интернета так же предлагают определять по IP, по маске адресов. Предполагается что такое то пространство IP адресов выделяется под сервера Google или какие то другие системы. Но как сами понимаете этот метод геморройный. Так как надо следить за списками, масками IP адресов.

Ну и немного оффтоп. Мой случай, в котором я всё это применял, был следующий — хотел я организовать работу запрос — ответ, используя 304 статус «Not Modified», датой модификации и всё это при работе со скриптами. В скриптах я всю эту обратботку сделал. В нужных случаях, если например новость не модифицирована, то отправлялся статус 304 и всё ок. Но!… На динамических страницах у меня присутствовали части страницы, которые менялись и выдавать 304 статус для всей страницы было бы неправильно, пользователь получал бы старые данные, или вернее в этом случае сказать что пользователь бы видел старую страницу и не получал бы новую, хотя какие то части страницы уже обновились. Вот в этом и косяк динамических страниц и 304 статуса. Короче я сделал следующий вывод — забил на этот функционал для обычных пользователей, но оставил этот функционал для поисковых систем, как раз используя для проверки эту функцию определения поискового робота. В принципе я добился своего результата, так как изначально самым главным было сделать этот функционал для поисковиков. Чтобы поисковики побыстрее индексировали сайт и не тратили время на получение контента не изменённой страницы.

Впрочем вот это вот «не тратили время на получение контента не изменённой страницы» можно добиться и составляя sitemap в виде XML, который поисковик будет скачивать и смотреть дату модификации страницы. Но у меня была задача сделать это этими двумя способами. И да, это задача исходила от SEO-шников 🙂

Ладно, начал одним, и если не остановлюсь, наверное закончу уже совсем другим. Это наверное потому что давно в блог ничего не черкал.

За сим откланиваюсь 🙂

Лучший способ удержать пользователя на сайте, это позволить ему найти, то что он ищет. Если вы делаете для этого удобную систему, то уровень предпочтения вашего сайта будет расти и пользователь обязательно вернётся для того, чтобы найти то, что его интересует.

Я вам покажу как создать простую, но эффективную по функционалу, поисковую форму, которая будет использоваться для поиска статей на сайте. Результаты будут появляться на странице без никаких перезагрузок, что несомненно является лучшим способом подачи информации.

Я создам 2 файла: search.php, который будет содержать HTML и JavaScript. Второй файл, do_search.php будет содержать PHP код. Приступим к созданию первого файла:

PHP, jQuery search demo $(function() { $(".search_button").click(function() { // получаем то, что написал пользователь var searchString = $("#search_box").val(); // формируем строку запроса var data = "search="+ searchString; // если searchString не пустая if(searchString) { // делаем ajax запрос $.ajax({ type: "POST", url: "do_search.php", data: data, beforeSend: function(html) { // запустится до вызова запроса $("#results").html(""); $("#searchresults").show(); $(".word").html(searchString); }, success: function(html){ // запустится после получения результатов $("#results").show(); $("#results").append(html); } }); } return false; }); }); Попробуйте ввести слово ajax
Результаты для

В этом файле мы создали обычную HTML форму, которая посылает POST запрос в бэк энд - файлу do_search.php.

PHP код содержит комментарии, по которым вы с лёгкостью сможете понять работу скрипта. Если в базе данных нашлись совпадения, вы показываете их вашему пользователю, выделяя жирным те слова, которые искал пользователь.

Придадим всему этому немного CSS:

Body{ font-family:Arial, Helvetica, sans-serif; } *{ margin:0;padding:0; } #container { margin: 0 auto; width: 600px; } a { color:#DF3D82; text-decoration:none } a:hover { color:#DF3D82; text-decoration:underline; } ul.update { list-style:none;font-size:1.1em; margin-top:10px } ul.update li{ height:30px; border-bottom:#dedede solid 1px; text-align:left;} ul.update li:first-child{ border-top:#dedede solid 1px; height:30px; text-align:left; } #flash { margin-top:20px; text-align:left; } #searchresults { text-align:left; margin-top:20px; display:none; font-family:Arial, Helvetica, sans-serif; font-size:16px; color:#000; } .word { font-weight:bold; color:#000000; } #search_box { padding:4px; border:solid 1px #666666; width:300px; height:30px; font-size:18px;-moz-border-radius: 6px;-webkit-border-radius: 6px; } .search_button { border:#000000 solid 1px; padding: 6px; color:#000; font-weight:bold; font-size:16px;-moz-border-radius: 6px;-webkit-border-radius: 6px; } .found { font-weight: bold; font-style: italic; color: #ff0000; } h2 { margin-right: 70px; }

Вот вы и научились создавать простейшую поисковую форму, которая работает без перезагрузки страницы. Надеюсь, урок вам понравился.

Для начала, определим, откуда можно узнать что-то о посетителе вашего сайта? Дело в том, что при соединении с сервером, браузер посылает много информации о себе в заголовках. Промежуточные компьютеры между вашим, и конечным сервером, могут дописывать свои заголовки. В результате, до вашего скрипта доходит солидное количество информации о вас и о том, как вы получили доступ к сайту.

Как же изъять эти данные, чтобы знать о своих посетителях больше? Я хочу рассмотреть решение этой проблемы на языках Perl и php. Для начала, рассмотрим их на Perl. Нетерпеливые php-шники, вам тоже будет полезно почитать эту часть статьи. Хотя, если вам нужно решение, и побыстрее, то переходите к вашей части.

Получение данных о посетителе на Perl

Итак, начнем. Сервер получил заголовки, которые пришли к нему, вместе с клиентским запросом. Куда же он их девает? Как получить к ним доступ? Все просто. Эти данные сервер хранит в своих переменных, которые называются "переменные окружения". В Perl, доступ к ним осуществляется через хэш %ENV, ключами которого являются имена заголовков, а значениями — переданные данные.

Чтобы посмотреть все переменные окружения, достаточно выполнить простой идеоматический код:

print "$_ = $ENV{$_}
" foreach(keys %ENV);

Какие из этих переменных будут нам полезны? В принципе, вы можете собирать хоть все. Но разумнее было бы собирать лишь то, что нужно. Предлагаю собирать это:

$ip = $ENV{REMOTE_ADDR}; #IP-адрес вашего посетителя
#адрес страницы, на которой посетитель щелкнул по ссылке, ведущей на ваш сайт
#если он перешел на ваш сайт из закладок, или набрав адрес в адресной строке
#значение этой переменной, будет пустым
#если был переход с поисковой системы, эта переменная будет содержать поисковый запрос
$referer = $ENV{HTTP_REFERER};
$client = $ENV{HTTP_USER_AGENT}; #название браузера вашего посетителя.
#адрес страницы, на которую пришел ваш посетитель
#вы можете узнать на какие страницы вашего сайта приходят чаще
$page = $ENV{REQUEST_URI};

Вот так. Пользуйтесь)

Получение данных о посетителе на PHP

В php, дело обстоит похожим образом. Здесь тоже присутствует структура, хранящая данные о переменных окружения. Это ассоциативный массив $_SERVER.

Получим те же данные, но средствами php.

$ip = $_SERVER["REMOTE_ADDR"];
$referer = $_SERVER["HTTP_REFERER"];
$client = $_SERVER["HTTP_USER_AGENT"];
$page = $_SERVER;

Выведем все данные:

foreach($_SERVER as $k=>$v) {print("$k = $v
")}

Дополнительные заголовки. Прокси-серверы.

Некоторые пользователи сидят в интернете через прокси-серверы. В этом случае, неплохо было бы получить еще адрес прокси-сервера. Хорошие прокси посылают данные об IP своего клиента. Есть анонимные прокси, которые вырезают эту информацию из заголовков. В этом случае, получится узнать только адрес самого прокси-сервера.

HTTP_X_FORWARDED_FOR — ip-адрес пользователя, предоставляемый прокси-сервером
HTTP_VIA — имя прокси-сервера
REMOTE_ADDR — ip-адрес самого прокси-сервера

Получить информацию о пользователе, по его IP. Служба WHOIS.

Мы получили ip пользователя. И что с того? Эта информация нам ни о чем не говорит. Как же получить информацию о пользователе, если у нас есть его ip?

Можно воспользоваться службой whois . Вводим ip-адрес и получаем кучку информации. Мы можем узнать город, в котором живет обладатель этого ip, адреса. Иногда, даже точный адрес и e-mail! Мы, почти наверняка, узнаем провайдера обладателя этого IP.

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

Большой брат следит за тобой!

Прежде, чем начинать следить за всеми перемещениями пользователей по вашему сайту, вгоняя их в паранойю, подумайте, а что бы вы хотели знать о своих пользователях? Нужна ли вам информация о том, какие страницы сайта они посещали? Готовы ли вы пожертвовать серверной мощностью и пространством для хранения этих данных, ради того, чтобы собрать полную статистику?

Лично я, на этом сайте, использую систему сбора статистики. Она нужна только для того, чтобы узнавать откуда ко мне приходили посетители, какие поисковые запросы они вбивали. Поэтому, я записываю только тех посетителей, чей referer не пуст и не содержит адрес этого сайта.

Я могу оценивать, какие темы интересны людям, а какие — не очень. Скажем, регулярно заходят с гугла и яндекса. Значит, эта информация нужна людям. Проанализировав запросы, по которым заходят на эту статью, я понял, что не совсем удовлетворяю ожиданиям пользователей. Это заставило меня дописать несколько строк к статье, что придало ей законченности. Теперь пользователи уходят довольными.

Используйте слежку за пользователем с умом! Пусть полученные данные ведут к улучшению ресурса. Доброй охоты!

Если вам понравилась статья, можете подписаться на RSS этого блога и всегда быть в курсе обновлений. А еще, вы можете подписаться на рассылку новостей блога по почте.

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

*Наведите курсор мыши для приостановки прокрутки.

Назад Вперед

Счетчик посещений сайта своими руками на PHP и MySQL

В этом уроке мы с вами рассмотрим, как можно сделать простой счетчик посещений для вашего сайта. Пример мы будем реализовывать на PHP с использованием базы данных.

Понятно, что сейчас существует множество готовых решений - начиная от liveinternet и mail.ru , и заканчивая Яндекс.Метрикой.

Все эти сервисы предоставляют множество различной статистической информации, однако меня все равно периодически просят рассказать, как можно создать пусть даже очень простой, но свой собственный счетчик посещений сайта.

Мы не будем фиксировать десятки и сотни параметров, как это делают монстры, вроде Яндекса. Я покажу вам сам принцип создания счетчика, а вы, при желании, сможете туда добавить больше функций, если это будет необходимо.

Все исходники, используемые в процессе урока, приложены в архив вместе с видеоуроком.

Вы можете просмотреть этот урок прямо сейчас, либо скачать его себе на компьютер по ссылке выше.

Под видео вы найдете сокращенную текстовую версию для этого видеоурока.



Краткий обзор урока (все подробности смотрите в видео):

Что нам понадобится?

1. 4 практически идентичных файла, играющих роли разных страниц сайта (index.php, contacts.php, about.php и uslugi.php)
2. Файл.htaccess для задания кодировки сервера в значение UTF-8
3. Папка css с файлом стилей. Там прописано немного простейших стилей для наших страниц
4. Папка inc с подключаемыми файлами. Их три:
- файл подключения к базе данных
- Файл, который будет подключаться в нужном месте страницы для вывода счетчика на экран
- Основной скрипт, в котором прописана логика работы счетчика
5. Папка admin с файлом index.php. В этом файле мы сможем просмотреть статистику посещений сайта


Как что работает?

1. Создаем проект в Денвере (либо на реальном сервере)

Я создал в Денвере хост с именем statistic , а в папке www находятся все файлы сайта.


2. Создаем базу данных

Давайте перейдем к созданию базы, где у нас будет лежать вся информация. Назовем ее stats и создадим в ней две таблицы.


Если вы не хотите вручную создавать таблицы, то можете воспользоваться дампом базы (приложен в дополнительных материалах) и выполнить SQL-запрос на вкладке SQL после создания базы.


Итак, создаем первую таблицу . Назовем ее ips - в ней будут храниться идентификаторы IP-адресов и сами IP-адреса посетителей сайта.

В таблице будут 2 поля:

Id_id (int (12), первичный ключ, автоинкремент)- идентификатор IP-адреса;
- ip_address (varchar (50)) - сам IP-адрес посетителя.

В таблице будут 4 поля:

visit_id (int (12), первичный ключ, автоинкремент) - идентификатор визита;
date (date) - дата визита;
hosts int(12) - количество хостов (уникальных посещений);
views int(12) - количество хитов (просмотров страниц).

В итоге база будет выглядеть вот так:


3. Базовые положения

Теперь, когда база данных создана, можно перейти к нескольким положениям, от которых мы будем отталкиваться при написании скрипта:

1. Определять уникального посетителя мы будем по IP-адресу. 1 IP-адрес равен 1 уникальному посетителю (хосту).

2. Заходы в течение 1 дня с одним и тем же IP-адресом не увеличивают количество уникальных посетителей в этот день.

3. Любой заход на сайт в течение суток увеличивает счетчик посещений (хитов) на 1 (вне зависимости от того, совершается ли он с уникального за сегодня IP-адреса или нет).

4. Начало суток мы будем определять следующим образом: когда человек заходит на сайт, мы будем делать проверку, существуют ли в таблице visits какие-либо записи за сегодняшнюю дату. Если нет, значит текущий посетитель является первым посетителем в данных сутках.

5. Раз в сутки идет очистка таблицы с IP-адресами для того, чтобы мы могли заносить в нее IP-адреса уже текущего дня и собирать статистику именно по сегодняшним посещениям сайта (делается это как раз по факту обнаружения того, что к нам пожаловал первый в текущих сутках посетитель).

4. Пишем файлы страниц сайта (index.php, contacts.php, about.php и uslugi.php)

Поскольку все 4 файла страниц сайта практически идентичны, мы рассмотрим только страницу index.php . Остальные три страницы (contacts.php, about.php и uslugi.php ) отличаются только тэгами title и h2 , в которых написаны другие названия страниц.

Итак, файл index.php :

Главная

Главная страница

В самом начале мы подключаем файл сount.php , который содержит всю логику работы счетчика.

В нижей части, перед закрывающим тэгом body мы подключаем файл show_stats.php , в котором содержится сам код счетчика, т.е. в этом файле уже формируется непосредственно то, что мы будем выводить на экран.

Т.е. на каждой странице сайта у нас будет выводиться счетчик, и будет указано, сколько было за сегодня уникальных посетителей и просмотров. Этот файл мы разберем позже.

5. Пишем файл стилей (style.css)

#nav{ padding-left: 0px; } #nav li{ display: inline; margin: 5px; padding: 5px; font-family: Verdana; font-size: 15px; background-color: #F1EEF7; border: 1px solid silver; } #nav li a{ text-decoration: none; } #nav li:hover{ background-color: #8D93EF; }

Стили, как вы видите, очень простые. Мы задаем отступы, размер и гарнитуру шрифта, убираем подчеркивание для ссылок в меню и меняем цвет фона при наведении курсора мыши на элемент списка.

Кроме того, мы используем свойство display со значением inline для того, чтобы наше меню приняло горизонтальный, а не вертикальный вид.

6. Пишем файл.htaccess

На всякий случай создаем в корне сайта файл .htaccess с одной единственной директивой для задания кодировки UTF-8:

AddDefaultCharset UTF-8

Данный шаг может оказаться излишним, если кодировка сервера уже была установлена в это значение.

7. Подключаемся к базе данных (db.php)