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

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

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

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

robots

Закрыть страницу от робота можно также через мета-тег robots или в HTTP-заголовке ответаX-Robots-Tag. Преимущество файла robots.txt в том, что робот при посещении сайта сначала загружает все правила из файла robots.txt и опираясь на них ходит по страницам сайта исключая из посещения страницы, URL которых не подходит под правила.

Таким образом, если мы закрыли страницу в robots.txt, робот просто пропустит её не сделав никаких запросов на сервер. А если мы закрыли страницу в заголовке X-Robots-Tag или мета-теге, роботу нужно сначала сделать запрос к серверу, получить ответ, посмотреть что находится в заголовке или метатеге и только потом принять решения индексировать страницу или нет.

Таким образом, файл robots.txt объясняет роботу какие страницы (URL) сайта нужно просто пропускать не делая никаких запросов. Это экономит время обхода роботом всех страниц сайта и экономит ресурсы сервера.

Рассмотрим на примере. Допустим, у нас есть сайт на котором всего 10 000 страниц (не 404 URL). Из них полезных страниц с уникальным контентом всего 3000, остальное это архивы по датам, авторам, страницы пагинации и другие страницы контент на которых дублируется (например фильтры с GET параметрами). Допустим, мы хотим закрыть от индексации эти 7000 неуникальных страниц:

  1. если сделать это через robots.txt, то роботу для индексации всего сайта нужно будет посетить всего 3000 страниц остальное будет отсеяно сразу же на уровне URL.
  2. если сделать это через мета-тег robots, то роботу для индексации всего сайта нужно будет посетить все 10 000 страниц сайта. Потому что нужно получить контент страницы, чтобы узнать что находится в мета-теге (в котором указано что страницу индексировать не нужно).

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

меню

Оптимальный код robots.txt для WordPress

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

Версия 1 (не строгая)

Эта версия, пожалуй, более предпочтительна по сравнению со второй, потому что тут нет опасности запретить индексацию каких либо файлов внутри ядра WordPress или папки wp-content.

User-agent: *                  # Создаем секцию правил для роботов. * значит для всех
							   # роботов. Чтобы указать секцию правил для отдельного
							   # робота, вместо * укажите его имя: GoogleBot, Yandex.
Disallow: /cgi-bin             # Стандартная папка на хостинге.
Disallow: /wp-admin/           # Закрываем админку.
Disallow: /?                   # Все параметры запроса на главной.
Disallow: *?s=                 # Поиск.
Disallow: *&s=                 # Поиск.
Disallow: /search              # Поиск.
Disallow: /author/             # Архив автора.
Disallow: */embed              # Все встраивания.
Disallow: */page/              # Все виды пагинации.
Disallow: */xmlrpc.php         # Файл WordPress API
Disallow: *utm*=               # Ссылки с utm-метками
Disallow: *openstat=           # Ссылки с метками openstat

# Одина или несколько ссылок на карту сайта (файл Sitemap). Это независимая
# директива и дублировать её для каждого User-agent не нужно. Так например
# Google XML Sitemap создает 2 карты сайта:
Sitemap: http://example.com/sitemap.xml
Sitemap: http://example.com/sitemap.xml.gz

# Версия кода: 2.0
# Не забудьте поменять `example.com` на ваш сайт.
меню

Версия 2 (строгая)

В этом варианте мы контролируем все доступы. Сначала глобально запрещаем доступ к почти всему от WP (Disallow: /wp-), а затем открываем, там где нужно.

Этот код я пожалуй не рекомендовал бы, потому что тут закрывается префикc wp- и в будущем, когда WP введет еще чего-нибудь, это что-нибудь может стать недоступно для роботов. Так например получилось с нововведенной картой сайта.

User-agent: *                  # Создаем секцию правил для роботов. * значит для всех
							   # роботов. Чтобы указать секцию правил для отдельного
							   # робота, вместо * укажите его имя: GoogleBot, Yandex.
