Защита разработки сайта от индексации: как запретить поиску DEV версию?

Защита разработки сайта от индексации поисковыми системами

Как запретить поисковым системам индексировать сайт, если это его версия разработки (DEV)?

Часто у сайта существуют две или три версии: DEV (разработка) и PROD (продуктивная), иногда также STAGE (стадия). Версия DEV всегда должна быть заблокирована от индексации, и для этого есть несколько способов. Обычно для защиты используется пароль с помощью .htpasswd, но это не всегда удобно. Гораздо проще использовать следующий код, чтобы запретить индексацию сайта:

Код для блокировки индексации

/**
 * Закрытие индексации поисковыми системами для окружения dev и stage.
 *
 * @version 1.0
 */
final class WP_Kama_Disable_Dev_Env_Indexing {

    public static function init(): void {
        add_action( 'init', [ __CLASS__, 'disable_indexing' ] );
    }

    public static function disable_indexing(): void {

        if( ! self::is_blocking_on() ){
            return;
        }

        self::block_search_agents();

        add_filter( 'wp_headers', [ __CLASS__, '_HTTP_header' ] );
        add_filter( 'robots_txt', [ __CLASS__, '_robots_txt' ] );
        // Не рекомендуется. Для того, чтобы поведение было таким же, как на продакшене
        # add_filter( 'wp_robots', [ __CLASS__, '_robots_meta_tag' ], 999 );
    }

    /**
     * Проверяет, нужно ли отключить индексацию.
     */
    private static function is_blocking_on(): bool {

        if( in_array( wp_get_environment_type(), [ 'production', 'local' ], true ) ){
            return false;
        }

        if( current_user_can( 'administrator' ) ){
            return false;
        }

        return true;
    }

    /**
     * Ответ 403 для поисковых систем.
     */
    private static function block_search_agents(): void {
        $robots = 'libwww|Wget|LWP|damnBot|BBBike|spider|crawl|google|bing|yandex|msnbot';
        $user_agent = ( $_SERVER['HTTP_USER_AGENT'] ?? '' );

        if( preg_match( "/$robots/i", $user_agent ) ) {
            http_response_code( 403 );

            die( 'Индексация этого сайта запрещена для роботов.' );
        }
    }

    public static function _HTTP_header( array $headers ): array {
        $headers['X-Robots-Tag'] = 'noindex, nofollow';

        return $headers;
    }

    public static function _robots_txt(): string {
        return "User-agent: *nDisallow: /";
    }

    /**
     * Callback для хука wp_robots.
     * Добавляет HTML-мета-тег <meta name='robots' content='noindex, follow' />.
     */
    public static function _robots_meta_tag( array $robots ): array {
        $robots['noindex'] = true;
        $robots['nofollow'] = true;
        unset( $robots['follow'] );

        return $robots;
    }
}

Теперь просто вызовите эту функцию где угодно: в mu-plugin, плагине или в файле functions.php:

WP_Kama_Disable_Dev_Env_Indexing::init();

Важно!

Чтобы этот код работал, вам необходимо установить константу WP_ENVIRONMENT_TYPE в файле wp-config.php. Значение этой константы должно отличаться для каждой среды.

Объяснение некоторых терминов

  • Индексация — процесс, при котором поисковые системы сканируют ваш сайт и добавляют его страницы в свои базы данных, чтобы они могли отображаться в результатах поиска.
  • Константа — это фиксированное значение, которое не меняется в течение работы программы.
  • HTTP-заголовки — это метаданные, которые отправляются сервером с ответом на запрос браузера. Они могут содержать информацию о правилах индексации.

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

Leave a Reply

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