WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Настраиваем файл 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: */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 папке и т.д.
Allow: /wp-*.svg            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.pdf            # файлы в плагинах, cache папке и т.д.
#Disallow: /wp/             # когда WP установлен в подкаталог wp

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

# Версия кода: 1.1
# Не забудьте поменять `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://example.com/sitemap.xml указывает роботу на файл с картой сайта в формате XML. Если у вас на сайте есть такой файл, то пропишите полный путь к нему. Таких файлов может быть несколько, тогда указываем путь к каждому отдельно.

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

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

Не рекомендуется исключать фиды: Disallow: */feed

Потому что наличие открытых фидов требуется например для Яндекс Дзен, когда нужно подключить сайт к каналу (спасибо комментатору «Цифровой»). Возможно открытые фиды нужны где-то еще.

В тоже время, фиды имеют свой формат в заголовках ответа, благодаря которому поисковики понимают что это не HTML страница, а фид и, очевидно, обрабатывают его как-то иначе.

Директива Host для Яндекса больше не нужна

Яндекс полностью отказывается от директивы Host, её заменил 301 редирект. Host можно смело удалять из robots.txt. Однако важно, чтобы на всех зеркалах сайта стоял 301 редирект на главный сайт (главное зеркало).

меню

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

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: */page/
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: */page/
Disallow: /cgi-bin
Disallow: *?s=
Allow: /wp-admin/admin-ajax.php

Sitemap: http://example.com/sitemap.xml
меню

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

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

Disallow: /news

Оно запретить роботам ходить по подобным ссылками:

  • http://example.com/news
  • http://example.com/news/drugoe-nazvanie/

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

Disallow: */news

Закроет:

  • http://example.com/news
  • http://example.com/my/news/drugoe-nazvanie/
  • http://example.com/category/newsletter-nazvanie.html

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

меню

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

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

меню

Crawl-delay - таймаут для сумасшедших роботов (с 2018 года не учитывается)

Яндекс

Теперь и Яндекс перестал учитывать Crawl-delay:

Проанализировав письма за последние два года в нашу поддержку по вопросам индексирования, мы выяснили, что одной из основных причин медленного скачивания документов является неправильно настроенная директива Crawl-delay в robots.txt […] Для того чтобы владельцам сайтов не пришлось больше об этом беспокоиться и чтобы все действительно нужные страницы сайтов появлялись и обновлялись в поиске быстро, мы решили отказаться от учёта директивы 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. Таймаут его роботам можно указать в панели вебмастера.

меню

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

Задал вопрос в тех. поддержку Яндекса насчет межсекционного использования директив 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://example.com/sitemap.xml

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

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

Спасибо!

Ответ:

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

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

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

меню

Заключение

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

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

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

На сервисе avi1.ru Вы можете уже сейчас приобрести продвижение SMM более чем в 7 самых популярных социальных сетях. При этом обратите внимание на достаточно низкую стоимость всех услуг сайта.

177 комментов
Полезные 23 Вопросы 5 Все
  • Здравствуйте. Каким образом в WP создаётся robots.txt?

    Ответить2.5 года назад #
    • Kama7482

      Он руками создается: в корне сайта создайте файл robots.txt. Еще можно динамически создать через читайте do_robots()

      Ответить2.5 года назад #
  • Renton88 cайт: oldband.ru

    Здравствуйте! Создал у себя страницу http://site.ru/feedback/, а она закрыта для индексации директивой

    Disallow: */feed

    Это решается только через

    Allow: /feedback/

    Или есть более правильные решения?

    Ответить2.5 года назад #
    • Kama7482

      Вроде нет, норм решение вроде. unknw

      Ответить2.5 года назад #
      • Renton88 cайт: oldband.ru

        Спасибо за ответ.
        Просто подумалось, что если, чисто теоретически, возникнет необходимость создать много страниц начинающихся на "feed..." - будет проблемы.

        Раз уж тут пишу, скажу вам здесь спасибо за Ваш ресурс. Лучший справочник по wp в рунете у Вас, очень много почерпнул здесь.

        Мерси.

        Ответить2.5 года назад #
  • Руслан

    Ребята, не закрывайте для гугл бота /wp-content/themes и /wp-content/themes он перестает видеть адаптивность страниц из-за блокировки файлов CSS. проверьте сами в серчь-консолях, хотя яндекс по прежнему видит их адаптивными

    1
    Ответить2.5 года назад #
    • Renton88 cайт: oldband.ru

      Allow: /*/*.css # внутри /wp- (/*/ - для приоритета)

      Вот же. Сёрчт консоль говорит, что все ок.

      Ответить2.5 года назад #
      • Kama7482

        В первом варианте кода нет правила /wp-content/themes ... Поэтому Allow: /*/*.css работает...

        В этом случае нужно такое уже: Allow: /wp-content/themes*.css

        Ответить2.5 года назад #
  • Саша

    Нельзя блокировать css и js! Гугл это чётко сказал так же как Яндекс. А вы советуете блокировать /wp-includes/ /wp-content/ где и лежат эти файлы. Поисковики сейчас учитывают вашу "красоту" сайта для ранжирования. Для этого есть в "вебмастерах" Яндекса и Гугла посмотреть как гуглбот или яндексбот.

    2
    Ответить2.4 года назад #
  • Алексей


    почему Гугль выделяет эту строку?

    Ответить2.4 года назад #
    • Kama7482

      Ошибок 0, предупреждений 0. Какой URL проверяли при этом? Проверяемый URL запрещен указанным правилом в robots.txt. Гугль показывает что за правило сработало... В данном случае на запрет.

      1
      Ответить2.4 года назад #
  • Тимур, а как быть с поддоменами?

    Сайт сделан как sub1.site.ru sub2.site.ru.
    При наборе site.ru перенаправление на sub1.site.ru (т.е. sub1 как основной).

    В папке каждого поддомена в robots.txt прописывать в качестве Host: http://sub1.site.ru (для sub1), http://sub2.site.ru (для sub2) ?

    Нужно ли где-то указывать Host как http://site.ru ?

    Ответить2.1 года назад #
    • Kama7482

      Думаю что нет site.ru же не работает, а перекидывает на sub1 зачем его где-то указывать? unknw

      Ответить2.1 года назад #
  • Роман

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

    Ответить1.8 года назад #
    • Kama7482

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

      Ответить1.8 года назад #
  • Tod cайт: tods-blog.com.ua

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

    Ответить1.8 года назад #
    • Kama7482

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

      Ответить1.8 года назад #
      • Tod cайт: tods-blog.com.ua

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

        Ответить1.8 года назад #
        • Kama7482

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

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

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

          Ответить1.8 года назад #
          • Tod cайт: tods-blog.com.ua

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

            Ответить1.8 года назад #
  • Иван cайт: www.perevod-pesen.ru

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

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

    1
    Ответить1.6 года назад #
    • Kama7482

      В первом варианте все это учтено... Ну и, директория /wp-content/themes вроде бы нигде не блокируется, откуда ты это взял?

      Ответить1.4 года назад #
    • newbie33 cайт: yumchief.com

      Можно блокировать файлы темы, но для гугл бота нужно открывать все css и js файлы

      Ответить1.2 года назад #
  • Дмитрий 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

    Что не так?

    Ответить1.5 года назад #
Здравствуйте, !     Войти . Зарегистрироваться