Запрещаем поисковикам индексировать DEV версию сайта
Как запретить индексацию сайта поисковиками, если это версия сайта для разработки (DEV копия сайта)?
Очень часто у сайта есть две или три версии в сети: DEV и PROD (иногда еще и STAGE). DEV-версию всегда нужно закрывать от индексации, делается это по-разному. Нередко видел, как её закрывают паролем через .htpasswd, однако это не всегда удобно. Гораздо удобнее использовать следующий код, чтобы закрыть сайт от индексации:
/**
* Close from search engines indexing for dev, stage environment.
*
* @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' ] );
// Not recommended. In order to have the same behaviour as on prod
# add_filter( 'wp_robots', [ __CLASS__, '_robots_meta_tag' ], 999 );
}
/**
* Checks whether we should disable indexing.
*/
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 response for search agents.
*/
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( 'Indexing of this site is Forbidden for robots.' );
}
}
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 for hook `wp_robots`.
* Adds `<meta name='robots' content='noindex, follow' />` HTML meta tag.
*/
public static function _robots_meta_tag( array $robots ): array {
$robots['noindex'] = true;
$robots['nofollow'] = true;
unset( $robots['follow'] );
return $robots;
}
}
Теперь просто вызываем эту функцию где угодно: в му-плагине, плагине или в файле functions.php:
WP_Kama_Disable_Dev_Env_Indexing::init();
ВАЖНО! Для этого кода вам нужно указать константу WP_ENVIRONMENT_TYPE в wp-config.php. Значение константы должно быть разным на разных окружениях.
—
Заметка встроена в: wp_get_environment_type()