Здравствуйте, дамы и господа, в этой статье хочу рассказать о том, как я блокирую вредных ботов, например, ботов ahfers, Semrush, PetalBot, Majestic, Megaindex и многих других. В целом, боты, которые активно копаются по сайту, создают очень много проблем. И на определённом этапе начинают съедать огромное количество ресурсов сервера, на котором расположен ваш сайт.

Ботов необходимо блокировать

Мало того что боты создают дополнительную колоссальную нагрузку на сервер, что выльется в оплату дополнительных ресурсов для оного. Ну или в более дорогой тариф для хостинга.

Но есть более серьёзная проблема: боты собирают информацию о вас. Какой-нибудь SemRush, Majestic или LinkPad предоставит много информации о вашем сайте для конкурентов. О сетке сайтов-сателлитов, с помощью которой вы продвигаетесь, о трафике, о ссылочном профиле и всех анкорах, с помощью которых продвигаетесь.

В общем, благодаря информации, которую собирают данные сервисы, ваш сайт у конкурентов как на ладони. Так что ботов нужно блокировать, особенно если у вас коммерческий проект.

Но просто знайте, что чем старше ваш сайт и заметнее в сети, тем больше ботов на него будет приходить. Сначала их численность будет незначительной, а создаваемая нагрузка не будет представлять собой проблему.

Со временем ботов станет очень много, ресурсов хостинга или сервера не будет хватать. Банально, на моём сайте возникла такая ситуация. Мне даже пришлось перевести сайт на другой хостинг, чтобы хватало ресурсов, но и там ресурсов хватало почти вплотную.

Нагрузка на сервер до блокировки ботов
Нагрузка на сервер до блокировки ботов

Тогда я решил не лениться и заблокировать плохих ботов. Несколько дней отлавливал тех, кто посещал мой сайт, потом заблокировал через .htaccess.

Нагрузка на сервер упала очень даже заметно. Конечно, 20-30% — разница не самая большая, но чем крупнее сайт, тем больше ботов на нём будет, соответственно, эти 20-30% разницы превратятся в переплаты за хостинг или VPS.

Нагрузка на сервер после блокировки ботов
Нагрузка на сервер после блокировки ботов

Конечно, результат может показаться не самым впечатляющим, но оно того стоило. Теперь мне не нужно докупать дополнительные CP или переходить на тариф подороже, соответственно, простой блок ботов позволяет сэкономить деньги.

Вам рекомендую сделать то же самое.

Как блокировать плохих ботов

Разделим ботов на две части:

  1. Полезные. Боты поисковых систем и их сервисов. Например, YandexBot, GoogleImage. Их блокировать нельзя, это плохо скажется на ваших позициях в поисковых системах.

  2. Плохие боты. Разные сервисы вроде SemRush, Ahfers, Megaindex и т. п. В общем, именно их будем отрезать.

После блокировки всевозможных плохих ботов у вас значительно упадёт нагрузка на сервер. Если от вашего хостера приходят уведомления, что превышен лимит процессорного времени (CP), то самое время отрезать часть плохих ботов. Какие роботы и краулеры конкретно увеличивают нагрузку, можете увидеть в логах.

Найти логи можно на сервере, как правило, логи посещений пишутся в отдельные журналы. Например, в Fozzy их можно увидеть в разделе «Статистика» в панели DirectAdmin, на Бегет придётся отдельно включить «Журналы доступа» в панели управления хостингом. В общем, если сами не знаете, как это сделать, задайте вопрос вашему хостеру, они с этим помогут.

Журнал посещений на Beget

После вы увидите примерно такую картину, где в логах будут записаны куча User-Agent, разнообразных IP, а также время посещения.

Лог посещений на сервере

Бездумно блокировать всё подряд не рекомендую. Нужно вычленить именно бота, если блокировать всех «юзер-агентов», то заблокируете и реальных посетителей.

Многие боты себя идентифицируют. Таких отсечь легче всего.

Лог посещений на сервере

Некоторые боты себя не идентифицируют или даже маскируются под краулеры. Их отсекать можно по IP-адресам, но это практически бесполезно, так как у вредоносных роботов IP-адреса постоянно меняются.