Disallow: /cgi-bin             # Стандартная папка на хостинге.
Disallow: /wp-admin/           # Закрываем админку.
Disallow: /wp/                 # Каталог куда установлено ядро WP. Обычно ядро
							   # лежит рядом с wp-content и правило можно удалить.
Disallow: /?                   # Все параметры запроса на главной.
Disallow: *?s=                 # Поиск.
Disallow: *&s=                 # Поиск.
Disallow: /search              # Поиск.
Disallow: /author/             # Архив автора.
Disallow: */embed              # Все встраивания.
Disallow: */page/              # Все виды пагинации.
Disallow: */xmlrpc.php         # Файл WordPress API
Disallow: *utm*=               # Ссылки с utm-метками
Disallow: *openstat=           # Ссылки с метками openstat
Disallow: /wp-                 # Все связанное с WP - это: /wp-content /wp-admin
							   # /wp-includes /wp-json wp-login.php wp-register.php.
Allow:    */wp-*/*ajax*.php    # AJAX запросы: */admin-ajax.php */front-ajaxs.php
Allow:    */wp-sitemap         # карта сайта (главная и вложенные)
Allow:    */uploads            # открываем uploads
Allow:    */wp-*/*.js          # внутри /wp- (/*/ - для приоритета)
Allow:    */wp-*/*.css         # внутри /wp- (/*/ - для приоритета)
Allow:    */wp-*/*.png         # картинки в плагинах, cache папке и т.д.
Allow:    */wp-*/*.jpg         # картинки в плагинах, cache папке и т.д.
Allow:    */wp-*/*.jpeg        # картинки в плагинах, cache папке и т.д.
Allow:    */wp-*/*.gif         # картинки в плагинах, cache папке и т.д.
Allow:    */wp-*/*.svg         # картинки в плагинах, cache папке и т.д.
Allow:    */wp-*/*.webp        # файлы в плагинах, cache папке и т.д.
Allow:    */wp-*/*.pdf         # файлы в плагинах, cache папке и т.д.
							   # Секция правил закончена

# Одина или несколько ссылок на карту сайта (файл Sitemap). Это независимая
# директива и дублировать её для каждого User-agent не нужно. Так например
# Google XML Sitemap создает 2 карты сайта:
Sitemap: http://example.com/wp-sitemap.xml
Sitemap: http://example.com/wp-sitemap.xml.gz

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

В правилах Allow: вы можете видеть дополнительные, казалось бы ненужные, знаки * - они нужны для увеличения приоритета правила. Зачем это нужно смотрите в сортировке правил.

меню

Директивы (разбор кода)

User-agent:

Определяет для какого робота будет работать блок правил, который написан после этой строки. Тут возможны два варианта:

  1. User-agent: * — указывает, что правила после этой строки будут работать для всех поисковых роботов.

  2. User-agent: ИМЯ_РОБОТА — указывает конкретного робота, для которого будет работать блок правил. Например: User-agent: Yandex, User-agent: Googlebot.

Возможные роботы (боты) Яндекса:

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

Возможные роботы (боты) Google:

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

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

  • Disallow: /cgi-bin — закрывает каталог скриптов на сервере.
  • Disallow: *?s= — закрывает страницы поиска.
  • Disallow: */page/ — закрывает все виды пагинации.

Пример добавления нового правила. Допустим нам нужно закрыть от индексации все записи в категории news. Для этого добавляем правило:

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.

ВАЖНО о кириллице: роботы не понимают кириллицу, её им нужно предоставлять в кодированном виде. Например:

