Правильный robots.txt для WordPress в 2019 году

Автор Бидюков Денис

Несмотря на громкий заголовок, мой robots.txt не «Священный Грааль», но при этом все его директивы отражают суть движка WordPress и принцип работы основных поисковиков. Пример моего roborts.txt, который я приведу в этой статье, взят не из головы, а выстрадан в прямом смысле. Мне пришлось пройти через многие проблемы, которые всегда приводило к падению трафика из-за недоступности полезных ресурсов или наоборот, доступности некачественных страниц, в результате чего я пришел к этой версии robots.txt.

Что такое robots.txt и какая от него польза

Все мы знаем что roborts.txt нужен для SEO, но в чем именно заключается его работа и благодаря чему он улучшает качество сайта, знают немногие. Именно непонимание природы roborts.txt и его логики ведет к серьезным ошибкам результат которых неправильное индексирование сайта поисковиками.

Какие задачи решает roborts.txt? Да по большому счету задач немного, их по сути две:

  1. Сокрытие от поисковиков малоинформативных страниц.
  2. Экономия краулингового бюджета.

Задачи две, но решаются они одним действием. Закрывая от поисковиков некачественные страницы, мы автоматически экономим краулинговый бюджет. Для чего необходима экономить краулинговый бюджет? Ответ довольно прост, для оперативного индексирования новых страниц на вашем сайте. Давайте рассмотрим это на простом примере:

Как-то мне в руки попался интернет-магазин, у которого было около 800 товаров и несколько десятков статей в блоге плюс кучка технических страниц. В общей сложности полезных страниц на сайте было чуть больше 1000. Предположим вы решили внести изменения на некоторые страницы, несколько товаров удалили, а несколько добавили. Допустим у вас получилось 1043 страницы. Давайте посчитаем сколько времени понадобится роботу того же Яндекса чтобы обойти весь сайт и найти измененные страницы, узнать об удаленных и добавить в индекс новые. При максимальной скорости обхода (30 запросов в секунду) Яндексу потребуется всего 34,8 сек для обхода сайта, а при минимальной (0,6 запроса в секунду) уже 29 минут. Но проблема этого интернет-магазина была в том, что у него был неправильно заполненный robots.txt и в индексе было свыше 7000 страниц при свыше 4 млн загруженных. То есть чтобы выискать нормальные страницы на сайте, ботам поисковиков нужно было обойти свыше 4 миллионов страниц. По времени это займет:

  • 37 часов на максимальной скорости обхода
  • 77,1 суток, то есть больше двух месяцев

Само собой максимальную скорость обхода сможет выдержать далеко не каждый сайт и само собой поисковики стараются использовать низкую скорость обхода. В итоге любое изменение на сайте замечалось поисковиками через продолжительное время, а обилие страниц низкого качества в поиске, ухудшало и качество сайта. Только одной директивой «Disallow: *?*» я закрыл доступ к нескольким миллионам страниц. Спросите откуда миллионы страниц? Из-за фильтров интернет-магазина, движок самописный и не очень грамотный в техническом плане.

Таким образом robots.txt – это инструмент управления индексацией сайта. Настроили грамотно – новые странички будут оперативно залетать в индекс, а отредактированные быстро переиндексироваться. Если напихали директив от балды – прощай позиции, трафик и оперативное обновление индекса.

Почему стандартный robots.txt бесполезен

У WordPress нет стандартного robots.txt, но его создает в частности плагин YoastSEO (за другие не знаю). В этом, автоматически созданном, robots.txt имеется всего две директивы для всех роботов:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/

Удивительно что создатели плагина для SEO-оптимизации не смогли подготовить универсальный robots.txt. Я не понимаю зачем закрывать от индексации эти две директории, если там нечего индексировать. И многие владельцы сайтов почему-то втыкают «Disallow: /wp-admin» без малейшей попытки пораскинуть мозгами и понять что админка редиректит на страницу авторизации если ты не авторизован и индексировать там нечего. Также и «wp-includes» бессмысленно закрывать, поисковики там ничего не найдут полезного для себя поскольку нечего там индексировать.

