WordPress как на ладони
wordpress jino

Настраиваем файл robots.txt для WordPress

В этой статье пример оптимального, на мой взгляд, кода для файла robots.txt под WordPress, который вы можете использовать в своих сайтах.

Оглавление:

Для начала, вспомним зачем нужен robots.txt — файл robots.txt нужен исключительно для поисковых роботов, чтобы «сказать» им какие разделы/страницы сайта посещать, а какие посещать не нужно. Страницы, которые закрыты от посещения не будут попадать в индекс поисковиков (Yandex, Google и т.д.).

robots

Вариант 1: оптимальный код robots.txt для WordPress

User-agent: *
Disallow: /cgi-bin          # классика...
Disallow: /?                # все параметры запроса на главной
Disallow: /wp-              # все файлы WP: /wp-json/, /wp-includes, /wp-content/plugins
Disallow: *?s=              # поиск
Disallow: *&s=              # поиск
Disallow: /search           # поиск
Disallow: /author/          # архив автора
Disallow: *?attachment_id=  # страница вложения. Вообще-то на ней редирект...
Disallow: */feed            # все фиды
Disallow: */rss             # rss фид
Disallow: */embed           # все встраивания
Disallow: */page/           # все виды пагинации
Allow: */uploads            # открываем uploads
Allow: /*/*.js              # внутри /wp- (/*/ - для приоритета)
Allow: /*/*.css             # внутри /wp- (/*/ - для приоритета)
Allow: /wp-*.png            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.jpg            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.jpeg           # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.gif            # картинки в плагинах, cache папке и т.д.
#Disallow: /wp/             # когда WP установлен в подкаталог wp

Host: www.site.ru           # для Яндекса и Mail.RU. (межсекционная)

Sitemap: http://site.ru/sitemap.xml     
Sitemap: http://site.ru/sitemap2.xml    # еще один файл
#Sitemap: http://site.ru/sitemap.xml.gz # сжатая версия (.gz)

# Версия кода: 1.0
# Не забудьте поменять `site.ru` на ваш сайт.

Разбор кода:

  1. В строке User-agent: * мы указываем, что все нижеприведенные правила будут работать для всех поисковых роботов *. Если нужно, чтобы эти правила работали только для одного, конкретного робота, то вместо * указываем имя робота (User-agent: Yandex, User-agent: Googlebot).

  2. В строке Allow: */uploads мы намеренно разрешаем индексировать ссылки, в которых встречается /uploads. Это правило обязательно, т.к. выше мы запрещаем индексировать ссылки начинающихся с /wp-, а /wp- входит в /wp-content/uploads. Поэтому, чтобы перебить правило Disallow: /wp- нужна строчка Allow: */uploads, ведь по ссылкам типа /wp-content/uploads/... у нас могут лежать картинки, которые должны индексироваться, так же там могут лежать какие-то загруженные файлы, которые незачем скрывать. Allow: может быть "до" или "после" Disallow:.

  3. Остальные строчки запрещают роботам "ходить" по ссылкам, которые начинаются с:

    • Disallow: /cgi-bin - закрывает каталог скриптов на сервере
    • Disallow: /feed - закрывает RSS фид блога
    • Disallow: /trackback - закрывает уведомления
    • Disallow: ?s= или Disallow: *?s= - закрыавет страницы поиска
    • Disallow: */page/ - закрывает все виды пагинации
  4. Правило Sitemap: http://site.ru/sitemap.xml указывает роботу на файл с картой сайта в формате XML. Если у вас на сайте есть такой файл, то пропишите полный путь к нему. Таких файлов может быть несколько, тогда указываем путь к каждому отдельно.

  5. В строке Host: site.ru мы указываем главное зеркало сайта. Если у сайта существуют зеркала (копии сайта на других доменах), то чтобы Яндекс индексировал всех их одинаково, нужно указывать главное зеркало. Директива Host: понимает только Яндекс, Google не понимает! Если сайт работает под https протоколом, то его обязательно нужно указать в Host: Host: https://site.ru

    Из документации Яндекса: «Host — независимая директива и работает в любом месте файла (межсекционная)». Поэтому её ставим наверх или в самый конец файла, через пустую строку.

Это важно: сортировка правил перед обработкой

