wphow.ru wordpress WPHow

Как создать уникальный файл robots.txt в WordPress с поддержкой разных уровней запретов

Файл robots.txt — это мощный инструмент для управления индексацией вашего сайта поисковыми системами. В WordPress этот файл часто создаётся автоматически или через плагин, но стандартные решения не всегда позволяют гибко настраивать правила для разных разделов сайта, особенно если требуется использовать разные уровни запретов для различных пользовательских ролей или условий.

Почему важно создавать уникальный файл robots.txt в WordPress

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

Создание уникального физического файла robots.txt позволит:

  • Добавлять сложные правила и директивы, включая Sitemap и Crawl-delay.
  • Настраивать разные уровни запретов для разных разделов сайта.
  • Интегрировать динамические данные, например, ограничения для страниц с конкретными мета-данными.

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

Создание кастомного файла robots.txt с поддержкой динамических правил

Шаг 1. Отключаем виртуальный robots.txt WordPress

По умолчанию WordPress отдаёт виртуальный robots.txt через endpoint robots_txt. Чтобы создать свой файл, нужно отключить этот endpoint.

add_filter('do_robots', '__return_false');

Этот фильтр запретит WordPress отдавать виртуальный файл и позволит нам создавать физический файл или отдавать его программно.

Шаг 2. Создаём обработчик для выдачи кастомного robots.txt

Далее добавим в functions.php темы или в отдельный плагин код для генерации содержимого robots.txt с динамическими правилами.

function wphow_generate_robots_txt() {
    header('Content-Type: text/plain; charset=utf-8');

    // Основные правила
    echo "User-agent: *\n";
    echo "Disallow: /wp-admin/\n";
    echo "Disallow: /wp-login.php\n";

    // Дополнительный запрет для мобильных страниц
    echo "Disallow: /mobile/\n";

    // Пример динамического правила: запрет для кастомного типа постов
    $custom_post_type = 'private_docs';
    $custom_post_type_obj = get_post_type_object($custom_post_type);
    if ($custom_post_type_obj) {
        $archive_slug = $custom_post_type_obj->has_archive ? $custom_post_type_obj->rewrite['slug'] : $custom_post_type;
        echo "Disallow: /" . $archive_slug . "/\n";
    }

    // Добавляем ссылку на Sitemap
    echo "Sitemap: " . home_url('/sitemap_index.xml') . "\n";

    exit;
}

add_action('do_robots', 'wphow_generate_robots_txt');

Этот код отключит стандартный вывод и заменит его своим генератором. В нём прописаны базовые правила, а также пример запрета для пользовательского типа постов private_docs. Вы можете расширять логику, например, добавлять условия в зависимости от времени, IP адреса или других параметров.

Как автоматически создавать физический файл robots.txt с нужными правилами

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

Пример функции для генерации файла robots.txt в корне сайта

function wphow_create_physical_robots_txt() {
    $rules = "User-agent: *\n";
    $rules .= "Disallow: /wp-admin/\n";
    $rules .= "Disallow: /wp-login.php\n";
    $rules .= "Disallow: /mobile/\n";

    // Добавление динамического правила
    $custom_post_type = 'private_docs';
    $custom_post_type_obj = get_post_type_object($custom_post_type);
    if ($custom_post_type_obj) {
        $archive_slug = $custom_post_type_obj->has_archive ? $custom_post_type_obj->rewrite['slug'] : $custom_post_type;
        $rules .= "Disallow: /" . $archive_slug . "/\n";
    }

    $rules .= "Sitemap: " . home_url('/sitemap_index.xml') . "\n";

    $file = ABSPATH . 'robots.txt';
    file_put_contents($file, $rules);
}

// Запускайте эту функцию вручную или по крону
// wphow_create_physical_robots_txt();

Этот метод удобен, если вы хотите контролировать файл вне WordPress, например, если сервер кеширует статические файлы или если на хостинге запрещён вывод через PHP.

Поддержка разных уровней запретов и расширенные возможности

Как запретить индексацию страниц для определённых ролей пользователей

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

Для динамических robots.txt не всегда удобно, так как поисковики не учитывают авторизацию. Но можно запретить индексацию URL, которые доступны только определённым ролям, прописав их в robots.txt.

Использование плагинов для расширенного управления robots.txt

Если вы предпочитаете использовать плагины, обратите внимание на Clearfy — этот плагин из сборника WPSHOP позволяет удобно редактировать robots.txt и другие важные настройки SEO, без погружения в код.

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

Пример расширения: добавление правил для мобильного User-agent

function wphow_generate_robots_txt() {
    header('Content-Type: text/plain; charset=utf-8');

    echo "User-agent: *\n";
    echo "Disallow: /wp-admin/\n";
    echo "Disallow: /wp-login.php\n";

    echo "User-agent: Googlebot-Mobile\n";
    echo "Disallow: /desktop-only/\n";

    echo "Sitemap: " . home_url('/sitemap_index.xml') . "\n";

    exit;
}

add_action('do_robots', 'wphow_generate_robots_txt');

Этот пример показывает, как ограничить доступ для мобильного робота Google к разделу /desktop-only/. Подобным образом можно добавлять правила для любых User-agent.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