====== Файл robots.txt ====== * [[http://help.yandex.ru/webmaster/?id=996567|Использование robots.txt]] * [[http://webmaster.yandex.ru/robots.xml|Анализ robots.txt]] * [[http://robotstxt.org.ru/|Все о файле «robots.txt» по-русски — как составить robots.txt]] * [[http://htmlweb.ru/analiz/robots.php|Создание Robots.txt]] ===== Что такое файл robots.txt ===== Robots.txt — текстовый файл, расположенный на сайте, который предназначен для роботов поисковых систем. В этом файле вебмастер может указать параметры индексирования своего сайта как для всех роботов сразу, так и для каждой поисковой системы по отдельности. ===== Как создать robots.txt ===== Воспользуйтесь любым текстовым редактором (например, Блокнотом или WordPad'ом), создайте файл с именем "robots.txt" и заполните его в соответствии с представленными ниже правилами. После этого необходимо загрузить файл в корневой каталог вашего сайта. Чтобы проверить правильность обработки вашего файла robots.txt, воспользуйтесь [[http://webmaster.yandex.ru/robots.xml|анализатором файла robots.txt]]. ===== Директива User-agent ===== Управлять доступом робота Яндекса к вашему сайту вы можете при помощи файла robots.txt, который должен быть размещен в корневой директории сайта. Робот Яндекса поддерживает стандарт описания http://www.robotstxt.org/wc/norobots.html с расширенными возможностями, описанными ниже. В роботе Яндекса используется сессионный принцип работы, на каждую сессию формируется определенный пул страниц, которые планирует закачать робот. Сессия начинается с закачки robots.txt сайта, если его нет, он не текстовый или на запрос робота возвращается HTTP-код отличный от '200', считается, что доступ роботу не ограничен. В самом robots.txt проверяется наличие записей, начинающихся с '''User-agent:''', в них ищутся подстроки '''Yandex''', либо '' '*' '' (регистр значения не имеет), причем, если обнаружено '''User-agent: Yandex''', директивы для '''User-agent: *''' не учитываются. Если записи '''User-agent: Yandex''' и '''User-agent: *''' отсутствуют, считается, что доступ роботу не ограничен. Следующим роботам Яндекса можно указать отдельные директивы: * 'YandexBot' — основной индексирующий робот; * 'YandexMedia' — робот, индексирующий мультимедийные данные; * 'YandexImages' — индексатор Яндекс.Картинок; * 'YandexCatalog' — "простукивалка" Яндекс.Каталога; * 'YandexDirect' — робот, индексирующий страницы сайтов, участвующих в Рекламной сети Яндекса; * 'YandexBlogs' — робот поиска по блогам, индексирующий комментарии постов; * 'YandexNews' — робот Яндекс.Новостей; * 'YandexPagechecker' — робот, обращающийся к странице при валидации микроразметки через форму «Валидатор микроразметки»; Для каждого из них также действительно правило: если обнаружены директивы для конкретного робота, директивы '''User-agent: Yandex''' и '''User-agent: *''' не используются. Пример: User-agent: YandexBot # будет использоваться только основным индексирующим роботом Disallow: /*id= User-agent: Yandex # будет использована всеми роботами Яндекса Disallow: /*sid= # кроме основного индексирующего User-agent: * # не будет использована роботами Яндекса Disallow: /cgi-bin ===== Использование директив Disallow и Allow ===== Чтобы запретить доступ робота к некоторым частям сайта или сайту целиком, используйте директиву '''Disallow'''. Примеры: User-agent: Yandex Disallow: / # блокирует доступ ко всему сайту User-agent: Yandex Disallow: /cgi-bin # блокирует доступ к страницам #начинающимся с '/cgi-bin' **Примечание:** **Недопустимо** наличие пустых переводов строки между директивами '''User-agent''' и '''Disallow''' ('''Allow'''), а также между самими '''Disallow' ('Allow')'' директивами. Кроме того, в соответствии со стандартом перед каждой директивой '''User-agent''' рекомендуется вставлять пустой перевод строки. Символ '' '#' '' предназначен для описания комментариев. Все, что находится после этого символа и до первого перевода строки не учитывается. Чтобы разрешить доступ робота к некоторым частям сайта или сайту целиком, используйте директиву '''Allow'''. Примеры: User-agent: Yandex Allow: /cgi-bin Disallow: / # запрещает скачивать все, кроме страниц # начинающихся с '/cgi-bin' **Совместное использование директив.** Директивы Allow и Disallow из соответствующего ''User-agent'' блока сортируются по длине префикса URL (от меньшего к большему) и применяются последовательно. Если для данной страницы сайта подходит несколько директив, то выбирается последняя в порядке появления в сортированном списке. Таким образом порядок следования директив в файле robots.txt не влияет на использование их роботом. Примеры: # Исходный robots.txt: User-agent: Yandex Allow: /catalog Disallow: / # Сортированный robots.txt: User-agent: Yandex Disallow: / Allow: /catalog # разрешает скачивать только страницы, # начинающиеся с '/catalog' # Исходный robots.txt: User-agent: Yandex Allow: / Allow: /catalog/auto Disallow: /catalog # Сортированный robots.txt: User-agent: Yandex Allow: / Disallow: /catalog Allow: /catalog/auto # запрещает скачивать страницы, начинающиеся с '/catalog', # но разрешает скачивать страницы, начинающиеся с '/catalog/auto'. **Важно.** В случае возникновения конфликта между двумя директивами с префиксами одинаковой длины приоритет отдается директиве Allow. **Директивы Allow-Disallow без параметров.** Отсутствие параметров у директивы трактуется следующим образом: User-agent: Yandex Disallow: # то же, что и Allow: / User-agent: Yandex Allow: # то же, что и Disallow: / ===== Использование спецсимволов "*" и "$" ===== При указании путей директив ''Allow-Disallow'' можно использовать спецсимволы '' '*' '' и '' '$' '', задавая, таким образом, определенные регулярные выражения. Спецсимвол '' '*' '' означает любую (в том числе пустую) последовательность символов. Примеры: User-agent: Yandex Disallow: /cgi-bin/*.aspx # запрещает '/cgi-bin/example.aspx' # и '/cgi-bin/private/test.aspx' Disallow: /*private # запрещает не только '/private', # но и '/cgi-bin/private' **Спецсимвол '$'** По умолчанию к концу каждого правила, описанного в robots.txt, приписывается '' '*' '', например: User-agent: Yandex Disallow: /cgi-bin* # блокирует доступ к страницам # начинающимся с '/cgi-bin' Disallow: /cgi-bin # то же самое Чтобы отменить '' '*' '' на конце правила, можно использовать спецсимвол '' '$' '', например: User-agent: Yandex Disallow: /example$ # запрещает '/example', # но не запрещает '/example.html' User-agent: Yandex Disallow: /example # запрещает и '/example', # и '/example.html' User-agent: Yandex Disallow: /example$ # запрещает только '/example' Disallow: /example*$ # так же, как 'Disallow: /example' #запрещает и /example.html и /example ===== Директива Sitemap ===== Если вы используете описание структуры вашего сайта в формате sitemaps.xml, и хотите, чтобы робот узнал о ней, укажите путь к sitemaps.xml в качестве параметра директивы '''Sitemap''' (если файлов несколько, укажите все). Пример: User-agent: Yandex Allow: / Sitemap: http://mysite.ru/site_structure/my_sitemaps1.xml Sitemap: http://mysite.ru/site_structure/my_sitemaps2.xml Робот запомнит пути к sitemaps.xml, обработает файлы и будет использовать результаты при последующем формировании сессий закачки. ===== Директива Host ===== Если у вашего сайта есть зеркала, специальный робот зеркальщик определит их и сформирует группу зеркал вашего сайта. В поиске будет участвовать только **главное зеркало**. Вы можете указать его **у всех зеркал** при помощи robots.txt, используя директиву '''Host''' и определив в качестве ее параметра имя **главного зеркала**. Директива '''Host''' **не гарантирует** выбор указанного главного зеркала, тем не менее, алгоритм при принятии решения учитывает ее с высоким приоритетом. Пример: #Если www.glavnoye-zerkalo.ru главное зеркало сайта, то #robots.txt для всех сайтов из группы зеркал выглядит так User-Agent: * Disallow: /forum Disallow: /cgi-bin Host: www.glavnoye-zerkalo.ru **Важно:** в целях совместимости с роботами, которые не полностью следуют стандарту при обработке robots.txt, директиву '''Host''' необходимо добавлять в группе, начинающейся с записи '''User-Agent''', непосредственно после директив '''Disallow'('Allow')''. Аргументом директивы '''Host''' является доменное имя с номером порта (80 по умолчанию), отделенным двоеточием. #Пример корректно составленного robots.txt, при обработке #которого директива Host учитывается User-Agent: * Disallow: Host: www.myhost.ru Тем не менее директива Host является межсекционной, поэтому будет использоваться роботом вне зависимости от места в файле robots.txt, где она указана. **Важно:** Директива Host в файле robots.txt может быть только одна. В случае указания нескольких директив, использоваться будет первая. Пример: Host: myhost.ru # используется User-agent: * Disallow: /cgi-bin User-agent: Yandex Disallow: /cgi-bin Host: www.myhost.ru # не используется Важно: параметр директивы ''Host'' обязан состоять из одного корректного имени хоста (то есть соответствующего [[http://tools.ietf.org/html/rfc952|RFC 952]] и не являющегося IP-адресом) и допустимого номера порта. Некорректно составленные строчки '''Host:''' игнорируются. # Примеры игнорируемых директив Host Host: www.myhost-.ru Host: www.-myhost.ru Host: www.myhost.ru:100000 Host: www.my_host.ru Host: .my-host.ru:8000 Host: my-host.ru. Host: my..host.ru Host: www.myhost.ru/ Host: www.myhost.ru:8080/ Host: http://www.myhost.ru Host: 213.180.194.129 Host: www.firsthost.ru,www.secondhost.ru Host: www.firsthost.ru www.secondhost.ru Примеры использования директивы Host: # domen.myhost.ru является главным зеркалом # www.domen.myhost.ru, тогда корректное использование # директивы Host такое: User-Agent: * Disallow: Host: domen.myhost.ru # domen.myhost.ru является главным зеркалом # www.domen.myhost.ru, тогда некорректное использование # директивы Host такое: User-Agent: * Disallow: Host: myhost.ru ===== Директива Crawl-delay ===== Если сервер сильно нагружен и не успевает отрабатывать запросы на закачку, воспользуйтесь директивой " ''Crawl-delay'' ". Она позволяет задать поисковому роботу минимальный период времени (в секундах) между концом закачки одной страницы и началом закачки следующей. В целях совместимости с роботами, которые не полностью следуют стандарту при обработке robots.txt, директиву "''Crawl-delay''" необходимо добавлять в группе, начинающейся с записи "''User-Agent''", непосредственно после директив "''Disallow''" ("''Allow''"). Поисковый робот Яндекса поддерживает дробные значения ''Crawl-Delay'', например, 0.5. Это не гарантирует, что поисковый робот будет заходить на ваш сайт каждые полсекунды, но дает роботу больше свободы и позволяет ускорить обход сайта. Примеры: User-agent: Yandex Crawl-delay: 2 # задает таймаут в 2 секунды User-agent: * Disallow: /search Crawl-delay: 4.5 # задает таймаут в 4.5 секунды ===== Директива Clean-param ===== Если адреса страниц вашего сайта содержат динамические параметры, которые не влияют на их содержимое (например: идентификаторы сессий, пользователей, рефереров и т.п.), вы можете описать их при помощи директивы '''Clean-param'''. Робот Яндекса, используя эту информацию, не будет многократно перезакачивать дублирующуюся информацию. Таким образом, увеличится эффективность обхода вашего сайта, снизится нагрузка на сервер. Например, на сайте есть страницы: www.site.ru/some_dir/get_book.pl?ref=site_1&book_id=123 www.site.ru/some_dir/get_book.pl?ref=site_2&book_id=123 www.site.ru/some_dir/get_book.pl?ref=site_3&book_id=123 параметр '''ref=''' используется только для того, чтобы отследить с какого ресурса был сделан запрос и не меняет содержимое, по всем трем адресам будет показана одна и та же страница с книгой '''book_id=123'''. Тогда, если в robots.txt указать: Clean-param: ref /some_dir/get_book.pl Вот так: User-agent: Yandex Disallow: Clean-param: ref /some_dir/get_book.pl Робот Яндекса сведет все адреса страницы к одному: www.site.ru/some_dir/get_book.pl?ref=site_1&book_id=123, Если на сайте доступна страница без параметров: www.site.ru/some_dir/get_book.pl?book_id=123 То все сведется именно к ней, когда она будет проиндексирована роботом. Другие страницы вашего сайта будут обходиться чаще, так как нет необходимости обновлять страницы: www.site.ru/some_dir/get_book.pl?ref=site_2&book_id=123 www.site.ru/some_dir/get_book.pl?ref=site_3&book_id=123 **Синтаксис использования директивы:** Clean-param: p0[&p1&p2&..&pn] [path] В первом поле через '''&''' перечисляются параметры, которые нужно не учитывать. Во втором поле указывается префикс пути страниц, для которых нужно применить правило. ** Важно:** директива Clean-Param является межсекционной, поэтому может быть указана в любом месте файла robots.txt. В случае, если директив указано несколько, все они будут учтены роботом. **Примечание:** Префикс может содержать регулярное выражение в формате, аналогичном robots.txt, но с некоторыми ограничениями: можно использовать только символы ''A-Za-z0-9.-/*_''. При этом ' ''*'' ' трактуется так же, как в robots.txt. В конец префикса всегда неявно дописывается ' ''*'' ', то есть: Clean-param: s /forum/showthread.php означает, что параметр ''s'' будет считаться незначащим для всех url-ов, начинающихся с /forum/showthread.php. Второе поле указывать необязательно, в этом случае правило будет применяться для всех страниц сайта. Регистр учитывается. Действует ограничение на длину правила — 500 символов. Например: Clean-param: abc /forum/showthread.php Clean-param: sid&sort /forumt/*.php Clean-param: someTrash&otherTrash **Дополнительные примеры:** #для адресов вида: www.site1.ru/forum/showthread.php?s=681498b9648949605&t=8243 www.site1.ru/forum/showthread.php?s=1e71c4427317a117a&t=8243 #robots.txt будет содержать: User-agent: Yandex Disallow: Clean-param: s /forum/showthread.php #для адресов вида: www.site2.ru/index.php?page=1&sort=3a&sid=2564126ebdec301c607e5df www.site2.ru/index.php?page=1&sort=3a&sid=974017dcd170d6c4a5d76ae #robots.txt будет содержать: User-agent: Yandex Disallow: Clean-param: sid /index.php #если таких параметров несколько: www.site1.ru/forum_old/showthread.php?s=681498605&t=8243&ref=1311 www.site1.ru/forum_new/showthread.php?s=1e71c417a&t=8243&ref=9896 #robots.txt будет содержать: User-agent: Yandex Disallow: Clean-param: s&ref /forum*/showthread.php #если параметр используется в нескольких скриптах: www.site1.ru/forum/showthread.php?s=681498b9648949605&t=8243 www.site1.ru/forum/index.php?s=1e71c4427317a117a&t=8243 #robots.txt будет содержать: User-agent: Yandex Disallow: Clean-param: s /forum/index.php Clean-param: s /forum/showthread.php ===== Дополнительная информация ===== Директивы robots.txt, которые не упомянуты в данном описании, робот Яндекса **не поддерживает**. Необходимо помнить, что результат использования расширений формата robots.txt может **отличаться** от результата без них, а именно: User-agent: Yandex Allow: / Disallow: / # без расширений все запрещалось так как 'Allow: /' игнорировалось, # с поддержкой расширений все разрешается User-agent: Yandex Disallow: /private*html # без расширений запрещалось '/private*html', # а с поддержкой расширений и '/private*html', # и '/private/test.html', и '/private/html/test.aspx' и т.п. User-agent: Yandex Disallow: /private$ # без расширений запрещалось '/private$' и '/private$test' и т.п., # а с поддержкой расширений только '/private' User-agent: * Disallow: / User-agent: Yandex Allow: / # без расширений из-за отсутствия перевода строки, # 'User-agent: Yandex' было бы проигнорировано и # результатом стало бы 'Disallow: /', но робот Яндекса # выделяет записи по наличию в строке 'User-agent:', # результат для робота Яндекса в данном случае 'Allow: /' User-agent: * Disallow: / # комментарий1... # комментарий2... # комментарий3... User-agent: Yandex Allow: / # аналогично предыдущему примеру (см. выше) **Примеры использования расширенного формата robots.txt:** User-agent: Yandex Allow: /archive Disallow: / # разрешает все, что содержит '/archive', остальное запрещено User-agent: Yandex Allow: /obsolete/private/*.html$ # разрешает html файлы # по пути '/obsolete/private/...' Disallow: /*.php$ # запрещает все '*.php' на данном сайте Disallow: /*/private/ # запрещает все подпути содержащие # '/private/', но Allow выше отменяет # часть запрета Disallow: /*/old/*.zip$ # запрещает все '*.zip' файлы, содержащие # в пути '/old/' User-agent: Yandex Disallow: /add.php?*user= # запрещает все скрипты 'add.php?' с параметром 'user' При написании robots.txt необходимо помнить, что у робота есть разумное ограничение на его размер. Слишком большие robots.txt (более 32 Кб) считаются полностью разрешающими, то есть рассматриваются аналогично: User-agent: Yandex Disallow: Также разрешающими считаются robots.txt, которые не удалось закачать (например, по причине неправильных http-заголовков) или отдающие 404 ошибку. Для проверки правильности файла robots.txt вы можете воспользоваться специальным [[http://webmaster.yandex.ru/robots.xml|on-line анализатором]]. См. описание [[http://help.yandex.ru/webmaster/?id=996709|«Анализатор robots.txt»]]