Давным-давно полюбил статистику сервиса LiveInternet, и ни разу не было повода усомниться в своей любви. До сегодняшнего дня, точнее ночи... Но сначала опишу, чем мне так нравится счётчик LiveInternet. Его используют многие сайты, и можно получить представление о посещаемости почти любого сайта (хиты и хосты за день, неделю, месяц) даже если статистика под паролем, для этого надо воспользоваться ссылокой:

http://counter.yadro.ru/values?site=адрес-сайта.ру

Не забыть только подставить вместо «адрес-сайта.ру» нужный домен. Далее, т.к. синтаксис данных, возвращаемых counter.yadro-м очень прост, то идеально подходит для парсинга. Например, у меня есть скриптец, где в одной таблице выводится статистика по доброму десятку моих доменов. Выбрав домен в таблице, нажатием одной кнопки можно переместиться на страницу статистики сайта LiveInternet, где уже можно смотреть и поисковые запросы, и источники трафа, и многое другое.

А сегодня решил на ночь глядя как всегда глянуть статистику по своим сайтам, и опешил. На одном сайте число ~300 моментально упало на ноль:

статистика посещений сайта

А через некоторое время появилась красная надпись «Статистика за 7 декабря будет доступна 8 декабря». И стали считаться новые посетители, но старые (потерянные) так в статистике и не появились. Куда пропал пипл, непонятно. Теперь я просто уже склонен недоверять данным статистики LiveInternet

Кто-то, помнится, рекомендовал мне сервис Google-Analytics, где также есть все необходимые статистические данные для анализа сайта. Но мне теперь уже ясно, насколько бы ни были популярны и авторитетны сервисы — все они имеют право глючить, а их бесплатность подразумевает оставлять претензии при себе.

Но что может быть точнее, чем статистика посещений, полученная на самом сайте, без участия сторонних сервисов? Для этого потребуется поддержка PHP, что в наш высокотехнологичный век является почти стандартной услугой хостера. Не буду стремиться в одной статье объять всё необъятное, потому расскажу только как считать, оставляя за кадром другие связанные вопросы: «куда запоминать полученные сведения?», «как отображать статистику» и т.п. — кроме того, это дело вкуса.

Основные способы вставки своего счётчика:

  • Вставка непосредственно в PHP-код
  • Счётчик-картинка (адрес картинки запускает php-скрипт, который считает и отображает картинку)
  • Код счётчика запускается java-скриптом (например, при помощи document.write)

Подключив фантазию, можно и ещё способов придумать (например, загрузка счётчика в iframe), но я ограничусь перечисленными. Не один из этих способов не идеален. Больше всего посещений будет учтено при вставке счётчика в PHP-код страницы. Но таким образом сложно определить, является посетитель человеком или ботом. Вообще, различение происходит по передаваемым сведениям «User-Agent» (глобальная константа $_SERVER['USER_AGENT']). В этом поле нужно искать слово, которое идентифицирует посетителя как поискового бота. Например, таким образом:

class robot_ident {<br />
var $user_agent;<br />
var $name;<br />
function robot_ident () {<br />
$this->user_agent = @ $_SERVER['USER_AGENT'];<br />
$this->name = '';<br />
# Слово, выявляющее принадлежность к поисковым роботам<br />
if (stristr ($this->user_agent, "Rambler")) $this->name = 'rambler';<br />
if (stristr ($this->user_agent, "Google") ) $this->name = 'google';<br />
if (stristr ($this->user_agent, "Yandex") ) $this->name = 'yandex';<br />
if (stristr ($this->user_agent, "Aport")  ) $this->name = 'aport';<br />
if (stristr ($this->user_agent, "msnbot") ) $this->name = 'msnbot';<br />
if (stristr ($this->user_agent, "Yahoo!") ) $this->name = 'yahoo!';<br />
# И так далее.........<br />
}<br />
}

