Отправляет email-рассылки с помощью сервиса Sendsay

.NET: Записки программиста

  Все выпуски  

Robots.txt или Кое что о роботах


Рассылка сайта .NET: Записки программиста Сайт .NET: Записки программиста

Robots.txt или Кое что о роботах

формат robots.txt Файлы 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/

User-Agent: Slurp
User-agent: MSNbot
Disallow: /map/
Проблема этого формата в том, что с 1994 года он официально не менялся. А вот сложность сайтов и иерархии их urls менялась да еще как. Если эти правила устраивали сайты, состоящие из нескольких десятков статических страниц, то для доров, говносай современных сайтов с динамическим контентом этого явно не хватает.

Вы же не думали, что в стандартных правилах можно использовать хоть какие-то шаблоны? Формат "Disallow:" очень прост: запрещается индексация любых urls, которые начинаются с указанной строки.

То есть, "Disallow: /map/" запрещает все файлы в каталоге "/map", но не запрещает "/map.html". А вот "Disallow: /map" запрещает и то и другое.

Проблема часто возникает, если вы используете url rewriting. Например, у вас есть сайт со описаниями товаров. Url страницы с описанием:
/{категория}/{название товара}-{id товара}
(id товара обычно используется, если нельзя придумать уникальные строковые названия для каждого товара).

И есть страница с отзывами покупателей, ее url:
/{категория}/{название товара}-{id товара}/comments
А так же есть страница, на которой пользователи могут добавлять новые отзывы, ее url:
/{категория}/{название товара}-{id товара}/comments/add
Эта страница доступна только залогиненным пользователям, так что нужно запретить ее индексацию. Без шаблонов или регулярных выражений тут просто не обойдешься.
Тут вы могли подумать "А зачем для служебных страниц использовать friendly urls? Создай себе одну страницу и запрети ее в robots.txt". Да это выход, но не всегда. Будет удобно, если страница добавления отзыва будет выглядеть так же, как и остальные страницы с описанием, в том числе с той же шапкой и боковыми модулями. Так как модули независимы, они могут рассчитывать на url определенного формата (например на то, что он включает в себя категорию товара). Так что проще использовать такой же формат url, чем добавлять везде проверки "если категория есть в url - взять ее оттуда, иначе - определить по id товара".
расширения формата robots.txt Крупные поисковые сервисы пошли привычным путем - стали вводить свои уникальные расширения. Так, Yahoo добавило возможность использования символов * и $. Символ * обозначает любую (в том числе и пустую) последовательность символов, а $ - конец строки. То есть, в нашей ситуации с товарами, мы сможем запретить индексацию страниц с добавлением при помощи оператора:
Disallow: /*/comments/add$
Правда, этот пример не поможет, если у вас используются еще и параметры query string, тогда нужно писать так:
Disallow: /*/comments/add$
Disallow: /*/comments/add?
Обратите внимание, что по умолчанию ко всем правилам приписывается *, поэтому нам можно не писать:
Disallow: /*/comments/add?*
Основные моменты, на которые стоит обратить внимание:
  • В стандарте robots.txt (тут расположена последняя версия стандарта robots .txt) существуют только операторы "User-agent:", "Disallow:" и комментарии. Все. Шаблоны не поддерживаются.

  • Существуют расширения, которые поддерживаются основными поисковыми серверами. Это:

    1. Шаблоны * и $. Признаются как минимум Google, Yandex и MSN.

    2. Sitemap - для указания url с картой сайта. У меня сложилось впечатление, что Yandex и Google обнаруживают его вне зависимости от операторов "User-agent:". Но надежнее все таки будет писать:
      User-agent: *
      Sitemap: http://www.mysite.com/sitemap.xml
      Признается как минимум Google, Yahoo, Yandex и MSN.

    3. Allow - синтаксис аналогичен Disallow, смысл - прямо противоположный. То есть, если среди сотен документов нам нужно запретить почти все, то удобнее разрешить оставшиеся документы, а следующим оператором запретить все остальное:
      User-agent: *
      Allow: /post/page1
      Allow: /post/page2
      Allow: /post/page3
      Disallow: /
      Признается как минимум Google, Yandex и MSN.

  • У каждого поискового сервера могут существовать свои полезные расширения.
    Так, например, Yandex поддерживает операторы Host (позволяет указать основной сайт среди нескольких зеркал), Crawl-delay (позволяет снизить интенсивность обращений поисковика к страницам сайта, если он и так загружен) и Clean-param (позволяет указать, какие параметры query string не влияют на уникальность страницы; тогда Yandex не будет загружать все urls с различными вариантами этих параметров).
И еще несколько полезных советов ...

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

Лучше начинать комментарии с новой строки (хотя стандарт допускает использование их в конце оператора), использовать большие буквы точно как в примерах (Sitemap, а не SITEMAP), четко указывать, к какому серверу относятся конкретные операторы.

Знаете, из-за чего Google решил, что в robots.txt я блокирую весь сайт? Файл состоял всего из двух строчек:
User-agent: *
Sitemap: http://{доменное имя}/sitemap.xml
Считается, что оператор Disallow должен присутствовать в каждой записи. Тут он был пропущен и Google воспринял его как "Disallow: /". Возможно это был какой-то сбой, так как на странице "Анализ robots.txt" в инструментах для веб-мастеров, Google сообщил, что все ок. Но стоит ли рисковать, если от этого зависит индексация ваших страниц.

формат robots.txt Для крупных поисковых серверов, вы можете проверить какую-либо из ваших конструкций в инструментах веб-мастера.
Так, для Google это страница "Панель инструментов > Инструменты > Анализ Robots.txt" (url не указываю, так как он зависит от залогиненного пользователя \ адреса вашего веб-сайта).
Robots.txt (кстати, называть его так - тоже ошибка, файл нужно создавать имено с маленькой буквы :) для Yandex можно проверить на странице Анализ robots.txt.

Внимательно изучите описание robots.txt и его расширений для разных поисковых серверов:
robots.txt для Google
robots.txt для Yandex.ru
Все о файле robots.txt по-русски (отсюда я спи позаимствовал картинку с роботом, надеюсь ссылка на их сайт компенсирует моральные потери :)

И да будут поисковые сервера к вам благосклонны :)

блог сайта .NET: Записки программиста Подпишись на блог сайта .NET: Записки программиста



В избранное