Роботы и как с ними бороться
Очень важная тема – взаимоотношения с поисковыми и прочими роботами. Давно известно, что не всем роботам мы рады. Еще не так давно рунет лихорадило от лихих наскоков индексатора поисковой системы Webalta (спи спокойно, дорогой товарищ, недолгим было наше знакомство). На совести этого робота заблокированные сайты из-за слишком частых и многочисленных запросов без паузы. Нередко жалуются на робота Yahoo – индексирует часто и помногу, порождает немалый исходящий трафик, а владельцу сайта он совершенно неинтересен, нет с него целевых посетителей, да и не ожидается.
Не всегда и не все роботы читают файл robots.txt, не всегда и не все выполняют прописанные там запреты. На старте этого сайта сюда повадился совершенно некорректный робот «поисковой системы» Igde (Ну не могу я тут обойтись без кавычек. Это даже не смешно). Он ни разу не запрашивал robots.txt, зато c упорством дятла каждый день сериями по 7-8 запросов в секунду зачем-то перечитывает главную страницу. Еще какие-то совершенно неизвестные боты посещают сайт, создавая никому не нужный трафик. Говорят, что среди них много сборщиков E-mail для спама, но проверить это невозможно. Главное – все эти визитеры создают нагрузку на сервер, ничего не давая взамен.
Чаще всего раздаются советы ставить ненужным роботам заслон по IP-адресу. Это хороший выход, но только когда все адреса бота известны и (в идеальном случае) входят в одну подсеть. Тогда все просто, прописываем запрет доступа с IP в файле .htaccess:
Order Allow,Deny Deny from 123.45.67.89 Deny from 123.65.43
В итоге получаем полный запрет доступа с прописанных IP-адресов. В первом случае – с одного адреса 123.45.67.89, а во втором – с диапазона адресов от 123.65.43.0 до 123.65.43.255.
Проблема в том, что IP-адреса ботов ненужной системы могут быть из разных подсетей и разумеется, не разглашаются. Поисковая система никогда не сообщит вам весь набор адресов, с которых приходят ее роботы и это оправдано – адреса могут меняться, добавляться и т.п. Зато боты нормальных поисковых систем всегда оставят в логах свое имя (User-Agent). А у «ненормальных ботов» вроде Igde к счастью, часто всего один IP-адрес. Да и юзер-агента своего они показывают – и этим можно воспользоваться.
Запрягаем могучий модуль mod_rewrite:
RewriteEngine on RewriteBase / RewriteCond %{HTTP_USER_AGENT} Yahoo [OR] RewriteCond %{HTTP_USER_AGENT} Igde RewriteRule (.*) - [F,L]
Вот такое «заклинание» отвадит от вас поисковых ботов, которые оставят в переменной окружения сервера HTTP_USER_AGENT строку, содержащую "Yahoo" или "Igde". Правило преобразования предельно простое – (.*) означает «0 и более любых символов» в URL, минус в качестве подстановки – «не преобразовывать», а флаги [F,L] – отдать статус «403 Forbidden» и на этом закончить обработку. Вместо запрошенной страницы назойливый робот получит пару сотен байт HTTP-заголовка, который объявляет ему запрет доступа. Минимум лишнего трафика и скриптам не нужно генерировать страницу, поскольку выдавая запрет доступа, сервер не запустит запрошенный URL в обработку.
Остается только добавить, что подобные радикальные меры нужны далеко не всем и не всегда. Мелкие непонятные боты редко создают большой трафик и нагрузку, они запросят страницу-другую и уйдут. Боты крупных поисковых систем, как правило, выполняют директивы файла robots.txt, поэтому отсекать их путем прямого запрета не нужно. Нужда в отсечке Yahoo, к примеру, может возникнуть при таких условиях:
- сайт содержит очень большое количество индексируемых страниц
- содержание страниц часто меняется
- движок сайта ресурсоемкий
- посещаемость очень высокая, сервер нагружен
- посетителей с Yahoo вообще нет или до смешного мало
- робот не подчиняется запрету в robots.txt (это странно, но это бывает)
При таком стечении обстоятельств бот, читающий помногу и часто, создаст ощутимую дополнительную нагрузку на сервер, иногда вплоть до отключения сайта хостером за превышение ресурсных лимитов. Такие случаи были, когда Webalta агрессивно индексировала сайты рунета, не заботясь о каком-либо нормировании трафика. Проекты, которые и без того работали со значительной нагрузкой, просто «ложились костьми» под напором индексатора, выбиравшего страницы в несколько параллельных потоков и без пауз.
Но это все-таки не типичный случай. Даже «бешеный бот» Webalta не причинил вреда тем сайтам, которые были изначально расчитаны на большую нагрузку или нагружены слабо. Так что не торопитесь защищаться от ботов, лучше подумайте, как с ними нормально ужиться. Все-таки часть из них приводит посетителей на ваш сайт.