Август 17, 2005

Как работают роботы (spiders) поисковых машин. Часть 2.

Формат файла /robots.txt.

Файл /robots.txt предназначен для указания всем поисковым роботам (spiders) индексировать информационные сервера так, как определено в этом файле, т.е. только те директории и файлы сервера, которые НЕ описаны в /robots.txt. Это файл должен содержать 0 или более записей, которые связаны с тем или иным роботом (что определяется значением поля agent_id), и указывают для каждого робота или для всех сразу что именно им НЕ НАДО индексировать. Тот, кто пишет файл /robots.txt, должен указать подстроку Product Token поля User-Agent, которую каждый робот выдает на HTTP-запрос индексируемого сервера. Например, нынешний робот Lycos на такой запрос выдает в качестве поля User-Agent:

Lycos_Spider_(Rex)/1.0 libwww/3.1

Если робот Lycos не нашел своего описания в /robots.txt - он поступает так, как считает нужным. Как только робот Lycos "увидел" в файле /robots.txt описание для себя - он поступает так, как ему предписано.

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

Общее описание формата записи.

Параметры

Описание параметров, применяемых в записях /robots.txt

[...]+ Квадратные скобки со следующим за ними знаком + означают, что в качестве параметров должны быть указаны один или несколько терминов.

Например, после "User-Agent:" через пробел могут быть указаны один или несколько agent_id.

[...]* Квадратные скобки со следующим за ними знаком * означают, что в качестве параметров могут быть указаны ноль или несколько терминов.

Например, Вы можете писать или не писать комментарии.

[...]? Квадратные скобки со следующим за ними знаком ? означают, что в качестве параметров могут быть указаны ноль или один термин.

Например, после "User-Agent: agent_id" может быть написан комментарий.

..|.. означает или то, что до черты, или то, что после.

WS один из символов - пробел (011) или табуляция (040)

NL один из символов - конец строки (015) , возврат каретки (012) или оба этих символа (Enter)

User-Agent: ключевое слово (заглавные и прописные буквы роли не играют).

Параметрами являются agent_id поисковых роботов.

Disallow: ключевое слово (заглавные и прописные буквы роли не играют).

Параметрами являются полные пути к неиндексируемым файлам или директориям

# начало строки комментариев, comment string - собственно тело комментария.

agent_id любое количество символов, не включающих WS и NL, которые определяют agent_id различных поисковых роботов. Знак * определяет всех роботов сразу.

path_root любое количество символов, не включающих WS и NL, которые определяют файлы и директории, не подлежащие индексированию.

Расширенные комментарии формата.

Каждая запись начинается со строки User-Agent, в которой описывается каким или какому поисковому роботу эта запись предназначается. Следующая строка: Disallow. Здесь описываются не подлежащие индексации пути и файлы. КАЖДАЯ запись ДОЛЖНА иметь как минимум эти две строки (lines). Все остальные строки являются опциями. Запись может содержать любое количество строк комментариев. Каждая строка комментария должна начинаться с символа # . Строки комментариев могут быть помещены в конец строк User-Agent и Disallow. Символ # в конце этих строк иногда добавляется для того, чтобы указать поисковому роботу, что длинная строка agent_id или path_root закончена. Если в строке User-Agent указано несколько agent_id, то условие path_root в строке Disallow будет выполнено для всех одинаково. Ограничений на длину строк User-Agent и Disallow нет. Если поисковый робот не обнаружил в файле /robots.txt своего agent_id, то он игнорирует /robots.txt.

Если не учитывать специфику работы каждого поискового робота, можно указать исключения для всех роботов сразу. Это достигается заданием строки

User-Agent: *

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

Каждый поисковый робот будет определять абсолютный URL для чтения с сервера с использованием записей /robots.txt. Заглавные и строчные символы в path_root ИМЕЮТ значение.

Примеры.

Пример 1:


В примере 1 файл /robots.txt содержит две записи. Первая относится ко всем поисковым роботам и запрещает индексировать все файлы. Вторая относится к поисковому роботу Lycos и при индексировании им сервера запрещает директории /cgi-bin/ и /tmp/, а остальные - разрешает. Таким образом сервер будет проиндексирован только системой Lycos.

Пример 2:


В примере 2 файл /robots.txt содержит две записи. Первая разрешает поисковым роботам Copernicus и Fred индексировать весь сервер. Вторая - запрещает всем и осебенно роботу Rex индексировать такие директории и файлы, как /tmp/, /tea-time/, /top-cat.txt, /traverse.this и т.д. Это как раз случай задания маски для директорий и файлов.

Пример 3:

В примере 3 - одна запись. Здесь всем роботам запрещается индексировать директорию /spiders/not/here/, включая такие пути и файлы как /spiders/not/here/really/, /spiders/not/here/yes/even/me.html. Однако сюда не входят /spiders/not/ или /spiders/not/her (в директории '/spiders/not/').

Продолжение следует...

Автор:

Источник:
Charles P.Kollar, John R.R. Leavitt, Michael Mauldin, Robot Exclusion Standard Revisited, www.kollar.com/robots.html

