« GWC - продолжение | Главная | Очередной апдейт Yahoo »
August 15, 2006
Приоритеты обработки записей в robots.txt
Как много девушек хороших, а нас все тянет на плохих
Barry Schwartz дает ссылки на обсуждения приоритета выбора записей в robots.txt роботами поисковых систем.
Меня всегда удивляло, как можно делать такие разные и вычурные ошибки в таком простом файле исключений с четким и однозначным форматом? Можно, конечно, грешить на большое количество расширений, которые добавляет в стандарт каждая значимая система с широко известными в узких кругах именами роботов: Google, Yahoo, MSN, Yandex. Но в таком случае и вопросы по robots.txt возникали бы прежде всего именно по расширениям.
Вернемся к приоритетам. Как известно, записи в robots.txt разделяются пустыми строками, каждая запись — это инструкция для одного или нескольких роботов. Пусть мы имеем следующее содержание файла исключений:
User-agent: *
Disallow: /dir/file
User-agent: Yandex
Disallow: /reports
User-agent: Googlebot
Disallow: /users
Allow: /best-page.html
Вопрос заключался в том, какими директивами в данном случае будет руководствоваться робот Гугля, что для него будет запрещено? Можно подумать, что робот наткнется в первую очередь на секцию для всех роботов и именно ее правила примет к рассмотрению. Это неверное предположение. Робот при парсинге файла работает примерно по следующему алгоритму:
- Получает полностью файл
- Выделяет в файле корректные секции
- Ищет "свою" секцию
- Если своя секция найдена принимает к руководству ее инструкции.
- Если своей секции не обнаружено, ищет секцию для всех роботов
- Если обнаружена секция для всех роботов, принимает к руководству ее инструкции
- Если общая секция не найдена, робот считает, что индексировать можно все без исключения.
Отсюда делаем сразу несколько выводов:
- Порядок секций в файле значения не имеет.
- Если будет найдена "своя секция", то робот будет руководствоваться только ее инструкциями, игнорируя все остальные, поэтому в нашем примере робот Гугл абсолютно справедливо будет индексировать /dir/file.
- Отсутствие общей секции — разрешение индексировать весь сайт роботам, не упомянутым ни в одной секции.
Пора писать свой сервис проверки, но это ж сколько кодировать надо!
Отправлено Cherny в August 15, 2006 10:58 PM
Комментарии
Пора писать свой сервис проверки, но это ж сколько кодировать надо!
Напишите, Владимир, общественность будет только благодарна, а если сервис будет еще и англоязычный, то можно будет заработать неплой PR.
Если своя секция найдена принимает к руководству ее инструкции.
В этой инструкции, как мне кажется, заложена неоднозначность, т.е. непонятно что делать, если обнаружено несколько "своих" секций:
User-agent: *
Disallow: /dir/file
User-agent: Yandex
Disallow: /reports
User-agent: Win16
Disallow: /users
Отправлено Lermont в September 5, 2006 5:24 PM
Вот меня всегда и удивляет, зачем люди сами себе выдумывают неоднозначности на ровном месте!?
Зачем, в данном случае, писать две разные секции для одного и того же робота? Незачем.
А в примере Яндекс навряд ли будет разбираться в секции для Win16, это не его позывные.
Отправлено Cherny в September 5, 2006 6:46 PM
Будет разбираться - не будет, его позывные - не его, разговор не в этой плоскости, речь о формализме - способен он разруливать неоднозначности или нет. Давайте попробуем сформулировать более жизненный пример:
User-agent: *
Disallow: /dir/file
User-agent: Google
Disallow: /reports
User-agent: Mediapartners-Google/2.1
Disallow: /users
Отправлено Lermont в September 5, 2006 8:45 PM
>Давайте попробуем сформулировать более жизненный пример
Давайте. Где здесь неоднозначность?
У Google не менее 5-ти разных роботов. В примере отдельные секции для двух из них, каждый будет руководствоваться своей.
А вот у горячо любимого всеми Яндекса есть неоднозначность, о которой я писал -- он не дал пока разным своим роботам разные имена. Будем надеяться, что это только пока.
Отправлено Cherny в September 6, 2006 9:37 AM
Похоже, что тема "бренчится". О неоднозначности в robots.txt вообще. Я согласен, что в стандарте написано однозначно:
User-agent
The value of this field is the name of the robot the record is describing access policy for. т.е. слова "is the name" я понимаю как требование полного совпадения User-agent бота и названия секции. Но мне кажется, что на практике боты ищут подстроку из секции в своем User-agent, иначе я не понимаю как секция
User-agent: Googlebot
Disallow: /users
Allow: /best-page.html
может что-нибудь запретить для бота с именем Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
А если ищется подстрока, то неоднозначности ботов все же могут возникать.
Второй случай с разными секциями для одного и того же User-agent. Тоже согласен, что смысла в нем не много, но ведь такой же случай может существовать! Соответственно и реакция ботов на него тоже должна же быть какая-то.
О неоднозначности в Яндексе. Опять же таки все упирается в реализацию, хоть в стандарте и написано:
Each record contains lines of the form ":"
Товарищи из Яндекса вполне могли забить на второй и такой вот вариант для запрета индексации картинок:
User-agent: Yandex/1.01.001 (compatible; Win16; P)
Disallow: /
вполне может пройти. Осталось попробовать.
Отправлено Lermont в September 6, 2006 10:47 AM
P.S. Из-за квазитегов съелась цитата. Имел в виду этот фрагмент:
Each record contains lines of the form "[field]: [optionalspace][value][optionalspace]" и второй optionalspace.
Отправлено Lermont в September 6, 2006 10:52 AM
Фраза "the name of the robot" -- это имя робота, а часть его User-agent, вот в чем прикол.
Робот не будет искать значения полей из robots.txt в своем User-agent.
Другими словами User-agent в robots.txt и User-agent в стандарте HTTP -- разные вещи.
Имя робота, как правило, задается на некоей странице владельцев этого робота, например:
http://www.google.com/support/webmasters/bin/answer.py?answer=40364
http://help.yahoo.com/help/us/ysearch/slurp/slurp-02.html
Хорошим тоном также считается указывать адрес такой страницы в HTTP User-agent робота.
Отправлено Cherny в September 6, 2006 1:37 PM
Yahoo! Slurp will obey the first entry in the robots.txt file with a User-agent containing "Slurp". If there is no such record, it will obey the first entry with a User-agent of "*".
Судя по активному использованию фразы "first entry" разработчики ботов все же пытаются защитится от неоднозначностей стандарта.
Отправлено Lermont в September 6, 2006 2:15 PM
А мне вот интересно что будут делать роботы с таким robots.txt
User-Agent: *
Host: www.site.ru
User-agent: *
Disallow: /design/examples/
Отправлено Владимиров Павел в September 10, 2006 12:57 AM
Все роботы будут игнорировать первую запись и руководствоваться второй, включая Яндекс.
Отправлено Cherny в September 10, 2006 10:54 AM
Владимир, это личное наблюдение? Согласно ссылке http://help.yahoo.com/help/us/ysearch/slurp/slurp-02.html
которую Вы привели про бота Yahoo, он будет брать первую запись:
Yahoo! Slurp will obey the first entry in the robots.txt file with a User-agent containing "Slurp". If there is no such record, it will obey the first entry with a User-agent of "*".
Отправлено Lermont в September 10, 2006 11:09 AM
В приведенном выше примере вся запись не соответствует стандарту, поскольку отсутствует хотя бы одна строка с Disallow, из-за этого вся запись будет игнорироваться. Вернее, должна игнорироваться. Как ведут себя разные роботы в случае ошибочных robots.txt я не проверял и не собираюсь проверять - слишком много может быть вариантов.
Отправлено Cherny в September 10, 2006 11:05 PM
Прошу прощения, поспешил - показалось, что там 2 Disallow =)
Отправлено Lermont в September 11, 2006 10:02 AM