Como sabrás, WordPress por defecto tiene dos taxonomías para las entradas o posts de tu sitio: categorías y etiquetas. Estas taxonomías te permiten categorizar o etiquetar tus entradas o posts para una mejor búsqueda o filtro de contenidos.
Son muy útiles para organizar contenidos. No son exclusivas de los posts, puedes crear tantas taxonomías como quieras para tus Custom Post Types de tipo jerárquico (como las categorías) o sin jerarquía (como las etiquetas).
Por ejemplo y sin ir más lejos, en este blog tengo 4 subcategorías: Entrevistas, Noticias, Plugins y Tutoriales, que pertenecen a la categoría principal Blog. Y varias etiquetas entre las que se encuentran custom fields, hooks, wpo, amp, wp-cli, etc…
Las primeras generan URLs del tipo https://desarrollowp.com/category/blog/tutoriales/ y las segundas del tipo https://desarrollowp.com/tag/wpo/. Si entramos en estas URLs estaremos navegando por las plantillas category.php y tag.php del tema, y en ambas se ofrece un listado de todos los posts categorizados o etiquetados por la categoría o etiqueta correspondiente.
Y aquí es cuando llegamos al quid de la cuestión: Mucha gente piensa que estas páginas con listados de categorías y etiquetas no aportan beneficios para el posicionamiento SEO de nuestra página. Incluso algunos/as afirman que puede llegar a resultar negativo. Sin entrar en el debate de si es bueno o no, lo que está claro es que en algunos casos o para algunos proyectos es probable que quieras o te pidan deshabilitar estas páginas.
Tienes disponibles en internet herramientas como SiteLiner para detectar contenido duplicado, entre otras cosas.
Evitar la navegación por category.php y tag.php en WordPress
Voy a centrarme en las taxonomías por defecto que tiene WordPress (categorías y etiquetas), pero esto es extensible a cualquier taxonomía que quieras crear para tus Custom Post Types. Vamos a añadir una función en el archivo functions.php que engancharemos al hook template_redirect:
<?php
// Evitar mostrar el archivo de etiquetas
function dont_display_tags(){
if ( is_tag() ) {
global $wp_query;
$wp_query->set_404(); //Establecemos la página de error 404
}
}
add_action( 'template_redirect', 'dont_display_tags' );
El hook template_redirect se ejecuta justo antes de que WordPress determine que plantilla va a cargar. En este ejemplo lo que hago es comprobar a través de los condicionales de WordPress si estoy en una página de etiquetas con la función condicional is_tag(), y en ese caso establecer una página de error 404. De este modo nunca llegaremos a navegar por la plantilla tag.php.
Para hacerlo con las categorías sería simplemente utilizar el condicional is_category(), y evitaríamos la navegación por la plantilla category.php.
Tanto para etiquetas como para categorías podríamos filtrar sólo por algunas de ellas pasando a las funciones is_category() e is_tag() los IDs o Slugs de categorías o etiquetas determinadas, es decir, podemos personalizarlo hasta el extremo que necesitemos.
Así como podemos personalizar el destino, si no te gusta o no quieres forzar un 404 puedes hacer una redirección a una URL o página concreta de tu sitio de la siguiente manera:
<?php
// Evitar mostrar el archivo de etiquetas
function dont_display_tags(){
if( is_tag() ) {
wp_redirect( 'la-url-o-pagina-que-quieras' );
exit;
}
}
add_action( 'template_redirect', 'dont_display_tags' );
Por último podrías avisar a los robots de búsqueda para que no indexen estás páginas de categorías y etiquetas, teniendo algo así en el robots.txt de tu sitio:
User-agent: *
Disallow: /tag/
Disallow: /category/
¿Qué opinas?