Директивы Disallow и Allow

  1. Disallow
  2. Allow
  3. Совместное использование директив
  4. Директивы Allow и Disallow без параметров
  5. Использование спецсимволов * и $
  6. Примеры интерпретации директив

Disallow

Используйте эту директиву, чтобы запретить индексирование разделов сайта или отдельных страниц. Например:
  • страницы с конфиденциальными данными;
  • страницы с результатами поиска по сайту;
  • статистика посещаемости сайта;
  • дубликаты страниц;
  • разнообразные логи;
  • сервисные страницы баз данных.

Примеры:

User-agent: Yandex
Disallow: / # запрещает обход всего сайта

User-agent: Yandex
Disallow: /catalogue # запрещает обход страниц, адрес которых начинается с /catalogue

User-agent: Yandex
Disallow: /page? # запрещает обход страниц, URL которых содержит параметры

В соответствии со стандартом перед каждой директивой User-agent рекомендуется вставлять пустой перевод строки.

Символ # предназначен для описания комментариев. Все, что находится после этого символа и до первого перевода строки не учитывается.

Allow

Директива разрешает индексирование разделов или отдельных страниц сайта.

Примеры:

User-agent: Yandex
Allow: /cgi-bin
Disallow: /
# запрещает скачивать все, кроме страниц 
# начинающихся с '/cgi-bin'
User-agent: Yandex
Allow: /file.xml
# разрешает скачивание файла file.xml
Примечание. Недопустимо наличие пустых переводов строки между директивами User-agent, Disallow и Allow.

Совместное использование директив

Директивы Allow и Disallow из соответствующего User-agent блока сортируются по длине префикса URL (от меньшего к большему) и применяются последовательно. Если для данной страницы сайта подходит несколько директив, то робот выбирает последнюю в порядке появления в сортированном списке. Таким образом, порядок следования директив в файле robots.txt не влияет на использование их роботом.

Примечание. При конфликте между двумя директивами с префиксами одинаковой длины приоритет отдается директиве Allow.
# Исходный 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'.

Общий пример:

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'

Директивы Allow и Disallow без параметров

Если директивы не содержат параметры, учитывает данные следующим образом:

User-agent: Yandex
Disallow: # то же, что и Allow: /

User-agent: Yandex
Allow: # не учитывается роботом

Использование спецсимволов * и $

При указании путей директив 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

Примеры интерпретации директив

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: /
# аналогично предыдущему примеру (см. выше)