Disallow: /каталог                                    # неправильно.
Disallow: /%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3 # правильно.
Allow:
В строке Allow: */uploads мы намеренно разрешаем индексировать страницы, в которых встречается /uploads. Это правило обязательно, т.к. выше мы запрещаем индексировать страницы начинающихся с /wp-, а /wp- входит в /wp-content/uploads. Поэтому, чтобы перебить правило Disallow: /wp- нужна строчка Allow: */uploads, ведь по ссылкам типа /wp-content/uploads/... у нас могут лежать картинки, которые должны индексироваться, так же там могут лежать какие-то загруженные файлы, которые незачем скрывать. Allow: может быть "до" или "после" Disallow:.
Sitemap:
Правило Sitemap: http://example.com/sitemap.xml указывает роботу на файл с картой сайта в формате XML. Если у вас на сайте есть такой файл, то пропишите полный путь к нему. Таких файлов может быть несколько, тогда указываем путь к каждому отдельно.
меню

ВАЖНО: Сортировка правил

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.»

меню

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

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

меню

Изменение robots.txt в WordPress

В WordPress запрос на страницу /robots.txt обрабатывается отдельно и для него «налету» через PHP создается контент файла robots.txt. Поэтому не рекомендуется физически создавать файл robots.txt в корне сайта! Потому что при таком подходе никакой плагин или код не сможет нормально изменить этот файл, а вот динамическое создание контента для страницы /robots.txt позволит гибко его изменять.

Изменить содержание robots.txt можно через:

Рассмотрим как использовать оба хука.

меню

robots_txt

По умолчанию WP 5.5 создает следующий контент для страницы /robots.txt:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Sitemap: http://example.com/wp-sitemap.xml

Смотрите do_robots() — как работает динамическое создание файла robots.txt.

Этот хук позволяет дополнить уже имеющиеся данные файла robots.txt. Код можно вставить в файл темы functions.php.

// Дополним базовый robots.txt
// -1 before wp-sitemap.xml
add_action( 'robots_txt', 'wp_kama_robots_txt_append', -1 );

function wp_kama_robots_txt_append( $output ){

	$str = '
	Disallow: /cgi-bin             # Стандартная папка на хостинге.
	Disallow: /?                   # Все параметры запроса на главной.
	Disallow: *?s=                 # Поиск.
	Disallow: *&s=                 # Поиск.
	Disallow: /search              # Поиск.
	Disallow: /author/             # Архив автора.
	Disallow: */embed              # Все встраивания.
	Disallow: */page/              # Все виды пагинации.
	Disallow: */xmlrpc.php         # Файл WordPress API
	Disallow: *utm*=               # Ссылки с utm-метками
	Disallow: *openstat=           # Ссылки с метками openstat
	';

	$str = trim( $str );
	$str = preg_replace( '/^[\t ]+(?!#)/mU', '', $str );
	$output .= "$str\n";

	return $output;
}

В результате перейдем на страницу /robots.txt и видим:

User-agent: *
Disallow: /wp/wp-admin/
Allow: /wp/wp-admin/admin-ajax.php
Disallow: /cgi-bin             # Стандартная папка на хостинге.
Disallow: /?                   # Все параметры запроса на главной.
Disallow: *?s=                 # Поиск.
Disallow: *&s=                 # Поиск.
Disallow: /search              # Поиск.
Disallow: /author/             # Архив автора.
Disallow: */embed              # Все встраивания.
Disallow: */page/              # Все виды пагинации.
Disallow: */xmlrpc.php         # Файл WordPress API
Disallow: *utm*=               # Ссылки с utm-метками
Disallow: *openstat=           # Ссылки с метками openstat

Sitemap: http://wptest.ru/wp-sitemap.xml

Обратите внимание, что мы дополнили родные данные ВП, а не заменили их.

меню

do_robotstxt

Этот хук позволяет полностью заменить контент страницы /robots.txt.

add_action( 'do_robotstxt', 'wp_kama_robots_txt' );

function wp_kama_robots_txt(){

	$lines = [
		'User-agent: *',
		'Disallow: /wp-admin/',
		'Disallow: /wp-includes/',
		'',
	];

	echo implode( "\r\n", $lines );

	die; // обрываем работу PHP
}