Yandex и Google обрабатывает директивы Allow и Disallow не по порядку в котором они указаны, а сначала сортирует их от короткого правила к длинному, а затем обрабатывает последнее подходящее правило:

User-agent: *
Allow: */uploads
Disallow: /wp-

будет прочитана как:

User-agent: *
Disallow: /wp-
Allow: */uploads

Таким образом, если проверяется ссылка вида: /wp-content/uploads/file.jpg, правило Disallow: /wp- ссылку запретит, а следующее правило Allow: */uploads её разрешит и ссылка будет доступна для сканирования.

Чтобы быстро понять и применять особенность сортировки, запомните такое правило: «чем длиннее правило в robots.txt, тем больший приоритет оно имеет. Если длина правил одинаковая, то приоритет отдается директиве Allow.»

Вариант 2: стандартный robots.txt для WordPress

Не знаю кто как, а я за первый вариант! Потому что он логичнее — не надо полностью дублировать секцию ради того, чтобы указать директиву Host для Яндекса, которая является межсекционной (понимается роботом в любом месте шаблона, без указания к какому роботу она относится). Что касается нестандартной директивы Allow, то она работает для Яндекса и Гугла и если она не откроет папку uploads для других роботов, которые её не понимают, то в 99% ничего опасного это за собой не повлечет. Я пока не заметил что первый robots работает не так как нужно.

Вышеприведенный код немного не корректный. Спасибо комментатору "robots.txt" за указание на некорректность, правда в чем она заключалась пришлось разбираться самому. И вот к чему я пришел (могу ошибаться):

  1. Некоторые роботы (не Яндекса и Гугла) — не понимают более 2 директив: User-agent: и Disallow:;

  2. Директиву Яндекса Host: нужно использовать после Disallow:, потому что некоторые роботы (не Яндекса и Гугла), могут не понять её и вообще забраковать robots.txt. Cамому же Яндексу, судя по документации, абсолютно все равно где и как использовать Host:, хоть вообще создавай robots.txt с одной только строчкой Host: www.site.ru, для того, чтобы склеить все зеркала сайта;

3. Sitemap: межсекционная директива для Яндекса и Google и видимо для многих других роботов тоже, поэтому её пишем в конце через пустую строку и она будет работать для всех роботов сразу.

На основе этих поправок, корректный код должен выглядеть так:

User-agent: Yandex
Disallow: /wp-admin
Disallow: /wp-includes
Disallow: /wp-content/plugins
Disallow: /wp-json/
Disallow: /wp-login.php
Disallow: /wp-register.php
Disallow: */embed
Disallow: */feed
Disallow: /cgi-bin
Disallow: *?s=
Allow: /wp-admin/admin-ajax.php

Host: site.ru

User-agent: *
Disallow: /wp-admin
Disallow: /wp-includes
Disallow: /wp-content/plugins
Disallow: /wp-json/
Disallow: /wp-login.php
Disallow: /wp-register.php
Disallow: */embed
Disallow: */feed
Disallow: /cgi-bin
Disallow: *?s=
Allow: /wp-admin/admin-ajax.php

Sitemap: http://site.ru/sitemap.xml

Дописываем под себя

Если вам нужно запретить еще какие-либо страницы или группы страниц, можете внизу добавить правило (директиву) Disallow:. Например, нам нужно закрыть от индексации все записи в категории news, тогда перед Sitemap: добавляем правило:

Disallow: /news

Оно запретить роботам ходить по подобным ссылками:
http://site.ru**/news**
http://site.ru**/news**/drugoe-nazvanie/

Если нужно закрыть любые вхождения /news, то пишем:

Disallow: */news

Закроет:
http://site.ru**/news**
http://site.ru**/news**/drugoe-nazvanie/
http://site.ru/category**/news**letter-nazvanie.html

Более подробно изучить директивы robots.txt вы можете на странице помощи Яндекса (но имейте ввиду, что не все правила, которые описаны там, работают для Google).

Crawl-delay - таймаут для сумасшедших роботов

Яндекс

Когда робот Яндекса сканирует сайт как сумасшедший и это создает излишнюю нагрузку на сервер. Робота можно попросить «поубавить обороты».

