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

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

Disallow

Используйте эту директиву, чтобы запретить обход разделов сайта или отдельных страниц. Например:
  • страницы с конфиденциальными данными;
  • страницы с результатами поиска по сайту;
  • статистика посещаемости сайта;
  • дубликаты страниц;
  • разнообразные логи;
  • сервисные страницы баз данных.
Примечание. При выборе директивы для страниц, которые не должны участвовать в поиске, если их адреса содержат GET-параметры, лучше использовать директиву Clean-param, а не Disallow. При использовании Disallow может не получиться выявить дублирование адреса ссылки без параметра и передать некоторые показатели запрещенных страниц.

Примеры:

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

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

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

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 рекомендуется вставлять пустой перевод строки. Символ # предназначен для описания комментариев. Все, что находится после этого символа и до первого перевода строки не учитывается.

Страницы с адресами вида https://example.com/page#part_1 не индексируются поисковым роботом и будут обходиться по адресу https://example.com/page. Поэтому в директиве достаточно указать адрес страницы без якоря.

Если не учесть этой особенности и написать запрещающую директиву с символом #, она может закрыть от индексирования весь сайт. Например, директиву вида Disallow: /# поисковая система воспримет как Disallow: / — полный запрет на индексирование.

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

User-agent: Yandex 
Allow: /
Disallow: /
# все разрешается

User-agent: Yandex 
Allow: /$
Disallow: /
# запрещено все, кроме главной страницы

User-agent: Yandex
Disallow: /private*html
# запрещается и '/private*html', 
# и '/private/test.html', и '/private/html/test.aspx' и т. п.

User-agent: Yandex
Disallow: /private$
# запрещается только '/private'

User-agent: *
Disallow: /
User-agent: Yandex
Allow: /
# так как робот Яндекса 
# выделяет записи по наличию в строке 'User-agent:', 
# результат — все разрешается