Zanuda
Главная   Планы   Разное  
Главная »Планы »Наблюдение за ботами

Наблюдение за роботами

«Большой Бот смотрит на тебя». Именно к такой ситуации мы привыкли. Некоторые даже склонны считать этого бота чем-то вроде начальства: то и дело советуются, как бы к нему подкатиться и чем бы умаслить, чтобы не осерчал. А робот – он и есть робот, все ваши волнения ему непонятны и неизвестны.

Для тех, кто случайно забредет сюда, не имея необходимых знаний: все общение с роботом проходит в рамках протокола HTTP/1.1 (только Yahoo поддерживает HTTP/1.0). В том же самом порядке, в каком идет обмен сообщениями между сервером и вашим браузером. Разница только в том, что у робота не предусмотрена возможность заполнять и посылать формы, но это ему и не нужно. Да и нам, в общем, неинтересно.

А интересна нам полная информация о том, что робот запрашивает у сервера. Полностью, во всех подробностях. Он же к нам на сайт пришел, мы имеем право знать, о чем он с нашим сервером шепчется. Кстати, выясним заодно, чего ему не хватает. Давно пора бы разобраться с If-Modified-Since и статусом 304, начать выдавать дату последней корректировки страницы. В общем, поставил фильтр на ботов Яндекса, Рамблера и Гугля, буду смотреть запросы. Соберу сведения – продолжу разговор на этой странице.

...пару дней спустя...

Пришел Googlebot и в один присест сглотнул все имеющиеся страницы разом. При этом заголовки отправлял строго в соответствии с HTTP/1.1 и ничего вроде If-Modified-Since в них не передавал. Что, в общем-то и правильно – зачем ему спрашивать об этом, он же эти страницы в первый раз читает. Что ж – теперь ждем Яндекса. А еще Рамблера. И второго визита Googlebot'а тоже ждем...

А пока ждем, сделана еще одна несложная доработка. Надо было ее провести с самого начала, но все как-то руки не доходили. Это выдача в HTTP-заголовках к странице атрибутов Last-Modified и Expires. Первый устанавливается по времени последней модификации файла с контентом для данной страницы, а второй стандартно выдает дату, свойственную статическим HTML-файлам:
Expires: Thu, 01 Jan 1970 00:00:01 GMT

Здесь всего-то и надо было – проверять наличие файла контента не функцией file_exists(), а функцией filemtime(). Она тоже возвращает FALSE, если файл не существует. Зато если он есть, отдает TimeStamp времени его редакции. Все просто. Вот только для страниц с выноской нужно все-таки сделать выдачу текущего времени в Last-Modified. На них-то контент формируется не из одного файла...

Тут же и сделал. Итого в сухом остатке: если содержание страницы статично, в Last-Modified выдается время редакции контента. А если на странице использован плагин или стоит выноска – выдается текущее время. И точка. Атрибут Expires продолжает имитировать статику во всех случаях. Вот вам и все «SEO-friendly» заголовки HTTP Response.

Да, и вот еще что я вам скажу. Опция конфигурации expose_php, установленная в On – это зло. Если уж мы хотим имитировать статику как следует, желательно ее отключить. Не нужен нам флаг X-Powered-By: PHP... Заодно не помешает замерить объем контента и выдать в заголовке Accept-Ranges: bytes и Content-Length. Чтоб было совсем всерьез.

Наблюдение за ботами
Ссылки и каталоги
Фотогалерея
Облако тегов и линковка
Посторонние боты