Теперь, пройдя по ссылке http://site.com/robots.txt увидим:

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

Рекомендации

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

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

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

Ошибочные рекомендации

  • Прописывание Sitemap после каждого User-agent
    Это делать не нужно. Один sitemap должен быть указан один раз в любом месте файла robots.txt.

  • Закрыть папки wp-content, wp-includes, cache, plugins, themes
    Это устаревшие требования. Однако подобные советы я находил даже в статье с пафосным названием «Самые правильный robots для WordPress 2018»! Для Яндекса и Google лучше будет их вообще не закрывать. Или закрывать «по умному», как это описано выше.

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

  • Прописать Crawl-Delay
    Модное правило. Однако его нужно указывать только тогда, когда действительно есть необходимость ограничить посещение роботами вашего сайта. Если сайт небольшой и посещения не создают значительной нагрузки на сервер, то ограничивать время «чтобы было» будет не самой разумной затеей.

  • Ляпы
    Некоторые правила я могу отнести только к категории «блогер не подумал». Например: Disallow: /20 — по такому правилу не только закроете все архивы, но и заодно все статьи о 20 способах или 200 советах, как сделать мир лучше smile
меню

Спорные рекомендации

  • Закрывать от индексации страницы пагинации /page/
    Это делать не нужно. Для таких страниц настраивается тег rel="canonical", таким образом, такие страницы тоже посещаются роботом и на них учитываются расположенные товары/статьи, а также учитывается внутренняя ссылочная масса.

  • Комментарии
    Некоторые ребята советуют закрывать от индексирования комментарии Disallow: /comments и Disallow: */comment-*.

  • Открыть папку uploads только для Googlebot-Image и YandexImages

    User-agent: Googlebot-Image
    Allow: /wp-content/uploads/
    User-agent: YandexImages
    Allow: /wp-content/uploads/

    Совет достаточно сомнительный, т.к. для ранжирования страницы необходима информация о том, какие изображения и файлы на ней размещены.

Источник по рекомендациям.

меню

Нестандартные Директивы

Clean-param

Google не понимаю эту директиву. Указывает роботу, что URL страницы содержит GET-параметры, которые не нужно учитывать при индексировании. Такими параметрами могут быть идентификаторы сессий, пользователей, метки UTM, т.е. все то что не влияет на содержимое страницы.

Заполняйте директиву Clean-param максимально полно и поддерживайте ее актуальность. Новый параметр, не влияющий на контент страницы, может привести к появлению страниц-дублей, которые не должны попасть в поиск. Из-за большого количества таких страниц робот медленнее обходит сайт. А значит, важные изменения дольше не попадут в результаты поиска. Робот Яндекса, используя эту директиву, не будет многократно перезагружать дублирующуюся информацию. Таким образом, увеличится эффективность обхода вашего сайта, снизится нагрузка на сервер.

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

example.com/dir/bookname?ref=site_1
example.com/dir/bookname?ref=site_2
example.com/dir/bookname?ref=site_3

Если указать директиву следующим образом:

User-agent: Yandex
Clean-param: ref /dir/bookname

то робот Яндекса сведет все адреса страницы к одному:

example.com/dir/bookname

Пример очистки нескольких параметров сразу: ref и sort:

Clean-param: ref&sort /dir/bookname

Clean-Param является межсекционной, поэтому может быть указана в любом месте файла robots.txt. Если директив указано несколько, все они будут учтены роботом.

меню

Crawl-delay

Google не понимаю эту директиву. Таймаут для сумасшедших роботов (с 2018 года не учитывается)

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 секунды

Яндекс и Crawl-delay

ВАЖНО! Яндекс перестал учитывать Crawl-delay:

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

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

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

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

Google и Crawl-delay

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

меню

Host (устарела)

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

Подробнее читайте на сайте Яндекса.

Заключение

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

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

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

191 коммент
Полезные 25 Вопросы 8 Все
    Войти