Pulsa ESC para cerrar

Curso WordpressCurso Wordpress

Redirecciones con expresiones regulares: miles de errores 404 arreglados con una sola regla

Un caso muy común: un sitio con años de contenido cambia su estructura de enlaces permanentes de /2021/05/mi-entrada/ a /mi-entrada/. WordPress redirige muchas URLs antiguas por su cuenta, pero no todas, y Search Console empieza a mostrar decenas de miles de errores 404.

Redirigir una por una sería imposible. Pero todas siguen el mismo patrón, y para eso existen las expresiones regulares (regex): una forma de describir patrones de texto.

Paso 1: encontrar el patrón

Exporta la lista de 404 desde Search Console → Páginas → No se ha encontrado (404) o revisa el registro de tu plugin de redirecciones. Busca lo que se repite. Ejemplos típicos:

  • /2021/05/mi-entrada/ → la entrada ahora está en /mi-entrada/ (cambio de estructura con fecha).
  • /mi-entrada/amp/ → ya no usas AMP.
  • /category/noticias/mi-entrada/ → quitaste la categoría de la URL.
  • /blog/mi-entrada/ → movieron el blog de un subdirectorio a la raíz.
  • /producto/polera-negra/ → cambiaste la base de productos.

Paso 2: lo mínimo de regex que necesitas

  • ^ y $: inicio y fin de la dirección.
  • \d : un dígito. \d{4}: cuatro dígitos (un año).
  • [^/]+ : uno o más caracteres que no sean una barra (un «segmento» de la URL).
  • (...) : captura lo que hay dentro para reutilizarlo como $1, $2…
  • /? : una barra final opcional.
  • .* : cualquier cosa.

Con eso, la regla para fechas se lee así:

^/(\d{4})/(\d{2})/([^/]+)/?$   →   /$3/

«Una barra, cuatro dígitos, barra, dos dígitos, barra, un segmento (que guardo como $3), barra opcional, fin» → «llévalo a /$3/».

Paso 3: probar la expresión antes de aplicarla

Usa un probador de expresiones regulares en línea (busca «regex tester»), pega la expresión y una lista de URLs reales: las que deben redirigirse y algunas que no (páginas, imágenes, archivos de categorías). Comprueba que solo coincidan las correctas.

El error más común es una expresión demasiado amplia. Por ejemplo, ^/(.*)/amp/?$ está bien, pero amp sin anclar a la barra también atraparía /ejemplos-de-campamentos/. Prueba siempre con URLs que no deben coincidir.

Paso 4: aplicar la regla

En Apache (.htaccess)

Encima del bloque # BEGIN WordPress:

# Estructura antigua con fecha → solo el nombre
RedirectMatch 301 ^/(\d{4})/(\d{2})/([^/]+)/?$ /$3/

# AMP desactivado
RedirectMatch 301 ^/(.+)/amp/?$ /$1/

# Blog movido a la raíz
RedirectMatch 301 ^/blog/(.+)$ /$1

En Nginx

Dentro del bloque server, antes del location /:

rewrite ^/(\d{4})/(\d{2})/([^/]+)/?$ /$3/ permanent;
rewrite ^/(.+)/amp/?$ /$1/ permanent;

Y recarga Nginx: sudo nginx -t && sudo systemctl reload nginx.

Con un plugin de redirecciones

Los plugins de redirecciones (y los gestores de redirecciones de los plugins de SEO) tienen una casilla Regex o Expresión regular. Usa la misma expresión en el origen y /$3/ (o la referencia que corresponda) en el destino.

Las reglas en el servidor (.htaccess, Nginx) son más rápidas: se ejecutan antes de cargar WordPress. Los plugins son más cómodos y registran cuántas veces se usa cada regla. Para miles de URLs, el servidor es mejor opción.

Paso 5: comprobar

curl -sI https://tudominio.cl/2021/05/mi-entrada/ | grep -iE "^(HTTP|location)"

Debe responder 301 y location: https://tudominio.cl/mi-entrada/. Prueba también varias URLs que no deben redirigirse, y verifica que respondan 200.

Después, en Search Console, usa Validar corrección en el informe de 404. En unas semanas, la cifra debería bajar.

Evita las cadenas de redirecciones

Si la URL antigua redirige a otra que a su vez redirige a una tercera, Google sigue la cadena, pero pierde tiempo. Revisa que el destino de cada regla sea la URL final, con la barra final y el protocolo correctos.

¿Tienes un patrón de 404 y no sabes cómo escribir la regla? Pega en el foro tres ejemplos de URL antigua y su destino, y la armamos.