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.Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…
Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…
¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…
Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…
Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…
Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…