Как правильно обрабатывать Allow and Disallow в robots.txt?

8

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

Страница robots.txt не распространяется Allow. Я видел другие страницы, некоторые из которых говорят, что сканеры используют правило «первого соответствия», а другие не указывают. Это приводит к некоторой путанице. Например, страница Google о robots.txt использовала этот пример:

User-agent: Googlebot
Disallow: /folder1/
Allow: /folder1/myfile.html

Очевидно, что правило «первого соответствия» здесь не сработает, потому что сканер увидит Disallowи уйдет, никогда не сканируя файл, который был специально разрешен.

Мы находимся в открытом доступе, если игнорируем все Allowстроки, но тогда мы не можем сканировать то, что нам разрешено сканировать. Мы будем скучать по вещам.

Мы добились больших успехов, Allowсначала проверив , а затем проверив Disallow, идея, которая Allowдолжна была быть более конкретной, чем Disallow. Это связано с тем, что по умолчанию (т.е. при отсутствии инструкций об обратном) любой доступ разрешен. Но затем мы сталкиваемся с чем-то вроде этого:

User-agent: *
Disallow: /norobots/
Allow: /

Намерение здесь очевидно, но это Allow: /заставит бота, который Allowсначала проверяет, что он может сканировать что угодно на сайте.

Даже это можно обойти в этом случае. Мы можем сравнить соответствие Allowс соответствием Disallowи определить, что нам запрещено сканировать что-либо в / norobots /. Но это ломается перед лицом подстановочных знаков:

User-agent: *
Disallow: /norobots/
Allow: /*.html$

Тогда возникает вопрос, может ли бот ползти /norobots/index.html?

«Первое соответствие» правило исключает всякую двусмысленность, но я часто вижу сайты , которые показывают что - то вроде старого , например Google, поставив более конкретные Allow послеDisallow . Этот синтаксис требует большей обработки со стороны бота и приводит к неоднозначности, которые не могут быть решены.

Тогда мой вопрос: как правильно поступить? Что веб-мастера ожидают от хорошего бота, когда дело доходит до обработки файла robots.txt?

Джим Мишель
источник
Казалось бы, простая обработка всех директив по порядку (сверху вниз) устранит всю неоднозначность (включая обработку шаблонов URL-адресов с подстановочными знаками , которые официально «неопределены»). Тем не менее, основные поисковые роботы (Googlebot, Bingbot и т. Д.) Не работают так, так что это не работает.
MrWhite

Ответы:

4

Одно очень важное замечание: Разрешить заявление должно прийти до того в Disallow заявление, независимо от того , как конкретные ваши заявления. Так что в вашем третьем примере - нет, боты не будут ползти /norobots/index.html.

Как правило, в качестве личного правила я сначала ставлю операторы allow, а затем перечисляю запрещенные страницы и папки.

Вергил Пеньков
источник
Итак, вы рекомендуете следовать стандарту «первое соответствие»? То есть бот читает файл robots.txt и получает первый вариант Разрешить или Запретить, соответствующий URL-адресу?
Джим Мишель
1
Но знаете ли вы, что это общепринятая интерпретация robots.txt? То есть, если бы я внедрил стандарт «правила первого соответствия», этого бы ожидало большинство веб-мастеров?
Джим Мишель
4
Описание «Разрешить» в статье в Википедии на сайте robots.txt - en.wikipedia.org/wiki/Robots_exclusion_standard#Allow_directive - (и некоторых других сайтах) гласит, что «правило первого соответствия» является стандартом. Поскольку это на 100% однозначно, легко реализовать и доказать, что это правильно, вот к чему я пришел.
Джим Мишель
1
Спасибо за ответ на свой вопрос :) Я не знал, как ответить. Я не знаю об общепринятом методе, но вот как я использовал его с тех пор, как начал работать в качестве эксперта по SEO, и он всегда работал правильно.
Вергил Пеньков
1
Порядок операторов Allow и Disallow не имеет значения для робота Google, который вместо этого смотрит на специфику. Bing также, но не знаю о других поисковых системах, так что если сомневаетесь, сначала разрешите, я думаю.
Пелмс
2

Вот мое мнение о том, что я вижу в этих трех примерах.

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

Пример 2
Я бы предположил, что /norobots/каталог недоступен, а все остальное доступно для сканирования. Я читаю это как "сканировать все, кроме каталога / norobots /".

Пример 3
Как и в примере 2, я бы предположил, что каталог недоступен, /norobots/и все .htmlфайлы не в этом каталоге доступны для сканирования. Я читаю это как «сканировать все файлы .html, но не сканировать содержимое в каталоге / norobots /».

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

Джон Конде
источник
1
Ваши ответы, вероятно, соответствуют цели, за исключением последнего, который я нахожу несколько сомнительным. В этих конкретных случаях я могу правильно написать код робота, но есть и другие неоднозначные случаи, которые не так легко определить. Более того, я ищу общее решение. И да, наша строка user-agent содержит ссылку на нашу страницу часто задаваемых вопросов. И хотя мы можем описать, как мы работаем с robots.txt, для всех заинтересованных сторон было бы лучше, если бы нам это не нужно. То есть если бы все поступали одинаково. Но, похоже, это не так.
Джим Мишель
Выше показано, как робот Googlebot обрабатывает ваши примеры, что можно проверить с помощью их инструмента тестирования robots.txt (Инструменты для веб-мастеров> Заблокированные URL-адреса). Google не возражает против того, ставите ли вы сначала Разрешить или Запрещать, но имеет алгоритм, который определяет специфичность, что приводит к некоторым неочевидным результатам. Например, если вы замените «/*.html$» на «/*myfile.html$» в третьем примере, тогда «myfile.html» будет разрешено, а не заблокировано ИЛИ, если вы потеряете завершающий «/» из « / norobots / ', также разрешены файлы .html.
Пелмс
Ага! Согласно Википедии, Google просто смотрит на количество символов, чтобы определить, какую директиву использовать, и в случае «рисования» идет с «Разрешить».
Пелмс