Институциональные репозитории и поисковые роботы исторически образуют симбиотическую связь. Репозитории обеспечивают контент, поисковые сервисы — трафик. Такое положение вещей на протяжении долгого времени было нормой. Всё было просто и понятно. Фактически, многие институциональные репозитории на базе DSpace и некоторых других специализированных CMS обслуживали клиентов, 90% и более которых приходило из поисковых систем.
Операторы репозиториев регистрировали свои сервисы в «инструментах вебмастера» различных поисковых систем, наблюдали за динамкой обхода, ошибками, кликами и показами. Всё было просто и понятно. Индексирующие роботы поисковых систем в целом работали адекватно — нагрузку создавали аккуратно, user-agent не прятали, robots.txt уважали и всё было прозрачно и контролируемо.
С появлением массы аналитических систем, ранжирующих ресурсы в сети по различным признакам, систем обучения AI и других систем, которые используют индексирующих роботов в своей работе, ситуация резко изменилась. Запросов, генерируемых машинами, а не людьми, стало кратно больше, а в посетителей эти запросы стали конвертироваться кратно меньше. Рост нагрузки (от поисковых роботов) без роста числа посетителей — это не очень хорошо. Этим собственно и обусловлены «актуальность и научная новизна» фразы, вынесенной в заголовок.
Если продолжать в академичность, то наверное нужно сформулировать цели, или хотя бы цель. Попробуем остановится на чем-то типа «Уменьшить долю бесполезных запросов к серверу и/или увеличить качество конвертации индексации ресурса в посещаемость ресурса».
Для достижения целей нужно сформулировать и выполнить определенные задачи, такие как:
- Понять что там вообще происходит с ботами, например посредством анализа логов.
- Рассортировать ботов по группам (экспертная работа)
- Оставить в покое понятных полезных ботов, наблюдая их активность в рамках решения первой задачи, прекратить отношения с понятными не желательными ботами, посредством каких-то дополнительных инструментов, проанализировать заметных в доле нагрузки, но не понятных пока ботов.
- Решить подзадачи, которые могут возникнуть в рамках решения задачи номер три, либо уточнить цели.
Задача 1
Решать будем посредством анализа логов. В примерах ниже будет суточный лог сервиса apache httpd в формате combined. В принципе, подойдёт и localhost_access_log от apache tomcat, главное чтобы информация об user agent была.
Даём команду:
И удивляемся объёму выданной информации. Для работы команды понадобится какой-нибудь awk и какой-нибудь shell, но в целом я думаю всё понятно, в результате мы получаем список уникальных user-agent из лога, так же информацию о количестве вхождений, т.е. интенсивности индексирования, и сортировку по этому параметру.
Если команду еще чуть-чуть уточнить, то:
Мы получим в результате что-то такое (роботы с количеством вхождений в лог менее 100 не отражены):
156 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.4 facebookexternalhit/1.1 Facebot Twitterbot/1.0
192 Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0
266 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15 (Applebot/0.1; +http://www.apple.com/go/applebot)
382 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; ClaudeBot/1.0; +claudebot@anthropic.com)
509 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
511 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/135.0.7049.114 Safari/537.36
786 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
1145 Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)
1300 Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
1630 Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
1970 Googlebot/2.1 (+http://www.google.com/bot.html)
2152 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)
2779 Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)
3014 Mozilla/5.0 (keys-so-bot)
3607 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
4018 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
4894 Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)
8031 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.59 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
9866 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36
10581 Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)
Сутками ранее, Googlebot в сумме показывал на порядок больше запросов чм все остальные боты вместе взятые, сейчас в топе YandexBot с более скромной цифрой.
Задача 2
Что мы видим? В чемпионах Yandex нескольких сортов, Bing, Google тоже в количестве, Semrush, Ahrefs, Majestic и из ботов, условно попадающих в первую группу из задачи номер три, наверное всё. Ну хорошо, Semrush тоже не очень, но в целом к этой части вопросов нет.
Боты Apple, Facebook, Twitter и некоторые другие на поверку оказываются (заявляются операторами) не как индексирующие, а как генерирующие превью и выполняющие другие служебные функции, но тут тоже всё не всегда так, как заявляется. Facebook использует разных ботов для превью и для обучения AI — удобно [банить].
Такие боты, как keys-so-bot, ChatGPT и ClaudeBot с высокой долей вероятности можно отнести к той группе, которая не привлечет новых пользователей на сайт, но контент утащит и нагрузку создаст. С PetalBot и некоторыми другими сложнее — надо разбираться.
В рамках решения данной задачи автор не претендует на истинность суждений, лишь выражает частное мнение.
Задача 3
Отлично, ботов на кучи поделили, помечаем себе что гуглояндекс можно мониторить в течении суток командами типа:
И получать результат в виде:
3 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Google-Safety; +http://www.google.com/bot.html)
3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 (compatible; Google-Safety; +http://www.google.com/bot.html)
17 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.6998.88 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
25 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.7049.114 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
102 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
511 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/135.0.7049.114 Safari/537.36
536 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
786 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
1970 Googlebot/2.1 (+http://www.google.com/bot.html)
8230 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.59 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Со второй группой ботов можно решать проблемы по-разному в зависимости от используемого программного обеспечения. Можно использовать простой .htaccess файл в случае использования прокси на apache2, который будет запрещать роботам доступ по user-agent. Это затруднит процесс нежелательного индексирования, но не снизит количество запросов. Можно использовать сервис fail2ban и фильтр apache-badbots, закрывая боту доступ к сервису по user-agent. Это как затруднит роботам доступ, так и снизит нагрузку на веб сервер. Каких-то готовых инструкций здесь не будет, т.к. в рассматриваемой инфраструктуре фильтруется пока всего три user-agent и анализ ситуации продолжается, но тенденция снижения нагрузки на сервер, измеряемой в строках лога (количестве запросов) и объёме отданного трафика определённо уже есть.
Третья группа ботов, которые не понятно полезные или нет, нуждается в дополнительном изучении. Сейчас автор увлеченно «играет» в это но в силу отсутствия прохождений на youtube процесс больше походит на изучение набора бессвязных игровых механик. Прошу прощения за такие аналогии.
Задача 4
Технические решения по блокировке — тема отдельной заметки. Ранжирование роботов по полезности — вопрос во многом субъективный. Анализ новых роботов — тоже. В итоге, можно заключить, что с поправкой на то, что мы верим передаваемому user-agent, мы можем решить все три поставленные задачи без особых проблем, а всё что в рамках задач выглядит слишком комплексно — перенесем в уточнение целей или выводы. Надо только упомянуть еще один момент:
1 python-httpx/0.19.0
1 python-requests/2.20.0
1 python-requests/2.27.1
2 python-requests/2.32.0
12 python-httpx/0.28.1
13 python-httpx/0.27.0
3426 python-requests/2.32.3
9425 python-requests/2.31.0
Дальнейший анализ логов показывает что все запросы с конкретным user-agent выполняются с одного хоста конкретного облачного провайдера. Никакого web сервера на этом хосте на первый взгляд нет. Тут уже можно подумать о том, чтобы использовать abuse контакт или как-то иначе связаться с таким активным клиентом.
Выводы
В сухом остатке у нас есть возможность формировать логи так, чтобы иметь информацию о роботах и определённые инструменты для контроля доступа роботов, игнорирующих robots.txt, к сервису. Решит ли это все проблемы? Нет. Вот пример:
3537 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
Обозреваемый ресурс точно не откроется в IE8, но 3500+ запросов, отраженных в логах укаpывают нам на некоторое противоречие, а еще в логах (май 2025) есть такой user-agent:
Так что, у нас есть инструмент только для контроля за роботами от крупных провайдеров, которым по статусу не положено подделывать user-agent, для роботов, которые представляются чем-то вроде «Интернет эксплорер на windows 95» нужны другие средства.
В моменте анализ логов может помочь найти причину и источник фактической DoS атаки, на дистанции — наблюдать за фактической активностью тех или иных групп сервисов. Анализировать логи не сложно даже без специализированных инструментов, использовать результаты анализа в дальнейшей работе — тоже не сложно, но простые действия решат только часть проблем. Отсечь всё лишнее не навредив нужному будет не просто.