Наша с вами задача не описать в robots.txt куда можно, а куда нельзя поисковику используя директивы «disallow» и «allow» налево и направо, а исключить из индекса страницы, которых там быть не должно. Для этого вам самим кроме копипаста придется ещё и информацию из кабинетов для веб-мастеров поизучать на предмет ненужных страниц в индексе поисковиков.

Я вам дам совет исходя из своего опыта на базе моего сайта, по-этому скопировав мой пример, дополните его своими директивами, наверняка у вас есть на сайте не совсем стандартные для WrdPress страницы, которые поисковикам нет смысла индексировать.

Кто стучится в дверь ко мне

Прежде чем нафаршировать свой robots.txt директивами, давайте сначала разберемся с тем, кто вообще ползает по нашему сайту. На самом деле роботов, кои топчутся по нашим с вами сайтам, превеликое множество. Среди них есть несколько известных, а ещё больше неизвестных, которым плевать на robots.txt. Давайте разберемся что это за роботы и как с ними быть.

Роботы Яндекса

Обратите внимание на то, что многие вебмастеры добавляют в robots.txt для Яндекса user-agent: Yandex, но мало кто понимает разницу между Yandex  и YandexBot, а разница весьма существенна.

User-agent: YandexBot # будет использоваться только основным индексирующим роботом

User-agent: Yandex # будет использована всеми роботами Яндекса

Какие вообще бывают боты у Яндекса? Их множество, вот некоторые из них:

  • YandexBot — основной индексирующий робот.
  • YandexImages — индексатор Яндекс.Картинок.
  • YandexMedia — робот, индексирующий мультимедийные данные.
  • YandexPagechecker — валидатор микроразметки.
  • YandexDirect — скачивает информацию о контенте сайтов-партнеров Рекламной сети, чтобы уточнить их тематику для подбора релевантной рекламы, особым образом интерпретирует robots.txt.

Полный список роботов Яндекса смотрите на этой странице.

Роботы Google

  • Googlebot – основной индексирующий робот
  • Googlebot-Image – робот индексирующий изображения.
  • Mediapartners-Google – робот отвечающий за размещение рекламы на сайте. Важен для тех, у кого крутится реклама от AdSense. Благодаря этому user-agent вы можете управлять размещение рекламы запрещая или разрешая её на тех или иных страницах.

Полный список роботов Google смотрите на этой странице.

Робот Twitter

Полезный робот, который ходит на наш сайт за расширенной информацией когда кто-либо в твиттере делится ссылкой на наш сайт. Чтобы вместо ссылки появлялся красивый пост, то надо явно в robots.txt разрешить доступ к сайту роботу твиттера.

Директивы robots.txt, параметры и логика работы

Несмотря на свою простоту и элементарность, даже у опытных сеошников порой возникают трудности с составлением параметров для директив. Что там говорить, я сам не исключение и иногда допускаю ошибки при закрытии URL от индексации и потом приходится разгребать последствия.

В нашем распоряжении по сути несколько директив

User-Agent

С этой директивы начинается блок правил, а её значение указывает на то, для какого поисковика предназначается данный набор правил. Например, значение «YandexBot» обозначает что этот блок предназначен исключительно для основного Яндекс бота, а значение директивы «*» говорит что этот блок для всех роботов.

Причем необходимо понимать логику интерпретации директивы «User-agent» ботами Яндекса, если в файле robots.txt присутствует две директивы «User-agent: *» и  «User-agent: Yandex», то блок директив после «User-agent: *» будет проигнорирован ботами Яндекса. По этой причине для основного бота Яндекса я выделяю отдельный блок, второй для всех остальных. Почему именно так, вы поймете ниже, когда я объясню назначение директив.

Disallow и Allow

Собственно основные директивы файла robots.txt. Данные директивы запрещают или разрешают поисковикам индексировать страницу или раздел указанный в значении данной директивы. В качестве параметра этим директивам мы передаем часть URL страниц, которые необходимо запретить индексировать или разрешить к индексации.