Для этого нужно использовать директиву Crawl-delay. Она указывает время в секундах, которое робот должен простаивать (ждать) для сканирования каждой следующей страницы сайта.

Для совместимости с роботами, которые плохо следуют стандарту robots.txt, Crawl-delay нужно указывать в группе (в секции User-Agent) сразу после Disallow и Allow

Робот Яндекса понимает дробные значения, например, 0.5 (пол секунды). Это не гарантирует, что поисковый робот будет заходить на ваш сайт каждые полсекунды, но позволяет ускорить обход сайта.

Примеры:

User-agent: Yandex
Disallow: /wp-admin
Disallow: /wp-includes
Crawl-delay: 1.5 # таймаут в 1.5 секунды

User-agent: *
Disallow: /wp-admin
Disallow: /wp-includes
Allow: /wp-*.gif
Crawl-delay: 2 # таймаут в 2 секунды
Google

Робот Google не понимает директиву Crawl-delay. Таймаут его роботам можно указать в панели вебмастера.

Проверка robots.txt и документация

Проверить правильно ли работают прописанные правила можно по следующим ссылкам:

Я спросил у Яндекса...

Задал вопрос в тех. поддержку Яндекса насчет межсекционного использования директив Host и Sitemap:

Вопрос:

Здравствуйте!
Пишу статью насчет robots.txt на своем блоге. Хотелось бы получить ответ на такой вопрос (в документации я не нашел однозначного "да"):

Если мне нужно склеить все зеркала и для этого я использую директиву Host в самом начале фала robots.txt:

  Host: site.ru

  User-agent: *
  Disallow: /asd

Будет ли в данном примере правильно работать Host: site.ru? Будет ли она указывать роботам что site.ru это основное зеркало. Т.е. эту директиву я использую не в секции, а отдельно (в начале файла) без указания к какому User-agent она относится.

Также хотел узнать, обязательно ли директиву Sitemap нужно использовать внутри секции или можно использовать за пределами: например, через пустую строчку, после секции?

  User-agent: Yandex
  Disallow: /asd

  User-agent: *
  Disallow: /asd

  Sitemap: http://site.ru/sitemap.xml

Поймет ли робот в данном примере директиву Sitemap?

Надеюсь получить от вас ответ, который поставит жирную точку в моих сомнениях.

Спасибо!

Ответ:

Здравствуйте!

Директивы Host и Sitemap являются межсекционными, поэтому будут использоваться роботом вне зависимости от места в файле robots.txt, где они указаны.

--
С уважением, Платон Щукин
Служба поддержки Яндекса

Заключение

Важно помнить, что изменения в robots.txt на уже рабочем сайте будут заметны только спустя несколько месяцев (2-3 месяца).

Ходят слухи, что Google иногда может проигнорировать правила в robots.txt и взять страницу в индекс, если сочтет, что страница ну очень уникальная и полезная и она просто обязана быть в индексе. Однако другие слухи опровергают эту гипотезу тем, что неопытные оптимизаторы могут неправильно указать правила в robots.txt и так закрыть нужные страницы от индексации и оставить ненужные. Я больше склоняюсь ко второму предположению...

Статья на эту тему уже была на блоге wp-info.ru, здесь описан альтернативный вариант кода для файла robots.txt.

