Я заметил, что у StackOverflow есть количество просмотров для каждого вопроса, и что эти количества просмотров довольно низкие и точные.
У меня на одном из моих сайтов есть похожая штука. Он в основном регистрирует «попадание» всякий раз, когда страница загружается в коде серверной части. К сожалению, это также происходит с попаданиями в поисковые системы, дающими раздутые и неточные числа.
Я предполагаю, что один из способов не считать робота - это выполнить подсчет просмотров с помощью вызова AJAX после загрузки страницы, но я уверен, что есть другие, более эффективные способы игнорировать поисковые системы в ваших счетчиках посещений, при этом позволяя им сканировать ваш сайт. Вы знаете кого-нибудь?





Причина, по которой Stack Overflow имеет точное количество просмотров, заключается в том, что он учитывает каждый просмотр / пользователя только один раз.
Стороннее приложение счетчика посещений (и веб-статистики) часто отфильтровывает поисковые системы и отображает их в отдельном окне / вкладке / разделе.
Вам либо придется делать то, что вы сказали в своем вопросе, с помощью AJAX. Или исключите строки User-Agent, которые являются известными поисковыми системами. Единственный надежный способ остановить ботов - использовать AJAX.
Вызов AJAX сделает это, но обычно поисковые системы не загружают изображения, файлы javascript или CSS, поэтому может быть проще включить один из этих файлов на страницу и передать URL-адрес страницы, для которой вы хотите зарегистрировать запрос. в качестве параметра в запросе файла.
Например, на странице ...
http://www.example.com/example.html
Вы можете включить в заголовок
<link href = "empty.css?log=example.html" rel = "stylesheet" type = "text/css" />
И пусть ваша серверная сторона регистрирует запрос, а затем возвращает пустой файл css. Тот же подход применим к JavaScript или файлу изображения, хотя во всех случаях вам нужно внимательно посмотреть, какое кеширование может иметь место.
Другой вариант - исключить поисковые системы на основе их пользовательский агент. Для начала на http://user-agents.org/ есть большой список возможных пользовательских агентов. Конечно, вы можете пойти другим путем и подсчитывать только запросы от вещей, которые, как вы знаете, являются веб-браузерами (охват IE, Firefox, Safari, Opera и этот новомодный Chrome даст вам 99% пути туда).
Еще проще было бы использовать инструмент анализа журналов, такой как awstats, или сервис, такой как Гугл Аналитика, оба из которых уже решили эту проблему.
Поисковые системы имеют доступ к файлам css: free-seo-news.com/newsletter246.htm ... также, когда вы проверяете некоторые сайты в кеше Google, они имеют стиль, это подтверждает, что они сканируют и сохраняют файлы css.
Я почти уверен, что поисковые системы сейчас запускают Javascript
Вам действительно не нужно использовать AJAX, просто используйте JavaScript, чтобы добавить iFrame за пределы экрана. ДЕРЖАТЬ ПРОСТОЙ
<script type = "javascript">
document.write('<iframe src = "myLogScript.php" style = "visibility:hidden" width = "1" height = "1" frameborder = "0">');
</script>
Чтобы решить эту проблему, я реализовал простой фильтр, который просматривал заголовок User-Agent в HTTP-запросе и сравнивал его со списком известных роботов.
Я получил список роботов от www.robotstxt.org. Его можно загрузить в простом текстовом формате, который можно легко проанализировать для автоматического создания «черного списка».
Расширение ответа Мэтта Шеппарда может быть примерно таким:
<script type = "text/javascript">
var thePg=window.location.pathname;
var theSite=window.location.hostname;
var theImage=new Image;
theImage.src = "/test/hitcounter.php?pg = " + thePg + "?site = " + theSite;
</script>
который можно вставить в шаблон верхнего или нижнего колонтитула страницы без необходимости заменять имя страницы на стороне сервера. Обратите внимание, что если вы включаете строку запроса (window.location.search), надежная версия этого должна кодировать строку, чтобы злоумышленники не создавали запросы страниц, которые используют уязвимости на основе странных вещей в URL-адресах. Приятная особенность этого тега по сравнению с обычным тегом <img> или <iframe> заключается в том, что пользователь не увидит красный крестик, если есть проблема со сценарием hitcounter.
В некоторых случаях также важно знать URL-адрес, который просматривал браузер, до перезаписи и т. д., Которые происходят на стороне сервера, и это дает вам это. Если вы хотите использовать оба варианта, добавьте еще один параметр на стороне сервера, который также вставляет эту версию имени страницы в строку запроса.
Пример файлов журнала из теста этой страницы:
10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/testpage.html HTTP/1.1" 200 306 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"
10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/hitcounter.php?pg=/test/testpage.html?site=www.home.***.com HTTP/1.1" 301 - "http://www.home.***.com/test/testpage.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"
Мы изменили наш метод увеличения на сообщение ajax - хотя пользователи без javascript не будут влиять на количество просмотров вопроса, мы также не хотели иметь черный список ботов!