Блокируйте ботов по определенным URL с помощью robots.txt в среде php apache

Странный случай, бот Яндекса сильно перегружает мой сайт. Проблема, конечно, моя, поскольку у меня есть несколько активных фильтров ajax на веб-сайте, но они довольно тяжелые, если их вызывать как боты.

Я пробовал со многими robots.txt, но они не имеют никакого эффекта. Тип URL, который необходимо заблокировать, находится в следующей форме:

 /de/component/customfilters/0-zu-15-eur/nKein+Herstellerf.html?custom_f_116[0]=38&custom_f_116[1]=4c&custom_f_116[2]=39&start=100

Но они URL переписаны, а не физические. Физическая папка уже заблокирована в robotx.txt

Как это можно решить и как можно проверить, не бот бот Яндекса не читает robots.txt файл?

Каждый раз, когда я редактирую robots.txt файл я должен перезапустить Apache? Я думаю, что нет, как Htaccess

0

Решение

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

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

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

Одним из способов сделать это является использование директивы BRowserMatchNoCase в .htacccess:

BrowserMatchNoCase "Yandex" bots

Order Allow,Deny
Allow from ALL
Deny from env=bots

Или вы можете использовать правило перезаписи в .htaccessвместо:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(Yandex).*$ [NC]
RewriteRule .* - [F,L]

Неважно, переписывается ли URL-адрес или нет, бот будет сканировать любые найденные URL-адреса, если вы не запретите этот URL-адрес. Если вы запрещаете физическую папку, а URL-адрес не указывает на эту папку, то Disallow не будет работать.

Попробуйте что-то подобное в своем robots.txt:

Disallow: /de/component/customfilters/

Это попросит всех ботов не сканировать любые URL, содержащие /de/component/customfilters/,
Если вы хотите общаться только с яндекс-ботами, вы также можете указать это:

User-agent: Yandex  # directives after this line will only apply to Yandex bots.
Disallow: /de/component/customfilters/

Если вы хотите проверить, что Яндекс читает ваш robots.txt, у них есть тестовый инструмент здесь:

http://webmaster.yandex.ru/robots.xml
(страница на русском языке)

Если вы просто хотите, чтобы Яндекс замедлялся, вы можете добавить директиву задержки сканирования для роботов Яндекса:

User-agent: Yandex # directives after this line will only apply to Yandex bots.
Crawl-delay: 2 # specifies a delay of 2 seconds

Дополнительная информация: https://help.yandex.com/webmaster/controlling-robot/robots-txt.xml#crawl-delay

3

Другие решения

Других решений пока нет …