(не)?Путевые заметки промоутера - вопросы SEO, продвижения и оптимизации сайтов, поисковые системы и реклама в России и Украине

« 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

Вопрос заключался в том, какими директивами в данном случае будет руководствоваться робот Гугля, что для него будет запрещено? Можно подумать, что робот наткнется в первую очередь на секцию для всех роботов и именно ее правила примет к рассмотрению. Это неверное предположение. Робот при парсинге файла работает примерно по следующему алгоритму:

  1. Получает полностью файл
  2. Выделяет в файле корректные секции
  3. Ищет "свою" секцию
  4. Если своя секция найдена принимает к руководству ее инструкции.
  5. Если своей секции не обнаружено, ищет секцию для всех роботов
  6. Если обнаружена секция для всех роботов, принимает к руководству ее инструкции
  7. Если общая секция не найдена, робот считает, что индексировать можно все без исключения.

Отсюда делаем сразу несколько выводов:

  1. Порядок секций в файле значения не имеет.
  2. Если будет найдена "своя секция", то робот будет руководствоваться только ее инструкциями, игнорируя все остальные, поэтому в нашем примере робот Гугл абсолютно справедливо будет индексировать /dir/file.
  3. Отсутствие общей секции — разрешение индексировать весь сайт роботам, не упомянутым ни в одной секции.

Пора писать свой сервис проверки, но это ж сколько кодировать надо!

Отправлено 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