Иногда меня спрашивают зачем нужна Allow? Логика вопрошающего очевидна, если с помощью Disallow мы запретили некоторые вещи, то получается все остальное доступно, а значит не запрещено. Но давайте рассмотрим простой пример:

  • Disallow: *?* – запретит к индексации все страницы ссылки на которые содержат «?».

Каковы последствия работы такой директивы? Последствия такой директивы вот такие:

Проверка оптимизации страницы для мобильных устройств

Спросите в чем связь? Ответ не очевиден, но он прост. Вышеуказанной директивой мы запрещаем роботам загружать файлы стилей, ссылка на которые содержит «?ver=5.1.1». А стили темы оформления отвечают за адаптивность дизайна, которая как раз и определяет оптимизацию сайта под мобильные устройства. Тут нас как раз спасает директива Allow:

  • Allow: *.css?ver=*

Таким образом мы вернем доступ роботам к файлам стилей и наш сайт станет снова оптимизированным под мобильные устройства.

Знак «*» заменяет нам один или несколько символов, но его использование не всегда очевидно. Давайте поиграемся с примерами.

  • Disallow: /news

Данная директива запретит к индексации все страницы, ссылки которых начинаются с /news. Например:

  • /news/hello-world
  • /news/finance
  • /news/auto

А вот ссылки такого плана:

  • /blog/news/hello-world

Такая директива уже не закроет. А что будет, если мы добавим вот такую директиву:

  • Disallow: *news*

Тогда мы запретим доступ роботам ко всем ссылкам, коиторые имеют в себе вхождение «news». Например:

  • /news/hwllo-world
  • /its-fake-news

Как видите с директивами нужно быть крайне осторожным в их формулировке.

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

Является ли это важным? Весьма. Чем длиньше параметр директивы, тем больше её приоритет. Допустим у нас с вами в robots.txt есть несколько директив, выстроим их в порядок возрастания и посмотрим на логику робота:

  • Disallow: /
  • Allow: /news
  • Allow: /catalog

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

Одинм из важных моментов является наличие кириллицы в URL, который мы хотим запретить или открыть. Поскольку я категорически не приемлю кириллицу в URL, я не сталкивался с проблемами связанными с кириллицей, но некоторые сайты в принципе не парятся по этому поводу. Допустим на сайте надо скрыть страницу, доступную по ссылке «/каталог»:

  • Disallow: /каталог – не правильно.
  • Disallow: /%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3 – правильно.

Host

Устаревшая директива, которая указывала ботам Яндекса, какое зеркало делать основным. Вот что Яндекс говорит по поводу этой директивы:

Как мы писали ранее, мы отказываемся от директивы Host. Теперь эту директиву можно удалять из robots.txt, но важно, чтобы на всех не главных зеркалах вашего сайта теперь стоял 301-й постраничный редирект. Вебмастерам, которые, по нашим данным, ещё не установили перенаправление, мы отправили соответствующее уведомление.

Источник

Sitemap

Соответственно эта директива указывает путь к файлу sitemap. Эта директива является межсекционной, то есть её достаточно указать всего лишь один раз. Обычено она указывается в самом конце файла robots.txt. Добавление директивы Sitemap в каждую секцию «User-agent» является ошибкой.

Где взять sitemap? За генерацию этой штуки отвечает SEO-плагин, в моем случае это Yoast SEO. Содержимое этого файла зависит от настроек отображения в поисковой выдаче, которые располагаются в одноименном разделе плагина.

Crawl-delay

Указывает поисковому роботу промежуток времени в секундах, который должен пройти с момента окончания загрузки одной страницы и началом загрузки другой. Значением директивы может быть любое число как целое, так и дробное.

На текущий момент по сути бесполезная директива, поскольку роботы Google и Яндекс не отказались от учета директивы Crawl-delay. Таймаут роботам можно указать в панели вебмастера.

Clean-param

Если на Вашем сайте используются параметры, которые не влияют на отображение страницы, то в значении этой директивы Вы можете указать эти параметры. Допустим у Вас на сайте есть каталог, в котором пользователю доступны некоторые возможности, такие как сортировка, допустим ссылка выглядит так:

  • http://site.ru/catalog.php?sort_by=price&sort=desc