Комментарии

1. 23.08.05 18:46 От: Serge

В первой части статьи автор «жалуется», что файл robots.txt очень редко используется…

Привожу цитату из первого абзаца текущей части статьи:

> Файл /robots.txt предназначен для указания всем поисковым роботам (spiders) индексировать информационные сервера так, как определено в этом файле, т.е. только те директории и файлы сервера, которые НЕ описаны в /robots.txt

Отсюда следует, что если веб-мастер хочет, чтобы поисковики индексировали все страницы, то нет надобности в создании этого файла. Этот файл нужен для _запрета_ индексации страниц или целых каталогов. Оно _каждому_ нужно?

P.S.
А почему Lycos «обнюхал» индексную страницу и отвалил (см. 1 часть) — вопрос к отсутствию файла robots.txt никак не относящийся.

2. 23.08.05 19:59 От: Дмитрий Юзвяк

>> Этот файл нужен для _запрета_
>> индексации страниц или целых
>> каталогов. Оно _каждому_ нужно?

Эту информацию _надо_ знать каждому вебмастеру, который не остановился на создании домашней странички, а решил заняться этим серьезно, т.к. на множестве сайтов существуют сотни разделов, необходимых для закрытия от поисковиков! К таким относятся служебные, защищенные паролем, внутрикорпоративные etc. Если это не важно _для вас_, то это не значит, что не важно ни для кого!

А насчет Lycos скажу так: именно эта строчка:

>> lycosidae.lycos.com - - [01/Mar/1997:21:27:32 -0500] "GET /robots.txt HTTP/1.0" 404 -

подтолкнула меня на раздумья. К тому, что Lycos ушел она не имеет (как оказалось позже) ничего общего, но меня заинтересовало, почему поисковики вообще обращаются к ней.

3. 24.08.05 10:23 От: Serge

Исходя из Вашего ответа, а также принимая во внимание текст статьи (все 3 части), приходим к выводу, что Ваши идеи расходятся с реализацией. Надо более точно формулировать свои мысли при написании статей. В настоящее время в них содержится полезная информация, разбавленная большим количеством противоречивых текстов.

4. 24.08.05 10:46 От: Serge

Опять же цитирую:

>> К таким относятся служебные,
>> защищенные паролем,
>> внутрикорпоративные etc.

Отвечаю:

1. Защищенные паролем разделы сайтов по определению не доступны поисковикам. Без пароля поисковый робот не сможет зайти в раздел.

2. Служебные разделы должны быть закрыты паролем. Далее см. п.1.

3. Внутрикопроративные разделы также должны быть закрыты паролем, если они расположены на внешнем сервере, либо файрволом, если они на внутреннем сервере компании. Эти разделы также не доступны поисковикам.

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

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

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

5. 24.08.05 20:39 От: Дмитрий Юзвяк

Serge, вы правы. Некоторая непоследовательность в тексте статьи есть, но кому, те поймут... ;)

Насчет роботс.тхт ... Честно говоря, я видел примеры его использования. Как ни странно, это были служебные и внутрикорпоративные страницы... Возможно вы правы насчет паролирования, но если пароля нет? если там нет секретной информации, но посторонним лучше не смотреть? Мне кажется, что роботс.тхт - очень полезная штука. Прописывать в каждой странице - не рационально, если сайт очень большой. Легче прописать в одном файле. К тому же, можно запретить только для определенного робота (например, для Яндекса запретить текст на английском языке, для Lycos - на русском)...

6. 25.08.05 10:23 От: Serge

А прописывать на каждой странице ничего и не надо. Надо ставить «галочки» в системе управления контентом.

7. 25.08.05 12:22 От: Дмитрий Юзвяк

А если такой системы нет? вы не задумывались, что не все сайты имеют систему администрирования?

8. 25.08.05 15:07 От: Serge

В простейшем виде она _должна_ быть на любом сайте. Если сайт настолько простой, что CMS не нужна, то и в robots.txt нет потребности. Я не прав?

9. 25.08.05 15:24 От: Дмитрий Юзвяк

нет. есть системы не вида cms, которые создают большие сайты по ОДНОМУ шаблону... А если надо перекрыть доступ для поисковика к нескольким сотням страниц, которые находятся в отдельной папке, но которые создаются по одному шаблону с другими? Тогда на помощь приходит роботс.тхт...

Еще один случай, на который вы не ответили - это разный контент для разных поисковиков. Что делать с ним?

10. 26.08.05 02:13 От: Дмитрий Юзвяк

Кстати, вот только что мне пришлось использовать роботс.тхт . Дело в том,что сайт (а если быть точным - чат) состоит из нескольких резделов, отличающихся по географии и тематике. Чат написан на РНР, все начальные страницы каждого раздела имеют свою панель для логина. Так вот, недавно Яндекс пожаловался, что мы якобы флудим. На сайте контента - минимум, все раскручивается ссылками (причем, не спам). Т.е. видимо, Яндексу не понравилось то, что слишком много РНР файлов похожих, но не полностью.