Также можно настроить фильтрацию посредством обратных DNS-запросов, но это задача непростая, так что в этой статье ограничимся разбором блокировки идентифицируемых ботов, а также наиболее «наглых» IP-адресов.

Конечно же, я опубликовал список полезных и вредных ботов. Чтобы было ясно, что и почему я блокирую. Периодически списки буду пополнять, а также редактировать данную статью. Но та статья касается только тех ботов, которых можно идентифицировать.

Начнём с варианта блокировки через файл .htaccess, ибо он самый эффективный.

Блокировка ботов через .htaccess

Этот вариант самый лучший, так как боты и краулеры частенько игнорируют директивы из robots.txt. Есть вариант блокировать с помощью команды SetEnvIfNoCase User-Agent или через ReveriteCond. Первый способ получше. Ну, лично для меня.

В данном списке я собрал именно тех ботов, которых выловил на своём сайте. И блокировка сработала. В логах вы увидите, что ботам выдаётся ответ сервера 403, соответственно, нагрузка на ваш сайт снизится.

Учтите, на многих сайтах есть аналогичные списки для блокировки ботов и краулеров. Рекомендую их бездумно не копировать, подобные директивы часто сделаны людьми из-за рубежа, соответственно, там бездумно блокируют краулеры Яндекс и Mail.ru, что плохо скажется на позициях сайта в Яндекс.

Банальный пример кода:

Заблокированный бот Яндекса

И многие контент-мейкеры из СНГ бездумно копируют такие коды себе на сайты. Так что смотрите внимательно и анализируйте.

В своих вариантах я опубликовал только тех ботов, которые атакуют мой сайт. В ваших логах могут быть иные роботы и краулеры.

Итак, вариант блокировки через .htaccess. Всем ботам будет выдаваться ответ сервера 403, то бишь «доступ запрещён». Это серьёзно сократит нагрузку на ваш сайт.

У себя использую такой код, он оказался вполне работоспособным:

#MJ12bot блокировать только в том случае, если не работаете с Majestic. Например, если работаете на биржах ссылок (Gogetlinks, Miralinks), то там данные Majestic очень важны и тогда лучше его не блокировать.
#Slurp - поисковой краулер Yahoo!, если ваш сайт ориентирован на зарубежную аудиторию и есть трафик с Яхуу, лучше не блокировать.
#FlipboardRSS и FlipboardProxy блокировать только в том случае, если не ориентированы на Flipboard
SetEnvIfNoCase User-Agent "Amazonbot|BlackWidow|AhrefsBot|BLEXBot|MBCrawler|YaK|niraiya\.com|megaindex\.ru|megaindex\.com|Megaindex|MJ12bot|SemrushBot|cloudfind|CriteoBot|GetIntent Crawler|SafeDNSBot|SeopultContentAnalyzer|serpstatbot|LinkpadBot|Slurp|DataForSeoBot|Rome Client|Scrapy|FlipboardRSS|FlipboardProxy|ZoominfoBot|SeznamBot|Seekport Crawler" blocked_bot
<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=blocked_bot
</Limit>

Потом в логах можете увидеть, что заблокированным ботам выдаётся ответ сервера 403:

Ответ сервера 403 в логах

Соответственно, бот не сможет парсить контент, а также скачивать данные сайта, например, rss-ленты или другие фиды.