Что бы указать роботу на параметры, которые необходимо исключить, то нам потребуется указать директиву с соответствующими параметрами:

  • Clean-param: sort_by /catalog.php # если необходимо исключить только sort_by
  • Clean-param: sort_by&sort /catalog.php # если необходимо исключить  sort_by и  sort

Лично я не пользуюсь подобной директивой, поскольку её логика работы не очевидна. На мой взгляд проще всего страницы с параметрами проще закрыть директивой «Disallow», тем самым явно сэкономив краулинговый бюджет.

Что нужно закрыть от индексации в WordPress

Предлагаю не просто скопировать готовый robots.txt, а попытаемся понять, почему мы закрыли от индексации именно эти страницы.

  • Disallow: /cgi-bin – по сути такая же бесполезная директива как и «Disallow: /wp-admin», но до тех пор, пока не начнете работать с Cloudflare, например ради халявного SSL, тогда на сайте появляется куча ссылок, которые начинаются с «/cgi-bin».
  • Disallow: /xmlrpc.php – закрываем из-за пустой страницы при обращении к этому файлу.
  • Disallow: /author – с точки зрения поиска, это бесполезная страница.
  • Disallow: /wp-json – закрываем ибо возвращает пустую страницу.
  • Disallow: /wp-login.php – закрываем ибо эта страница является малоинформативной и не несет в себе смысловой нагрузки выполняя чисто техническую роль.
  • Disallow: */feed* – RSS-лента, очевидно не несет в себе пользы для поисковиков.
  • Disallow: /wp-content/uploads – закрываем именно эту папку, поскольку она может содержать разного рода документы, например, PDF, DOC и т.д., которые не стоит пускать в индекс. Закрывать «wp-content» полностью чревато проблемами.
  • Disallow: /category – страница категорий, естественно при определенных настройках постоянных ссылок. Категории также являются малоинформативными страницами, если конечно вы не уделили этому внимания и не наполнили каждую категорию полезной информацией, в ином случае лучше прикрыть, поисковикам там делать нечего.
  • Disallow: /attachment – закрываем страницы вложений. Не всегда они бывают доступны по ссылке, но лучше перебдеть. Один раз мне эти странички, высыпавшись в индекс, не хило так посещалку обвалили.
  • Disallow: */page/ – закрываем пагинацию. В сети существует много споров закрывать или не закрывать страницы пагинации, но я закрываю. Некоторые SEOшники говорят что таким образом мы лишаемся некоторых внутренних факторов в виде анкоров во внутренних ссылках. Но я считаю эти страницы малоинформативными, а внутренние факторы не такими важными. В моем случае пользы от прикрытия пагинации больше чем от открытия, при 100+ страницах в индексе мой сайт посещает почти 2 000 человек в сутки и этот показатель растет.

Ну вот по сути это основные моменты, которые стоит прикрыть от поисковых роботов на сайте с CMS WordPress.

Мой вариант robots.txt

#Разрешаем роботу Яндекса, который индексирует изображения, доступ к папке с вложениями.
User-Agent: YandexImages
Allow: /wp-content/uploads

#Делаем тоже самое для гугловского бота, которые индексирует изображения
User-Agent: Googlebot-Image
Allow: /wp-content/uploads

#Говорим рекламе что сайт весь в её распоряжении
User-agent: Mediapartners-Google
Allow: /

#Открываем доступ твиттеру
User-agent: Twitterbot
Allow: /

#Поскольку Яндекс проигнорирует секцию с User-agent: *, то придется перечислить все для него
User-Agent: YandexBot
Disallow: /cgi-bin
Disallow: /xmlrpc.php
Disallow: /author
Disallow: /blog
Disallow: /wp-json
Disallow: /wp-login.php
Disallow: */feed*
Allow: /feed/turbo/ #открываем доступ к RSS для турбостраниц ибо чуть выше мы запретили к ним доступ.
Disallow: /wp-content/uploads
Disallow: /category
Disallow: /attachment
Disallow: */page/
Disallow: *?*
Disallow: */amp #закрываем доступ к AMP-страницам
Allow: *.css?ver=*

