Обычно, чтобы закрыть какие-то страницы от индексации мы делаем это используя robots.txt
, но этот файл ничего не знает о контенте сайта и не может определить есть ли какие-то посты в категориях.
Для этого нам понадобится достаточно простой и нетривиальный код:
// Функция печатает теги noindex, nofollow на архивных страницах, если постов на этой архивной странице нет
add_action( 'wp_head', 'skill_noindex', 1 );
if ( ! function_exists( 'skill_noindex' ) ) {
function skill_noindex() {
if( ! have_posts() && is_archive() ) {
echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
}
}
}
Как видите, мы просто делаем проверку, что находимся на архивной странице и в текущем глобальном запросе постов нет, после чего печатаем соответствующий мета-тег на хуке wp_head()
.
Учитывайте, что эта функция сработает и для всех таксономий пользовательского типа.