Файлы robots.txt просты как угол дома и используются со времен, когда 3" дискеты считались прорывом в технологии :)
Именно по этому я думал, что в них нечего и разбираться. Так что обходился копи-пастом какого-то образца,
который переходил у меня из проекта в проект уже несколько лет.
Но вот однажды, затеял я эксперимент с индексацией сайта. Выложил его в инет, добавил в "Инструменты для веб-мастеров" Google и ...
увидел сообщение "Страницы вашего сайта недоступны для Google из-за огранчений в robots.txt". А файл-то был простейший,
создавался он ради одной строчки "Sitemap: http://доменное имя/sitemap.xml", чтобы лишний раз указать поисковикам где
искать карту сайта.
Между прочим, robots.txt кшируется Google примерно на день, так что после исправления пришлось ждать более суток.
Вобщем я вздохнул и полез разбираться с темой.
Robots.txt был придуман в далеком 1994 году и был предназначен для того, чтобы указать поисковикам, что не
следует индексировать на вашем сайте.
Его формат действительно очень простой: записи, разделенные пустыми строками. Каждая запись состоит из директив,
к каким поисковикам она относится (одна или несколько строк User-agent:) и операторов Disallow:
(один или несколько), которые указывают, что именно запрещается индексировать.
Если в файле встречается символ "#", то все остальное до конца строки считается комментарием.
Например:
# Самый простой вариант, разрешает индексировать все (или, точнее, запрещает ничего :)
User-agent: *
Disallow:
# Всем роботам запрещена индексация файлов в каталоге "/tmp"
# Кроме того, роботам Slurp (Yahoo) и MSNbot (MSN) запрещена индексация файлов в каталоге "/map"
User-agent: *
Disallow: /tmp/
Проблема этого формата в том, что с 1994 года он официально не менялся.
А вот сложность сайтов и иерархии их urls менялась да еще как. Если эти правила устраивали сайты, состоящие
из нескольких десятков статических страниц, то для доров, говносай современных сайтов с динамическим
контентом этого явно не хватает.
Вы же не думали, что в стандартных правилах можно использовать хоть какие-то шаблоны? Формат "Disallow:" очень прост:
запрещается индексация любых urls, которые начинаются с указанной строки.
То есть, "Disallow: /map/" запрещает все файлы в каталоге "/map", но не запрещает "/map.html".
А вот "Disallow: /map" запрещает и то и другое.
Проблема часто возникает, если вы используете url rewriting. Например, у вас есть сайт со описаниями товаров.
Url страницы с описанием:
/{категория}/{название товара}-{id товара}
(id товара обычно используется, если нельзя придумать уникальные строковые названия для каждого товара).
Эта страница доступна только залогиненным пользователям, так что нужно запретить ее индексацию.
Без шаблонов или регулярных выражений тут просто не обойдешься.
Тут вы могли подумать "А зачем для служебных страниц использовать friendly urls? Создай себе одну страницу
и запрети ее в robots.txt". Да это выход, но не всегда. Будет удобно, если страница добавления отзыва будет
выглядеть так же, как и остальные страницы с описанием, в том числе с той же шапкой и боковыми модулями.
Так как модули независимы, они могут рассчитывать на url определенного формата
(например на то, что он включает в себя категорию товара).
Так что проще использовать такой же формат url, чем добавлять везде проверки "если категория есть в url - взять ее оттуда,
иначе - определить по id товара".
Крупные поисковые сервисы пошли привычным путем - стали вводить свои уникальные расширения. Так, Yahoo добавило возможность
использования символов * и $. Символ * обозначает любую (в том числе и пустую)
последовательность символов, а $ - конец строки.
То есть, в нашей ситуации с товарами, мы сможем запретить индексацию страниц с добавлением при помощи оператора:
Disallow: /*/comments/add$
Правда, этот пример не поможет, если у вас используются еще и параметры query string, тогда нужно писать так:
Обратите внимание, что по умолчанию ко всем правилам приписывается *, поэтому нам можно не писать:
Disallow: /*/comments/add?*
Основные моменты, на которые стоит обратить внимание:
В стандарте robots.txt (тут расположена последняя версия
стандарта robots .txt)
существуют только операторы "User-agent:", "Disallow:" и комментарии. Все. Шаблоны не поддерживаются.
Существуют расширения, которые поддерживаются основными поисковыми серверами. Это:
Шаблоны * и $. Признаются как минимум Google, Yandex и MSN.
Sitemap - для указания url с картой сайта. У меня сложилось впечатление, что Yandex и Google обнаруживают его
вне зависимости от операторов "User-agent:". Но надежнее все таки будет писать:
Признается как минимум Google, Yahoo, Yandex и MSN.
Allow - синтаксис аналогичен Disallow, смысл - прямо противоположный. То есть, если среди сотен документов
нам нужно запретить почти все, то удобнее разрешить оставшиеся документы, а следующим оператором запретить все остальное:
У каждого поискового сервера могут существовать свои полезные расширения.
Так, например, Yandex поддерживает операторы
Host (позволяет указать основной сайт среди нескольких зеркал), Crawl-delay
(позволяет снизить интенсивность обращений поисковика к страницам сайта, если он и так загружен) и Clean-param
(позволяет указать, какие параметры query string не влияют на уникальность страницы; тогда Yandex не будет загружать все
urls с различными вариантами этих параметров).
И еще несколько полезных советов ...
Не старайтесь экспериментировать со структурой robots.txt, будьте проще :) Безобидное, на ваш взгляд, изменение строки
или слова может привести к тому, что какой-то поисковик перестанет индексировать ваши страницы.
Лучше начинать комментарии с новой строки (хотя стандарт допускает использование их в конце оператора),
использовать большие буквы точно как в примерах (Sitemap, а не SITEMAP), четко указывать, к какому серверу
относятся конкретные операторы.
Знаете, из-за чего Google решил, что в robots.txt я блокирую весь сайт? Файл состоял всего из двух строчек:
Считается, что оператор Disallow должен присутствовать в каждой записи. Тут он был пропущен и Google воспринял его как "Disallow: /".
Возможно это был какой-то сбой, так как на странице "Анализ robots.txt" в инструментах
для веб-мастеров, Google сообщил, что все ок. Но стоит ли рисковать, если от этого зависит индексация ваших страниц.
Для крупных поисковых серверов, вы можете проверить какую-либо из ваших конструкций в инструментах веб-мастера.
Так, для Google это страница "Панель инструментов > Инструменты > Анализ Robots.txt" (url не указываю, так как он зависит от
залогиненного пользователя \ адреса вашего веб-сайта).
Robots.txt (кстати, называть его так - тоже ошибка, файл нужно создавать имено с маленькой буквы :) для Yandex можно проверить
на странице Анализ robots.txt.