Cualquier tipo de contenido en WordPress, ya sea una entrada o una página, o un producto o una categoría de producto en WooCommerce, tiene una URL propia. Esa URL se define en base a lo que eliges en Ajustes, Enlaces permanentes; aunque puedes modificarlo con hooks como post_link por ejemplo. Cuando modificamos ese tipo de URL con ese tipo de filtros, también debemos ajustas las expresiones regulares que hacen que la consulta que se hace a través de la URL vaya a un tipo de contenido u otro.
¿Por qué os cuento esto? Porque en ocasiones, al hacer operaciones como quitar el slug de «producto» de la URL de de producto de WooCommerce, para mejorar el posicionamiento (esto se puede hacer con plugins como Premmerce Permalink Manager for WooCommerce), puedes empezar a sufrir el problema de que URL que no son la canónica, muestren el contenido, generándote URLs duplicadas para un mismo contenido, lo que se conoce como contenido duplicado.
Un ejemplo, estas dos URL podrían devolver el mismo contenido:
Siendo la primera la correcta. Hay que tener cuidado cuando se toca la forma en que se genera la URL de los diferentes tipos de contenido, porque puedes generar este tipo de problemas.
Una forma de evitar esto es generar un pequeño trozo de código que cuando detecte este tipo de comportamientos lo resuelva. Para evitar que interactúe en cualquier petición, podemos aislarlo para que solo ejecute cuando veamos que existe el problema y está afectando a nuestro posicionamiento (por ejemplo cuando se trate de productos o categoría de productos). Luego averiguar cuál es la URL que se está usando, compararla con la URL canónica, la que debería ser y redireccionara en ese momento.
Dado que queremos que la consulta esté completamente ejecutada pero que todavía no se haya empezado a enviar el cuerpo HTML del cuerpo para poder hacer una redirección a través de la cabecera usando un wp_redirect(), debemos usar un hook como template_redirect que es el idóneo en estos casos.
Veamos el código:
add_action( 'template_redirect', function(){ if( !is_product() && !is_product_category() ) return; global $wp, $wp_query; $url_actual = home_url( $wp->request ); if( substr( $url_actual, -1 ) !== '/') { $url_actual = $url_actual . '/'; } if( is_product() ){ if( $url_actual != wp_get_canonical_url() ){ wp_redirect( wp_get_canonical_url() ); die(); } } if( is_product_category() && !$wp_query->is_paged() ){ $canonical = get_term_link( get_queried_object() ); if( $url_actual != $canonical ){ wp_redirect( $canonical ); die(); } } }, PHP_INT_MAX );
Algunos detalles importantes:
Así que bueno, espero haberos ayudado con estos problemas que pueden surgir en algunos procesos de optimización SEO.
Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.RedSys aparte de los pagos normales, llamados autorizaciones, acepta una variedad de operaciones: desde autorizaciones…
WooCommerce permite ordenar los productos de una forma nativa, para poder presentar primero los que…
Cada vez que hay una actualización grande del núcleo WordPress, por defecto WordPress te instala…
Una pantalla LCD es una pantalla delgada y hecha de cristal líquido. Se usa en…
De todos los plugins que existen para Gravity Forms, que son numerosos porque la propia…
Un CMS, como WordPress, facilita la creación y gestión de contenido en la web, sin…