Сайт написан без использования каких-либо cms. Разделов довольно много, сайт уже создан.

Задача: запретить к индексации все разделы. Для их раскрутки созданы отдельные страницы-входы.

Варианты решения:
1) Прописывать вручную в каждой странице каждой папки запрет на индексацию
2) прописать роботс.тхт, состоящий из 2-х строчек.

Первый способ очень долгий и нудный. Второй занимает 1 минуту (исключительно на набор символов). Что лучше? по-моему, очевидно!

11. 26.08.05 10:50 От: Serge

Разный контент для разных поисковиков? ЧТО ЭТО? ЗАЧЕМ ЭТО? Но, если это действительно необходимо (хотя, и не понятно) — анализируй переменные PHP и выдавай разный контент хоть для разных браузеров, хоть для поисковиков.

Кстати, попробуйте с помощью robots.txt запретить индексацию по адресу «/news/» и при этом разрешить индексацию, например, по адресу «/news/2005/» — типичный пример ленты новостей? Запрет индексации необходим потому, что по адресу «/news/» контент постоянно меняется (появляется и исчезает), а по адресу «/news/2005/» — «накапливается».

По поводу шаблонов — на PHP достаточно просто создать переменную, «запрещающую» индексацию конкретной страницы, а в шаблоне смотреть эту переменную и выставлять соответствующий мета-тег, установленный по-умолчанию в «ALL».

Приведенный пример с полным запретом индексации (сайта или каталога) правилен и единственен. Мне не понятен разный запрет для разных поисковиков.

12. 26.08.05 12:04 От: Дмитрий Юзвяк

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

Касательно анализа РНР - а не проще ли все-таки создать файл из 2 строк?? Анализ РНР время не быстро и требующее от сервера лишних умственных затрат. Роботс.тхт в этом случае - идеальный вариант.

Касательно /news/ Чаще всего новости равполагаются на одной странице, генерируемой автоматически. Архивы же складываются в папки вроде /news/22_07_2005/ и тому подобные. Ну так и запретите только одну страницу /news/news.php Неужели это сложно?

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

13. 26.08.05 12:46 От: Serge

>> Анализ РНР время не быстро и требующее
>> от сервера лишних умственных затрат.

Епть!.. И сколько он будет анализаровать значение одной переменной? По сравнению с анализом всей страницы — время ничтожно малое и приближающееся к нулю. Естественно, за исключением вырожденного случая с пустой страницей. Но, там и запрещать к индексированию ничего не надо, тем более для разных поисковиков. :-)))

По поводу новостей в одной странице и архивов на других страницах — все правильно, но почему страница с новостями у Вас вдруг расположена по адресу «/news/news.php» (или «/news/news.php?news=news» :-), а не по более логичному адресу «/news/»? Надо думать, потому, что запрет в robots.txt файла «/news/index.php» проблемы не решит, а запрет «/news/» закроет весь каталог. Тупик. :-) Надоть все-таки запрещать через мета-тег…

Я к тому и веду, что запретить конкретную страницу (index.php) проще через мета-тег (через robots.txt и не получится), а весь каталог (или сайт) — через robots.txt двумя строками, опять же, _для_всех_, а не для конкретного поисковика. При другом его использовании получается, что посетители Google смогут находить страницы, а, например, Yandex, нет. Бред! Либо _все_ ищут, либо никто!

14. 26.08.05 15:17 От: Дмитрий Юзвяк

Согласен, время ничтожно малое для сервера, но для ручного труда - очень даже достаточное, чтобы перевернуть все страницы.

По поводу новостей. Если новости размещаются в /news/index.php то это и укажите в роботс.тхт Что значит "проблемы не решит"? еще как решит! Я еще раз подчеркиваю, что надо закрыть исключительно для Яндекса, т.к. только он считает страницу флудом, а Гугл нет. Это значит, что в поиск Гугла будет скармливаться нормальная страница, а Яндексу будет отведена отдельная. это можно реализовать скриптами, но а если страница статичная?? Значит - никак. Исключительно роботс. Мета-тэги не позволят такое.

>>Через robots.txt двумя строками, опять
>>же, _для_всех_, а не для конкретного
>>поисковика

Почему?? Наоборот! мета-теги запретят для всех, а роботс выборочно.

Почему Бред про то, что ищет Гугл, но не ищет Яндекс?? Я уже привел пример. Вы, видимо, никогда не занимались продвижением серьезных проектов. Поверьте, в той ситуации, что я вам привел, мета-тегами НЕВОЗМОЖНО это сделать, а роботс.тхт - легко. Причем, пример был взят из реальной жизни...

Кстати, РНР знают не все. Для того, чтобы понять, что нужно инициализировать.какую переменную какого формата создавать нужны хотябы начальные знания языка. Роботс.тхт могут создать даже ламеры, даже если прочитают _только_ эту статью!!

15. 17.01.08 15:47 От: Владимир

Когда к контенту есть два и более url для доступа то для обеспечения уникальности проще чем закрыть доступ к индексации каких-то url в robots.txt вариантов нет.

Ваш комментарий

Обсудить на форуме?

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