Настраиваем файл robots.txt для WordPress 178 комментариев
Полезные 18 Вопросы 7 Все
  • Максим cайт: nawimamu.ru

    Для корректного определения главного зеркала сайта рекомендуется задать соответствующую директиву Host в файлах robots.txt всех зеркал сайта. В случае ее отсутствия главное зеркало может быть выбрано автоматически.
    Добавьте директиву Host в файл robots.txt. что не так ?
    http://nawimamu.ru

  • Александр cайт: bloogit.ru

    Спасибо за статью! А какой плагин лучше всего выбрать для правки файла?

    -1
  • алексей @

    Доброго времени суток. Помогите мне пожалуйста. Правльно ли я настроил файл роботс.
    https://chudesnyjdomik.ru/robots.txt

    За ранее благодарен за ответ

  • Alexander

    Перечислять "Allow: что-то" - это бред полнейший. Всего не перечислишь и сама эта директива бессмысленна.

    После указания User-agent:, пишем пустой Disalow: , который сам по себе будет обозначать "запретить ничего", то есть разрешить все. А уже после него, пишем директивы с запрещающими правилами. В итоге имеем, что-то типа следующего:

    User-agent: *
    Disallow:
    Disallow: /wp-admin
    ...
    Host: ...
    Sitemap: ...

    • Kama4659

      Так если вообще ничего не указывать тоже будет - разрешить все... unknw

  • Роман

    Получается, чтобы открыть к примеру категорию news для индексации не нужно указывать Allow: /news - она открыта сама по себе, ее можно только заблокировать для индексации?

    Ответить3 месяца назад #
    • Kama4659

      Allow указан для всех по умолчанию, если ты не закрывал что-то похожее на /news, например Disallow: /new. То и открывать ничего не нужно, потому что и так открыто... А вот если закрывал, то да нужно открыть через Allow: /news.

      Ответить3 месяца назад #
  • Tod cайт: tods-blog.com.ua @

    Если в названии статьи если слово feed, то соотв. правило ее блокирует. Я так понимаю единственный вариант в allow писать названия данных статей? что-то не получается придумать там закономерность.

    Ответить3 месяца назад #
    • Kama4659

      Ты про */feed правило? Это не в названии, а если название начинается с feed. Покажи пример такой ссылки, может там в конце есть / тогда правило нужно изменить на */feed/. Может еще за что-то зацепиться можно. Нужен пример...

      Ответить3 месяца назад #
      • Tod cайт: tods-blog.com.ua @

        В tods-blog.com.ua/robots.txt есть 9 allow с "feed" куда дописал конкретные адреса страниц, т.к. не смог придумать закономерность.

        Ответить3 месяца назад #
        • Kama4659

          У тебя конкретно есть конечный слэш, а значит тебе нужно просто изменить правило */feed на */feed/. А если его не было бы, то нужно изменить на */feed$.

          Остальные привила allow вроде Allow: /tag/feedburner/$ можно уже убрать.

          Потом еще замечание, у тебя секции разбиты переносом строки, по моему так нельзя делать...

          Ответить3 месяца назад #
          • Tod cайт: tods-blog.com.ua @

            Да, точно, со включенным ЧПУ ведь не будет ссылок типа feed=..
            Спасибо за помощь.

            Ответить3 месяца назад #
      • Tod cайт: tods-blog.com.ua @

        Кажется нашел варианты, что-то типа

        Disallow: */feed/$*
        Disallow: */feed$
        Disallow: */feed=*

        но надо тестить

        Ответить3 месяца назад #
      • Tod cайт: tods-blog.com.ua @

        После тестов рабочий код получился такой:

        Disallow: */feed/
        Disallow: */feed$
        Disallow: *feed=
        1
        Ответить3 месяца назад #
  • Влад @

    Автор, помогите пожалуйста. Как закрыть в роботсе страницы с вот такими окончаниями (коммент и цифры)?
    ...nfo.ru/kak-vygodno-kupit-bitkoin/#comment-98

    Ответитьмесяц назад #
  • Алексей cайт: tigrunya.ru @

    Доброго времени суток. Спасибо за статью. Помогите пожалуйста, правильно ли я настроил файл роботс? За ранее благодарен за ответ.
    http://tigrunya.ru/robots.txt

    Ответитьмесяц назад #
  • Иван cайт: www.perevod-pesen.ru

    НЕЛЬЗЯ блокировать в robots.txt файлы темы
    Disallow: /wp-content/themes

    Google тогда не распознает css и может выдать, что все станицы не оптимизированы для мобильных устройств

    1
    Ответитьмесяц назад #
  • Дмитрий cайт: davai-tak.ru

    Доброе время! Помогите пожалуйста! У меня тест на sitemap.txt выдаёт предупреждение "Доступ к URL заблокирован в файле robots.txt." на ВСЕ ссылки в карте. robots простейший:

    User-agent: Yandex
    Disallow: 
    Disallow: /wp-admin
    
    Host: davai-tak.ru
    
    User-agent: *
    Disallow: 
    Disallow: /wp-admin
    
    Sitemap: https://davai-tak.ru/sitemap.txt

    Что не так?

    Ответить27 дней назад #

Здравствуйте, !

Ваш комментарий