Есть ещё один вариант кода, работать может не на всех серверах:

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^Amazonbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^AhrefsBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^BLEXBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^MBCrawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^YaK [OR]
RewriteCond %{HTTP_USER_AGENT} ^niraiya\.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^megaindex\.ru [OR]
RewriteCond %{HTTP_USER_AGENT} ^megaindex\.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^Megaindex [OR]
#MJ12bot блокировать только в том случае, если не работаете с Majestic. Например, если работаете на биржах ссылок (Gogetlinks, Miralinks), то там данные Majestic очень важны и тогда лучше его не блокировать.
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SemrushBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^cloudfind [OR]
RewriteCond %{HTTP_USER_AGENT} ^CriteoBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetIntent Crawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^SafeDNSBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SeopultContentAnalyzer [OR]
RewriteCond %{HTTP_USER_AGENT} ^serpstatbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^LinkpadBot [OR]
#Slurp - поисковой краулер Yahoo!, если ваш сайт ориентирован на зарубежную аудиторию и есть трафик с Яхуу, лучше не блокировать.
RewriteCond %{HTTP_USER_AGENT} ^Slurp [OR]
RewriteCond %{HTTP_USER_AGENT} ^DataForSeoBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Rome Client [OR]
RewriteCond %{HTTP_USER_AGENT} ^Scrapy [OR]
#блокировать только в том случае, если не ориентированы на Flipboard
RewriteCond %{HTTP_USER_AGENT} ^FlipboardRSS [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlipboardProxy [OR]
RewriteCond %{HTTP_USER_AGENT} ^ZoominfoBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SeznamBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Seekport Crawler
RewriteRule ^.* - [F,L]

Работать данные варианты будут только с теми ботами, которые себя идентифицируют. Если же боты маскируются под другие краулеры или притворятся реальными посетителями, то такие методы не сработают.

Можно их банить по IP, но об этом чуть дальше.

Блокировка ботов через robots.txt

Некоторые боты можно банить через файл robots.txt. Но работает это только при одном условии: если робот или краулер не игнорирует директивы, прописанные в этом файле. По своим логам видел, что многие боты даже не запрашивают этот файл никогда, соответственно, директив в нём даже не увидят.

В общем, метод практически бесполезен, достал какой-то бот? Баньте на уровне сервера, например, через .htaccess, как предложил выше. Но всё же покажу. Сработает только с роботами и краулерами, которые себя идентифицируют.

Пишем такой код:


User-agent: DataForSeoBot
Disallow: /

В общем, мы запретили обход сайта определённому User-Agent. Но, как уже сказал, бот может просто проигнорировать данную директиву.

Также можем через файл robots.txt не только заблокировать бот, а, например, указать скорость обхода, чтобы он продолжил находиться на сайте, но сильно его не грузил.


User-agent: SafeDNSBot
Disallow:
Crawl-delay: 3  # пауза в 3 секунды между запросами

Crawl-delay позволяет установить задержку между запросами, но данная директива считается устаревшей, большинство ботов её игнорирует, соответственно, её использование не выглядит целесообразным.

В общем, на robots.txt нельзя надеяться при блокировке ботов, так как большей частью роботов этот файл попросту игнорируется.

Блокировка ботов и краулеров по IP

Бывает, в логах попадаются очень наглые боты, которые не идентифицируют себя, но генерируют большую нагрузку на сервер. Защитить от них может либо какая-нибудь AntiDDoS-система, капча и тому подобные фишки, либо блокировка по IP.

Блокировка по IP целесообразна только тогда, когда определённый бот посылает много запросов с одного IP-адреса.

Но, как правило, в этом мало смысла, у ботов, как правило, много IP в запасе, соответственно, при дискредитации одного адреса бот быстро появится с другого.

Но иногда данный вариант помогает. Но всегда проверяйте IP перед блокировкой, самым «наглым» IP в логах может оказаться ваш собственный. Также можно чисто случайно забанить IP краулеров Яндекс или Google.

Код для блокировки выглядит так:


Order Allow,Deny
Allow from all
Deny from 149.56.12.131 85.26.235.123 185.154.14.138 5.188.48.188 88.99.194.48 47.75.44.156

Каждый новый IP в список добавляйте через пробел.

Блокировка ботов пойдёт вашему сайту на пользу

Чуть-чуть разгрузит сервер, а также информации о вашем сайте у конкурентов будет поменьше, так что не стесняйтесь и блокируйте. Инструкцию приложил. Конечно, если ваш сайт усиленно долбят боты с разных IP и никак себя не идентифицируют, придётся подумать о более серьёзных методах защиты, но частенько для того, чтобы снизить нагрузку на сервер будет достаточно тех методов, что предложил выше.

На этом с вами прощаюсь, желаю успехов, а также поменьше вредных ботов на сайте!

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 4.5 / 5. Количество оценок: 31

Оценок пока нет. Поставьте оценку первым.

Если материалы с данного сайта были полезны, и вы желаете поддержать блог, то можете воспользоваться формой по ссылке: Донат на поддержку блога