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

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

Строгий контроль индексирования

Пофигистическое отношение по-началу, когда только начинаешь заниматься созданием сайтов, со временем сменяется навязчивым желанием контролировать все.

Не буду утомлять буквами. Содержание robots.txt для максимального контроля индексации поисковыми системами.

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

Стоит оговориться, в коде закрывается префикc wp-, из чего следует, что вы должны внимательно контролировать обновления WordPress во избежания закрытия от индексирования чего-то важного. Например, по-умолчанию карта сайта (sitemap) расположена по адресу http://example.ru/wp-sitemap.xml. И если вы напрямую не разрешите индексирование, то роботы пройдут мимо.

Полуавтоматическое индексирование

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

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

Дополнительно

Это для тех, кто хочет углубить свои познания относительно формирования robots.txt.

Cортировка правил

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

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

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

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

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

Disallow: /news

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

Disallow: */news

Robots.txt через хуки WP

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

Изменить содержание robots.txt можно через два хука: robots_txt и do_robotstxt. Рассмотрим оба из них. Код приведенный ниже можно вставить в файл темы functions.php.

Robots_txt позволяет дополнить уже имеющиеся данные файла robots.txt.

// Дополним базовый robots.txt
// -1 before wp-sitemap.xml
add_action( 'robots_txt', 'wp_kama_robots_txt', -1 );
function wp_kama_robots_txt( $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;
}

Do_robotstxt позволяет полностью заменить файл robots.txt.

add_action( 'do_robotstxt', 'my_robotstxt' );
function my_robotstxt(){

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

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

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

На этом все.

По материалам: https://wp-kama.ru/id_803/pishem-pravilnyiy-robotstxt-dlya-wordpress.html

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *