Pulsa ESC para cerrar

Curso WordpressCurso Wordpress

WordPress redirige a páginas que no pedí: cómo controlar las redirecciones «adivinadas»

Prueba esto en tu sitio: escribe la dirección de una entrada pero solo con el principio del slug, por ejemplo tudominio.cl/respaldo en vez de tudominio.cl/respaldo-wordpress-paso-a-paso/. Lo más probable es que WordPress te lleve a la entrada correcta.

Es una función llamada adivinar la URL en un 404: cuando una dirección no existe, WordPress busca en la base de datos un contenido publicado cuyo slug empiece con lo que escribiste, y redirige a él.

Cuándo ayuda

  • Alguien copió mal un enlace y le faltan letras al final.
  • Cambiaste el slug de una entrada y alguien usa una versión cortada.

Cuándo es un problema

  • Redirige a contenido equivocado. /contacto lleva a /contacto-para-prensa-2019/ en vez de mostrar un 404 que te avise del error.
  • Redirige a cosas que no deberían verse, como adjuntos o tipos de contenido públicos que no esperabas.
  • Confunde a Google: URLs que nunca existieron responden con un 301 a contenido aleatorio, en lugar de un 404 limpio.
  • Oculta errores: un enlace roto en tu menú «funciona» de casualidad y nunca te enteras.

Opción 1: que solo redirija si la coincidencia es exacta

Desde WordPress 5.5 hay un filtro para hacerlo estricto: solo redirige si encuentra un contenido cuyo slug sea exactamente el que se escribió (por ejemplo, una entrada que cambió de categoría o de fecha en la URL). Es el equilibrio recomendado:

<?php
add_filter( 'strict_redirect_guess_404_permalink', '__return_true' );

Opción 2: desactivar la adivinación por completo

Si prefieres que una URL que no existe muestre siempre un 404:

<?php
add_filter( 'do_redirect_guess_404_permalink', '__return_false' );

No desactives redirect_canonical completo (remove_filter( 'template_redirect', 'redirect_canonical' )), como sugieren algunas guías antiguas. Esa función también agrega la barra final, corrige www o sin www, y redirige las URLs de paginación y de entradas con parámetros a su versión correcta. Quitarla genera contenido duplicado.

Antes de cambiarlo: revisa qué se está adivinando

Si tu sitio tiene años, puede que haya enlaces externos que dependen de esas redirecciones. Para saber cuáles se están usando, este mu-plugin temporal registra cada redirección adivinada en el debug.log (con WP_DEBUG_LOG activado):

<?php
/**
 * Plugin Name: Registro de URLs adivinadas (diagnóstico temporal)
 */

add_filter( 'redirect_canonical', function ( $destino, $pedida ) {
	if ( $destino && is_404() ) {
		error_log( sprintf( '[url adivinada] %s → %s', $pedida, $destino ) );
	}
	return $destino;
}, 10, 2 );

Déjalo una o dos semanas. Las redirecciones que se repiten y son correctas, conviértelas en redirecciones 301 fijas (en tu plugin de redirecciones o en el .htaccess). Luego activa la opción 1 o la 2 y borra este mu-plugin.

Comprueba

curl -sI https://tudominio.cl/respaldo | grep -iE "^(HTTP|location)"

Con la opción 1 o la 2, una dirección incompleta debería responder 404.

¿WordPress te redirige a una página que no tiene nada que ver? Cuéntanos en el foro qué URL escribiste y a dónde te llevó.