Как правильно обрабатывать 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 просто смотрит на количество символов, чтобы определить, какую директиву использовать, и в случае «рисования» идет с «Разрешить».
— Пелмс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.