WordPress: Redirigir errores 404 luego de cambiar Enlaces Permanentes

Creo esta pequeña guía para WordPress porque estuve haciendo unos cambios en el blog y me topé con este problema y al googlear por una solución no la encontré, no realmente.

El Problema

Resulta que hace un tiempo quería cambiar los enlaces de los posts del blog de la forma n3ri.com.ar/año/mes/titulo-del-post a simplemente n3ri.com.ar/titulo-del-post. El principal motivo era que quería que «no se note tanto» que escribo muy poco últimamente y que los últimos post son pocos por año, algunos del /2018/05/.

El cambio es tan sencillo como ir en el Panel de Administración de WordPress a Ajustes->Enlaces Permanentes y elegir Nombre de Entrada (antes estaba en Mes y nombre). Pero al hacer esto, cuando alguien entra a un artículo desde otra página por un enlace viejo que todavía tenga el /2018/05/ ocurre que WordPress no hace la redirección 301 automática y te envía a la página de Error 404, Página No encontrada.

De esta manera, todos esos post viejos, enlazados desde páginas amigas y redes sociales, terminarían en el limbo.

El Interludio

Entonces me puse a googlear, tanto en inglés como en español en busca de una solución y no encontré ninguna, al menos no una que vaya al punto y lo explique de forma clara y concisa.

Encontré sí muchas preguntas en StackOverflow sin respuestas, o con respuestas que los orientaban en una dirección distinta, una solución alternativa, que no era lo que estaban buscando los que consultaban (prometo ponerme a contestarlas cuando termine de escribir esto, para colaborar con futuros googleadores).

También recuerdo haber preguntado en un grupo de Expertos en WordPress y tampoco nadie supo responder.

La Solución

Bueno, yendo al grano. La solución más simple es instalar un plugin de WordPress llamado Redirection, pero esto en sí no lo arregla, el truco está en saber configurarlo correctamente para este problema en particular.

La solución más elegante sería hacerlo directamente modificando el archivo .htaccess; los pros y contras de ambas opciones son que con una tenés más control y con la otra seguís la filosofía de «evitar instalar plugins innecesarios». Una filosofía que siempre recomiendo seguir en la medida de lo posible, por lo que esa será finalmente mi opción preferida.

Con Redirection

Wordpress permalink migrationsCambiamos los ajustes de los Enlaces Permanentes yendo a Ajustes->Enlaces Permanentes. Aquí lo importante es anotar el formato anterior, porque lo vamos a usar después.

Por ejemplo, yo tenía /%year%/%monthnum%/%postname%/ y lo cambié a simplemente /%postname%/.
Luego instalamos el plugin, lo activamos y realizamos el proceso de Configuración Inicial que nos pide. Redirection va a encontrar algunas redirecciones 301 para hacer, cuestiones de signos como ¿, tildes y cosas así.

Probamos entrar a un artículo que tenga el formato anterior. Por ejemplo n3ri.com.ar/2020/04/titulo. Nos debería de seguir causando Error 404, porque ya no encuentra ese artículo, que ahora está en n3ri.com.ar/titulo.

Le di vueltas un buen rato hasta que, intentando crear una redirección «genérica» me salió un mensaje. En la configuración de Redirections hay que ir a la tercer pestaña, Sitio, y en Permalink Migration agregar la estructura vieja de permalinks. Guardamos cambios y ahora sí debería funcionar, y si alguien viene desde otra página web por el link n3ri.com.ar/2022/04/titulo, debería ser redirigido a n3ri.com.ar/titulo y debería poder ver el artículo.

Con .htaccess

Para hacerlo sin plugin, hay que editar el archivo .htaccess y agregar una expresión regular adecuada para la redirección que queremos lograr. Esto dependerá de cuál era la estructura anterior y cuál es la nueva. Es importante hacer esta modificación ANTES de cualquier cosa que haya agregado WordPress a ese archivo. O sea, antes de donde aparece escrito «# BEGIN WordPress».

En mi caso agregué esto:
RedirectMatch 301 /^/\d{4}/\d{2}/(.*) https://n3ri.com.ar/$1/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *