/ Wordpress / Robots.txt для мультисайта

Robots.txt для мультисайта

26.09.2025

100

т.к. Мультисайт — это единая директория с сайтом, то возникает вопрос — как сделать robots.txt для поддоменов.

Multisite Robots.txt Manager

Решением является плагин Multisite Robots.txt Manager (300+), он правда не обновлялся более 2-х лет, но работает как надо. В консоли каждого поддомена появляется настройка в которую мы прописываем содержимое файла robots.txt, в т.ч. и для основного. При этом физически файла robots.txt в основной директории сайта быть не должно.

Также в настройках указывается путь к sitemap.

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

Multisite Robots.txt Manager стал выдавать множество предупреждений при каждой загрузке. т.е. код уже устаревает.

Multisite Robots.txt Manager пропал из репозитория. Вместо него можно использовать хороший плагин Virtual Robots.txt.

Создание robots.txt функцией

Универсальная функция для мультисети, с отдельным выводом для основного сайта:

// Генерация robots.txt для мультисети
add_filter('robots_txt', 'custom_robots_txt_for_multisite', 10, 2);

function custom_robots_txt_for_multisite($output, $public) {
    if (!is_multisite()) {
        return $output; // Если не multisite — вернуть стандарт
    }

    $site_id = get_current_blog_id();
	$site_details = get_blog_details($site_id);
	$domain = $site_details->domain;

	// Общие правила
	$output = "User-agent: *\n";
	$output .= "Disallow: /cgi-bin\n";
	$output .= "Disallow: /wp-admin\n";
	$output .= "Disallow: /wp-includes\n";
	$output .= "Disallow: /wp-content/plugins\n";
	$output .= "Disallow: /wp-content/cache\n";
	$output .= "Disallow: /wp-content/themes\n";
	$output .= "Disallow: /trackback\n";
	$output .= "Disallow: */trackback\n";
	$output .= "Disallow: */*/trackback\n";
	$output .= "Disallow: */*/feed/*/\n";
	$output .= "Disallow: */feed\n";
	$output .= "Disallow: /*?*\n";
	$output .= "Disallow: /tag\n";
	$output .= "Disallow: */embed*\n";
	$output .= "Disallow: */wp-json*\n";
	$output .= "Disallow: /slide/*\n";
	$output .= "Disallow: /label/*\n";
	$output .= "Disallow: /offers/*\n";
	$output .= "Disallow: /type/*\n";
	$output .= "Disallow: /author/*\n";
	$output .= "Disallow: */page/*\n";
	$output .= "Disallow: */attachment/*\n\n";

    if ($site_id == 1) {
        // Правила для главного сайта
	$output .= "Disallow: *.jpg\n";
	$output .= "Disallow: *.png\n\n";
        $output .= "Host: https://$domain\n";
        $output .= "Sitemap: https://$domain/sitemap_index.xml\n";
    } else {
        // Правила для всех остальных сайтов
        $output .= "Host: https://$domain\n";
        $output .= "Sitemap: https://$domain/sitemap_index.xml\n";
    }

    return $output;
}

Отключить формирование robots.txt Yoast SEO

Если на сайте используется плагин Yoast SEO то он будет формировать свои строки в robots.txt. Чтобы это полностью исключить нашёл вот такую функцию:

// Отключить генерацию robots.txt YOAST
function wpwc_fix_yoast_seo_robots_txt() {

	global $wp_filter;

	if ( isset( $wp_filter['robots_txt']->callbacks ) && is_array( $wp_filter['robots_txt']->callbacks ) ) {

		foreach ( $wp_filter['robots_txt']->callbacks as $callback_priority => $callback ) {
			foreach ( $callback as $function_key => $function ) {

				if ( 'filter_robots' === $function['function'][1] ) {
					unset( $wp_filter['robots_txt']->callbacks[ $callback_priority ][ $function_key ] );
				}
			}
		}
	}
}

add_action( 'wp_loaded', 'wpwc_fix_yoast_seo_robots_txt' );
[site-socialshare]
  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Robots.txt для мультисайта
Скидка за первый заказ
Рекомендации для васСкидка за первый заказOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.