Но это не значит, что если мы не идентифицировали бота, то это непременно человек. Это может быть бот неучтённой поисковой системы или другого сервиса, а также бот может замаскироваться под браузер человека, чтобы проверить сайт на клоакинг. Вывод: вставлять счётчик в PHP-код страницы имеет смысл, если нас интересуют заходы на сайт ботов поисковых систем.

Наряду со счётчиком ботов не плохо бы всё же считать и реальных посетителей. Вариант с картинками меня, лично, не устраивает. Да, не все боты загружают картинки, но есть некоторые, которые всё же картинки загружают, а значит статистика будет завышенной — в качестве реальных посетителей посчитаются некоторые боты. При использовании java-script мы, наоборот, не досчтитаемся некоторых посетителей (может, одного из тысячи, десяти тысяч...) по той причине, что не у всех может быть включён java-script. Раньше много говорили по поводу опасности java-script и как важно его отключить. Наверное, есть люди, которые включают java-script только по особому случаю. Но оставим лирику, вот пример загрузки счётчика скриптом (вставляется в HTML-шаблон страницы):

<script type="text/javascript"><!--<br />
document.write ('<im'+'g sr'+'c="http://мой-сайт.ру/counter.php?ref'+<br />
escape(document.referrer)+((typeof(screen)=="undefined")?"":";screen"+<br />
screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth))+<br />
";url"+escape(document.URL)+";"+Math.random()+'" width=3 height=3 alt="">');<br />
//--></script>

Здесь при помощи скрипта мы передаём считающему скрипту (counter.php) страницу, с которой пришёл пользователь (ref), параметры экрана — «ширина*высота*цветность», адрес самой страницы, где расположен счётчик (url), а также к строке запроса добавляется произвольное число, чтобы избежать кэширования счётчика на стороне пользователя. В данном примере счётчик тоже выводится в виде рисунка. Лучше не указывать размеры рисунка «1×1», т.к. такие размеры вызывают подозрение (похоже на стремление что-то скрыть), потому я указал размеры «3×3», вы можете выводить скриптом картинку любых размеров и указать соответствующие размеры. Какие данные можно получить таким счётчиком:

  • Из User-Agent-а можно узнать браузер, которым пользуется посетитель
  • В переданном рефере (ref) может содержаться поисковый запрос, если пользователь пришёл с поисковой системы. Этот запрос будет url-кодированный, привести его в читаемый вид можно PHP-функцией urldecode (). Также будет видно, с какой страницы ПС перешёл человек. Для получения таких данных нужно предусмотреть синтаксис основных поисковых систем. Пример для Яндекса: http://yandex.ru/yandsearch?p=2&text=HyperSEO&lr=1 — здесь я жирным выделил страницу перехода и поисковый запрос (несмотря на то, что номер страницы 2, надо счтитать это переходом с 3-ей страницы — для первой страницы параметра «p» вообще нет)
  • Установив пользователю кукисы, можно в дальнейшем определять его уникальность, число просмотренных им страниц. Можно также уникальность определять по IP, ведь если человек отключил кукисы и посмотрел несколько страниц — это может быть засчитано как несколько уников. При определении уникальности по IP нужно также иметь ввиду, что некоторые посетители могут пользоваться прокси-серверами, из-за чего возникнет некоторая погрешность. Лучше комбинировать оба варианта

Как и говорил, моё дело — показать, что можно сделать «своими руками», а уже ваше — принять решение, использовать это в своём сайтостроении или нет. Если использовать, то необходимо решить ещё ряд задач: где хранить собираемые данные (лучше использовать MySQL, а не текстовые файлы), как делать выборку, как чистить базу (а это придётся делать, иначе за несколько месяцев её размер может достичь десятков и более мегабайт), как определять уникальность посетителя. Успехов в кодинге!

Запись опубликована 8 декабря 2009 года. Понравился пост? Читайте предыдущие посты рубрики «Web-кодинг»:

Подписка на RSS канал блога RSS подписка (как это?) поможет вам не пропустить ничего интересного на этом блоге.