Подсчитывать количество просмотров страницы, игнорируя поисковые системы? - PullRequest
7 голосов
/ 05 сентября 2008

Я заметил, что в StackOverflow есть количество просмотров для каждого вопроса, и что эти числа просмотров довольно низкие и точные.

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

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

Ответы [ 6 ]

4 голосов
/ 05 сентября 2008

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 , или сервис, подобный Google analytics , оба из которых уже решили эту проблему.

2 голосов
/ 05 сентября 2008

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

Я получил список роботов с сайта www.robotstxt.org . Его можно загрузить в простом текстовом формате, который можно легко проанализировать для автоматического создания «черного списка».

1 голос
/ 14 сентября 2008

Расширение ответа Мэтта Шеппарда может выглядеть примерно так:

  <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"
1 голос
/ 05 сентября 2008

Вам не нужно использовать AJAX, просто используйте JavaScript, чтобы добавить iFrame за пределы экрана. ДЕРЖИТЕ ЭТО ПРОСТО

<script type="javascript">
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">');
</script>
0 голосов
/ 05 сентября 2008

Вам также придется делать то, что вы сказали в своем вопросе, с AJAX. Или исключите строки User-Agent, которые являются известными поисковыми системами. Единственный верный способ остановить ботов - это AJAX.

0 голосов
/ 05 сентября 2008

Причина, по которой переполнение стека имеет точный счетчик просмотров, заключается в том, что он учитывает каждый просмотр / пользователя только один раз.

Стороннее приложение-счетчик посещений (и веб-статистика) часто отфильтровывает поисковые системы и отображает их в отдельном окне / вкладке / разделе.

...