User-Agent: *
Disallow: /cgi-bin
Disallow: /xmlrpc.php
Disallow: /author
Disallow: *readme.txt
Disallow: /blog
Disallow: /wp-json
Disallow: /wp-login.php
Disallow: */feed*
Disallow: /wp-content/uploads
Disallow: /category
Disallow: /attachment
Disallow: */page/
Disallow: *?*
Allow: *?ver=*

Sitemap: https://dampi.ru/sitemap_index.xml

Некоторые директивы я прокомментировал, которые не описал в главе выше.

Добавление robots.txt в WordPress

По сути в случае с сайтом на WordPress существует три способа редактирования и соответственно загрузки robots.txt на наш сайт, но рассмотрю я только два, характерных именно для WordPress, поскольку третий – это загрузка файла по FTP и этот способ универсален. Давайте рассмотрим эти два способа.

Способ первый: с помощью специального плагина

Не надо качать FTP-киент, лезть на сервер, создавать текстовый файл, а потом каждый раз из-за каждой мелочи снова и снова соваться туда. Есть вполне себе изящное решение в виде простого плагина, который создает «виртуальный» robots.txt.

С установкой разберетесь сами, там ничего сложного. После установки и активации плагина необходимо пройти на страницу с настройками этого плагина

Настройки плагина Virtual robots.txt

Страница настроек предельно проста, там всего лишь текстовое поле, куда надо поместить наши директивы и один чекбокс, отметив который мы указываем плагину что необходимо подтереть свои настроки при деактивации.

Стандартные настройки Virtual robots.txt

Как видите ничего сверх естественного. Подтираем дефолтный текст и вбиваем наши директивы.

Способ второй: с помощью SEO-плагинов

Поскольку я пользуюсь плагином Yoast SEO, то расскажу на его примере. Для создания и редактирования файла robots.txt необходимо пройти в раздел «Инструменты» плагина:

Инструменты редактирования robots.txt

Нас интересует «Редактор файлов», переходим туда и уже там видим следующее:

Редактирование robots.txt

У меня файл robots.txt физически отсутствует ибо он создается плагином «на лету», иначе тут было бы видно его содержимое. Вам остается выбрать подходящий способ редактирования, скопировать директивы нашего robots.txt и сохранить. Дальше вам потребуется отслеживать поведение вашего сайта в поиске.

Проверка robots.txt в панели вебмастера

Для проверки правильности robots.txt у Яндекс и Google предусмотрены специальные инструменты. Использование данных инструментов довольно элементарный процесс. Давайте рассмотрим оба варианта.

Search Console от Google

В соответствующем разделе мы видим содержимое нашего robots.txt

Проверка robots.txt в Google Search Console

Кроме содержимого robots.txt мы видим сообщения с ошибками и предупреждениями. В моем случае их счетчики по нолям. В поле ниже мы можем указать URL, который хотим проверить. Если введенный нами URL запрещен в файле robots.txt, то вы увидите сообщение справа и выделенную директиву, которая запрещает индексирование данного URL. Вполне удобно.

Яндекс Вебмастер

Проходим в «Инструменты»->«Анализ robots.txt» и видим вот такую картину.

Проверка robots.txt в Яндекс.Вебмастере

Эта страница устроена чуть сложнее. Страница разделена на три части, в первой все содержимое robots.txt, вторая часть показывает какие директивы использует основной робот, а третья часть отвечает за проверку URL. Обратите внимание на то, что тут поле позволяет проверять URL пачками, что гораздо удобнее чем в инструменте проверки от Google.

Как добавить robots.txt в Яндекс и Google

В отличии от sitemap, адрес которого необходимо указывать в robots.txt или в панели вебмастера, robots.txt не нужно никуда загружать. Его наличие поисковые роботы проверяют каждый раз обращаясь к сайту. По этой причине для «загрузки robots.txt» в Яндекс и Google достаточно просто создать его на своем сайте.

Имя этого файла и его расположение является жестким требованием и соответственно все знают что robots.txt лежит в корне сайта. По этому кроме его создания и заполнения никаких действий больше не требуется, разве что проверить его на ошибки, с помощью описанных выше инструментов.