Защита разработки сайта от индексации поисковыми системами
Как запретить поисковым системам индексировать сайт, если это его версия разработки (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-заголовки — это метаданные, которые отправляются сервером с ответом на запрос браузера. Они могут содержать информацию о правилах индексации.
С помощью этого кода вы можете защитить свою версию разработки от индексации, гарантируя, что ваши тестовые страницы не появятся в результатах поиска.