2 de octubre de 2026
Programador trabajando de noche ante dos monitores

Concentración nocturna entre código, café y una lámpara cálida. Un entorno de trabajo pensado para resolver problemas.

¿Cómo crear redirecciones 301 efectivas mediante el archivo .htaccess en Apache? 🔁

Una redirección 301 parece poca cosa: una línea en un archivo discreto, casi escondido, con un punto delante del nombre como quien no quiere molestar. Y, sin embargo, esa línea puede salvar años de posicionamiento SEO, evitar errores 404, ordenar una migración web y conducir a los usuarios hacia la página correcta con la precisión de un faro en una noche de niebla.

También puede romperlo todo. Porque el archivo .htaccess, cuando se toca sin método, no perdona demasiado. Apache es cordial, sí, pero no es adivino. Una barra mal puesta, una regla antes de tiempo, una expresión regular demasiado ambiciosa, y el sitio entra en un bucle infinito con la solemnidad absurda de una puerta giratoria en medio del desierto. Muy tecnológico todo, claro.

Esta guía explica, con profundidad práctica, cómo crear redirecciones 301 efectivas en Apache usando .htaccess: cuándo usarlas, cómo escribirlas, qué diferencias hay entre Redirect y RewriteRule, cómo aplicarlas en WordPress, cómo evitar errores comunes y cómo comprobar que Google, los navegadores y tus usuarios están recibiendo exactamente lo que deben recibir.

Contenido de la guía 🧭

  1. Qué es una redirección 301 y por qué importa
  2. Antes de editar el archivo .htaccess
  3. Redirect vs RewriteRule: dos caminos distintos
  4. Ejemplos básicos de redirecciones 301
  5. Reglas avanzadas: HTTPS, www, dominios, parámetros y patrones
  6. Redirecciones 301 en WordPress
  7. Impacto SEO y buenas prácticas
  8. Errores comunes y cómo evitarlos
  9. Cómo probar redirecciones 301
  10. Checklist final para publicar sin sobresaltos

Qué es una redirección 301 y por qué importa para SEO 🚦

Una redirección 301 es una respuesta HTTP que indica que un recurso se ha movido de forma permanente. En términos sencillos: la URL antigua ya no vive ahí; ahora vive en otro lugar. El navegador recibe esa instrucción y lleva al usuario a la nueva dirección. Los motores de búsqueda, por su parte, interpretan que deben actualizar sus índices y transferir la mayor parte de las señales de posicionamiento hacia la URL nueva.

En HTTP, el estado 301 Moved Permanently pertenece a la familia de códigos 3xx, dedicados a redirecciones. No es lo mismo que un 302 Found, que suele interpretarse como temporal. Tampoco es idéntico a un 308 Permanent Redirect, más estricto con el método HTTP, aunque menos usado históricamente en configuraciones clásicas. La redirección 301 es, por así decirlo, el acta notarial de que una dirección antigua ha dejado paso a otra.

El contraste es hermoso, si se mira con cierta paciencia: una URL puede parecer ligera como una pluma —un texto azul en Google, un enlace en un menú—, pero arrastra autoridad, enlaces externos, historial, tráfico, reputación y hasta memoria de marca. Cambiarla sin redirigirla es como mudarse de casa y no avisar a nadie, salvo quizá al gato, que ya sospechaba algo.

Cuándo conviene usar una redirección 301

  • Cuando cambias la estructura de URLs de un sitio web.
  • Cuando migras de HTTP a HTTPS.
  • Cuando cambias de dominio.
  • Cuando fusionas dos páginas similares en una versión más completa.
  • Cuando eliminas contenido antiguo pero existe una alternativa relevante.
  • Cuando quieres unificar versiones con y sin www.
  • Cuando corriges URLs con errores tipográficos que han recibido enlaces.
  • Cuando eliminas index.php, index.html o rutas duplicadas.

Cuándo no conviene usarla

No todas las páginas muertas merecen resurrección. Si una URL no tiene tráfico, enlaces, relevancia ni equivalente real, quizá sea más honesto devolver un 404 o un 410 Gone. Redirigir todo hacia la página de inicio suele ser una mala práctica: confunde a los usuarios, diluye la señal temática y puede interpretarse como un “soft 404”. Es una solución cómoda, sí. También lo es barrer el polvo debajo de la alfombra.

Idea clave: una buena redirección 301 no solo lleva de una URL antigua a una nueva. Lleva de una intención antigua a una intención equivalente. Si alguien buscaba “servicios de mantenimiento WordPress”, no debería terminar en una página genérica de contacto como quien cae por una trampilla.

Antes de tocar el archivo .htaccess 🛠️

El archivo .htaccess es un archivo de configuración usado por Apache para aplicar directivas a nivel de directorio. Puede controlar redirecciones, reescritura de URLs, protección de directorios, reglas de caché, compresión, cabeceras HTTP y otras funciones. En muchos alojamientos compartidos es el mecanismo más accesible para el propietario de un sitio, porque no requiere editar la configuración principal del servidor.

Pero hay una pequeña paradoja: lo que hace cómodo al .htaccess también puede hacerlo delicado. Apache lee estos archivos durante el procesamiento de las solicitudes, siempre que la configuración permita AllowOverride. Esto facilita cambios rápidos, aunque en sitios con mucho tráfico puede ser menos eficiente que colocar reglas directamente en la configuración del virtual host. En hosting compartido, no hay mucho misterio: se usa lo disponible. En servidores propios, conviene considerar el archivo de configuración de Apache como opción más limpia y performante.

Requisitos básicos

  • El servidor debe ser Apache o compatible con reglas .htaccess. Nginx no usa .htaccess; requiere reglas en el bloque de servidor.
  • Debe estar habilitado mod_rewrite si vas a usar RewriteEngine, RewriteCond y RewriteRule.
  • La configuración de Apache debe permitir directivas mediante AllowOverride.
  • Debes tener acceso por FTP, SFTP, SSH, administrador de archivos del hosting o panel de control.
  • Conviene tener una copia de seguridad antes de modificar nada. No por dramatismo; por supervivencia.

Dónde suele estar el archivo .htaccess

Normalmente se encuentra en la raíz pública del sitio, por ejemplo:

  • /public_html/.htaccess
  • /www/.htaccess
  • /htdocs/.htaccess
  • /var/www/html/.htaccess

En WordPress, suele estar en el mismo directorio donde se encuentran wp-config.php, wp-content, wp-admin y wp-includes.

Precaución: antes de editar, descarga una copia del archivo original. Si al guardar aparece un error 500, restaura la copia inmediatamente. Un .htaccess mal escrito puede tirar abajo el sitio con la elegancia de un castillo de naipes bajo un ventilador.

Redirect vs RewriteRule: dos formas de redirigir en Apache ⚖️

En Apache hay dos herramientas comunes para crear redirecciones 301 desde .htaccess: las directivas de mod_alias, como Redirect y RedirectMatch, y las reglas de mod_rewrite, como RewriteRule y RewriteCond.

La primera es directa, casi austera. La segunda es poderosa, flexible y, como tantas cosas poderosas, capaz de causar problemas si se usa con entusiasmo de aprendiz de alquimista.

Herramienta Cuándo usarla Ventajas Riesgos
Redirect 301 Redirecciones simples de una URL a otra. Fácil de leer, rápida de implementar, menos propensa a errores. No sirve bien para lógica condicional compleja.
RedirectMatch Redirecciones con patrones mediante expresiones regulares. Útil para grupos de URLs con estructura similar. Una expresión regular mal planteada puede redirigir más de la cuenta.
RewriteRule Reglas condicionales: HTTPS, dominio, parámetros, patrones, exclusiones. Muy flexible y potente. Mayor complejidad, más posibilidad de bucles y conflictos.

Regla de oro

Usa la herramienta más simple que resuelva el caso. Si una redirección cabe en Redirect 301, no invoques mod_rewrite como quien llama a una excavadora para plantar albahaca.

Redirecciones 301 básicas con .htaccess 📌

Empecemos con lo esencial: mover una URL concreta hacia otra URL concreta. Es el caso más común y también el más saludable para aprender.

Redirigir una página antigua a una nueva con Redirect 301

Redirect 301 /pagina-antigua/ https://www.ejemplo.com/pagina-nueva/

En esta sintaxis, la primera ruta debe ser relativa al dominio y comenzar con /. La segunda debe ser la URL destino completa.

Ejemplo realista:

Redirect 301 /servicios-seo.html https://www.ejemplo.com/servicios/posicionamiento-seo/

Cuando alguien visite https://www.ejemplo.com/servicios-seo.html, Apache responderá con un 301 y enviará al usuario a la nueva ubicación.

Redirigir sin cambiar el dominio

Aunque con Redirect 301 suele escribirse la URL absoluta de destino, también puede usarse una ruta absoluta del mismo sitio en ciertos contextos:

Redirect 301 /blog/viejo-articulo/ /blog/nuevo-articulo/

Para evitar ambigüedades, especialmente en migraciones, muchos profesionales prefieren usar la URL completa:

Redirect 301 /blog/viejo-articulo/ https://www.ejemplo.com/blog/nuevo-articulo/

Redirigir varias páginas una por una

Redirect 301 /producto-antiguo-a/ https://www.ejemplo.com/producto-nuevo-a/
Redirect 301 /producto-antiguo-b/ https://www.ejemplo.com/producto-nuevo-b/
Redirect 301 /producto-antiguo-c/ https://www.ejemplo.com/categoria/productos/

Esta técnica es ideal cuando tienes una lista controlada de URLs antiguas. Sí, puede parecer artesanal. Pero en SEO técnico lo artesanal a veces gana: una correspondencia manual y precisa suele ser mejor que una regla automática que manda a medio sitio al mismo vertedero digital.

Redirigir con RedirectMatch

RedirectMatch permite utilizar expresiones regulares. Por ejemplo, redirigir todas las URLs que terminan en .html hacia una versión sin esa extensión:

RedirectMatch 301 ^/(.*)\.html$ https://www.ejemplo.com/$1/

Ejemplo:

  • /contacto.html → https://www.ejemplo.com/contacto/
  • /servicios/diseno-web.html → https://www.ejemplo.com/servicios/diseno-web/

Cuidado con las expresiones regulares: antes de usar una regla masiva, prueba varias URLs. Una expresión demasiado amplia puede afectar rutas que no querías tocar. Las regex son como cuchillos bien afilados: maravillosas en manos serenas, memorables en manos distraídas.

Redirecciones avanzadas con RewriteRule y RewriteCond 🧩

Cuando necesitas condiciones, exclusiones, patrones complejos o lógica basada en el dominio, el protocolo o la cadena de consulta, entra en escena mod_rewrite.

La estructura básica suele ser:

RewriteEngine On

RewriteCond condición
RewriteRule patrón destino [R=301,L]

En .htaccess, el patrón de RewriteRule normalmente se evalúa sin la barra inicial. Es decir, para redirigir /pagina-antigua/, el patrón suele ser ^pagina-antigua/?$, no ^/pagina-antigua/?$. Este pequeño detalle ha robado tardes enteras a personas decentes.

Redirigir una URL específica con RewriteRule

RewriteEngine On

RewriteRule ^pagina-antigua/?$ https://www.ejemplo.com/pagina-nueva/ [R=301,L]

La bandera R=301 indica redirección permanente. La bandera L significa “last”, es decir, detener el procesamiento de reglas en ese punto para esa fase. En Apache 2.4 también existe END, útil para detener más procesamiento de reescritura en contexto per-directory, aunque no siempre es necesario en reglas sencillas.

Forzar HTTPS

Una de las redirecciones 301 más habituales es enviar todo el tráfico HTTP hacia HTTPS. Es una medida básica de seguridad, SEO y confianza. Además, evita contenido duplicado entre versiones inseguras y seguras.

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Esta regla conserva el host y la URI solicitada. Si alguien entra en http://www.ejemplo.com/blog/, irá a https://www.ejemplo.com/blog/.

Consejo: si tu sitio está detrás de Cloudflare, un balanceador de carga o un proxy inverso, la variable %{HTTPS} puede no comportarse como esperas. En esos casos puede hacer falta revisar cabeceras como X-Forwarded-Proto o configurar correctamente el proxy. No copies reglas a ciegas: el servidor siempre tiene su biografía.

Forzar www

Si quieres que todas las URLs usen www:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.ejemplo\.com$ [NC]
RewriteRule ^ https://www.ejemplo.com%{REQUEST_URI} [R=301,L]

La bandera NC significa “no case”, es decir, no distinguir mayúsculas y minúsculas.

Eliminar www

Si prefieres la versión sin www:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.ejemplo\.com$ [NC]
RewriteRule ^ https://ejemplo.com%{REQUEST_URI} [R=301,L]

No hay una opción universalmente superior entre usar www o no usarlo. Lo importante es elegir una versión canónica y ser coherente. La web no exige elegancia, pero premia la consistencia.

Forzar HTTPS y www en una sola regla

Para unificar todo hacia https://www.ejemplo.com:

RewriteEngine On

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\.ejemplo\.com$ [NC]
RewriteRule ^ https://www.ejemplo.com%{REQUEST_URI} [R=301,L]

Esta regla cubre varios casos:

  • http://ejemplo.com/pagina/ → https://www.ejemplo.com/pagina/
  • http://www.ejemplo.com/pagina/ → https://www.ejemplo.com/pagina/
  • https://ejemplo.com/pagina/ → https://www.ejemplo.com/pagina/

Redirigir un dominio antiguo a uno nuevo

Cuando migras de dominio, conviene redirigir cada URL a su equivalente, no todo a la home. Así se conserva mejor la relevancia temática y la experiencia del usuario.

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?dominio-antiguo\.com$ [NC]
RewriteRule ^(.*)$ https://www.dominio-nuevo.com/$1 [R=301,L]

Ejemplo:

  • http://dominio-antiguo.com/servicios/ → https://www.dominio-nuevo.com/servicios/
  • http://www.dominio-antiguo.com/blog/articulo/ → https://www.dominio-nuevo.com/blog/articulo/

Redirigir una carpeta completa

Si moviste todo el contenido de /blog-antiguo/ a /blog/:

RewriteEngine On

RewriteRule ^blog-antiguo/(.*)$ https://www.ejemplo.com/blog/$1 [R=301,L]

Así, /blog-antiguo/mi-articulo/ irá a /blog/mi-articulo/.

Redirigir una URL con parámetros

El manejo de parámetros merece atención. En Apache, las reglas de reescritura no incluyen la cadena de consulta en el patrón de RewriteRule. Para trabajar con parámetros como ?id=123, se usa RewriteCond sobre %{QUERY_STRING}.

Ejemplo: redirigir /producto.php?id=123 hacia una URL amigable:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^producto\.php$ https://www.ejemplo.com/productos/zapatos-rojos/? [R=301,L]

El signo ? al final del destino elimina la cadena de consulta original en versiones clásicas de Apache. En Apache 2.4 también se puede usar la bandera QSD para descartar la query string:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^producto\.php$ https://www.ejemplo.com/productos/zapatos-rojos/ [R=301,L,QSD]

Conservar parámetros en la redirección

Por defecto, si el destino no contiene una nueva cadena de consulta, Apache suele conservar la query string original. Si quieres añadir parámetros y conservar los existentes, puedes usar QSA:

RewriteEngine On

RewriteRule ^busqueda-antigua/$ /buscar/?fuente=redireccion [R=301,L,QSA]

QSA significa “Query String Append”: agrega los parámetros existentes al destino.

Eliminar index.php o index.html

Las URLs duplicadas con index.php o index.html son habituales. Para redirigir /index.php hacia la raíz:

RewriteEngine On

RewriteRule ^index\.php$ https://www.ejemplo.com/ [R=301,L]

Para eliminar index.html en cualquier carpeta:

RewriteEngine On

RewriteRule ^(.*/)?index\.html$ https://www.ejemplo.com/$1 [R=301,L]

Normalizar barra final o trailing slash

En muchos sitios, especialmente WordPress, las URLs canónicas terminan con barra final. En otros, no. Lo fundamental es evitar que ambas versiones respondan con 200 OK.

Agregar barra final a rutas que no parecen archivos:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.+)$ https://www.ejemplo.com/$1/ [R=301,L]

Esta regla excluye archivos reales mediante %{REQUEST_FILENAME} !-f, para no convertir /imagen.jpg en /imagen.jpg/, una pequeña catástrofe con sombrero.

Redirecciones 301 en WordPress mediante .htaccess 🧱

WordPress usa .htaccess para gestionar sus enlaces permanentes cuando funciona sobre Apache. El bloque típico se parece a esto:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

La recomendación práctica es colocar tus redirecciones personalizadas antes del bloque de WordPress. ¿Por qué? Porque WordPress actúa como controlador frontal: si dejas ciertas reglas después, quizá nunca se ejecuten como esperas.

# Redirecciones personalizadas
RewriteEngine On

RewriteRule ^antigua-pagina/?$ https://www.ejemplo.com/nueva-pagina/ [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

¿Plugin o .htaccess?

En WordPress, plugins como Redirection, Rank Math SEO, Yoast SEO Premium o herramientas similares permiten gestionar redirecciones desde el panel. Son útiles, especialmente para equipos editoriales o sitios donde las URLs cambian con frecuencia. Pero no siempre son la mejor opción.

Opción Ventajas Cuándo conviene
.htaccess Rápido a nivel de servidor, no depende de WordPress, útil para reglas globales. Migraciones, HTTPS, dominio canónico, cambios estructurales grandes.
Plugin de redirecciones Interfaz visual, registro de 404, fácil para usuarios no técnicos. Redirecciones editoriales, cambios frecuentes, equipos de contenido.
Configuración de servidor Más eficiente y robusta que .htaccess. Servidores dedicados, VPS, sitios de alto tráfico.

Un matiz importante: si WordPress se carga para decidir una redirección, ya has consumido PHP, base de datos y parte del stack de la aplicación. Una redirección en Apache ocurre antes, como un portero atento que no deja entrar al visitante al edificio equivocado.

Impacto SEO de las redirecciones 301: autoridad, rastreo y paciencia 📈

Google ha indicado desde hace años que las redirecciones 301, 302 y otras redirecciones bien implementadas pueden transferir señales de ranking cuando corresponden. En la práctica SEO, una redirección 301 sigue siendo el estándar para cambios permanentes porque comunica de forma clara la intención de mover una URL definitivamente.

Aun así, conviene abandonar una fantasía: una migración con redirecciones perfectas no siempre mantiene el tráfico exactamente igual desde el primer día. Los buscadores necesitan rastrear, procesar, consolidar señales y actualizar sus índices. A veces el tránsito es suave; otras veces se parece a cruzar un río sobre piedras mojadas. Se puede hacer bien. No siempre se hace sin mojarse los zapatos.

Buenas prácticas SEO para redirecciones 301

  • Redirige a la página más equivalente: no envíes todo a la home.
  • Evita cadenas de redirecciones: si A redirige a B y B a C, actualiza A para que vaya directamente a C.
  • Evita bucles: una URL no debe redirigirse hacia sí misma, directa ni indirectamente.
  • Actualiza enlaces internos: no dependas eternamente de las redirecciones.
  • Actualiza canonical tags: la URL canónica debe apuntar a la versión final.
  • Actualiza sitemaps XML: incluye solo URLs finales con estado 200 OK.
  • Revisa robots.txt: no bloquees URLs que necesitas que Google rastree para descubrir la redirección.
  • Mantén las redirecciones activas: especialmente si hay backlinks externos. En migraciones importantes, años mejor que semanas.
  • Controla Search Console: revisa cobertura, indexación, páginas con redirección y errores 404.

La cadena de redirección: el enemigo educado

Una cadena de redirecciones no siempre grita. A veces susurra. Usuario entra en A, A manda a B, B manda a C, C manda a D. Todo “funciona”, aparentemente. Pero cada salto añade latencia, consume presupuesto de rastreo y aumenta la probabilidad de fallo. Es la burocracia convertida en arquitectura web.

Mal:

/url-antigua/ → /url-menos-antigua/ → /url-casi-nueva/ → /url-final/

Bien:

/url-antigua/ → /url-final/

Errores comunes al crear redirecciones 301 en .htaccess 🚨

1. Usar 301 cuando aún estás probando

Los navegadores pueden cachear redirecciones 301 de forma persistente. Si te equivocas, quizá corrijas el archivo y tu navegador siga recordando la versión antigua, como un elefante con mala leche. Durante pruebas, usa temporalmente 302 y cambia a 301 cuando verifiques que todo funciona.

RewriteRule ^prueba/?$ https://www.ejemplo.com/destino/ [R=302,L]

Después:

RewriteRule ^prueba/?$ https://www.ejemplo.com/destino/ [R=301,L]

2. Mezclar reglas sin orden

El orden importa. Apache procesa reglas de arriba hacia abajo. Las reglas específicas deben ir antes que las generales.

Mal:

RewriteRule ^blog/(.*)$ https://www.ejemplo.com/articulos/$1 [R=301,L]
RewriteRule ^blog/oferta-especial/?$ https://www.ejemplo.com/promociones/oferta/ [R=301,L]

La segunda regla quizá nunca se aplique porque la primera captura todo /blog/. Mejor:

RewriteRule ^blog/oferta-especial/?$ https://www.ejemplo.com/promociones/oferta/ [R=301,L]
RewriteRule ^blog/(.*)$ https://www.ejemplo.com/articulos/$1 [R=301,L]

3. Crear reglas demasiado amplias

Una regla como esta puede parecer eficiente:

RewriteRule ^(.*)$ https://www.ejemplo.com/nueva-pagina/ [R=301,L]

Pero redirige prácticamente todo. Es útil solo en casos muy concretos, por ejemplo, un dominio antiguo que debe enviar todo a una URL temporalmente informativa. En la mayoría de los sitios, es una red de pesca lanzada sobre una biblioteca.

4. Provocar bucles de redirección

Un bucle ocurre cuando una regla redirige una URL hacia otra que vuelve a activar la misma regla. Ejemplo peligroso:

RewriteEngine On

RewriteRule ^(.*)$ https://www.ejemplo.com/$1 [R=301,L]

Si ya estás en https://www.ejemplo.com/, esta regla puede seguir redirigiendo sin necesidad si no hay condiciones que filtren protocolo o host. Mejor usar condiciones:

RewriteEngine On

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\.ejemplo\.com$ [NC]
RewriteRule ^ https://www.ejemplo.com%{REQUEST_URI} [R=301,L]

5. No escapar puntos en dominios o extensiones

En expresiones regulares, el punto significa “cualquier carácter”. Para representar un punto literal, se escapa con barra invertida.

Mal:

RewriteCond %{HTTP_HOST} ^www.ejemplo.com$ [NC]

Bien:

RewriteCond %{HTTP_HOST} ^www\.ejemplo\.com$ [NC]

6. Olvidar los parámetros de URL

Las query strings pueden conservarse, añadirse o descartarse según la regla. En tiendas online, campañas PPC y sitios con filtros, esto puede afectar analítica, conversiones o contenido indexable. No es un detalle menor; es una rendija por donde se escapa el dinero.

7. Redirigir archivos estáticos sin querer

Reglas globales mal planteadas pueden afectar imágenes, CSS, JavaScript o PDFs. Por eso se usan condiciones como:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Estas condiciones excluyen archivos y directorios reales.

Cómo probar redirecciones 301 correctamente 🧪

Publicar una redirección sin probarla es un acto de fe. Y la fe, aunque respetable, no sustituye a curl.

Probar con curl

Desde terminal:

curl -I http://www.ejemplo.com/pagina-antigua/

Respuesta esperada:

HTTP/1.1 301 Moved Permanently
Location: https://www.ejemplo.com/pagina-nueva/

Para seguir toda la cadena de redirecciones:

curl -IL http://www.ejemplo.com/pagina-antigua/

Comprueba que el último estado sea 200 OK, salvo que el destino legítimo sea otro tipo de respuesta.

Probar en navegador

  1. Abre una ventana privada o de incógnito.
  2. Visita la URL antigua.
  3. Comprueba la URL final.
  4. Abre las herramientas de desarrollo con F12.
  5. En la pestaña “Network” o “Red”, revisa el código de estado y el encabezado Location.

Herramientas útiles

  • Screaming Frog SEO Spider para rastrear redirecciones a gran escala.
  • Sitebulb para auditorías técnicas visuales.
  • Google Search Console para detectar errores de rastreo e indexación.
  • Redirect Path, extensión de navegador útil para inspecciones rápidas.
  • Logs de Apache para ver qué está ocurriendo realmente en el servidor.

Revisar logs de Apache

Los logs no mienten, aunque a veces hablan con la caligrafía de un médico cansado. En servidores Linux suelen estar en rutas como:

  • /var/log/apache2/access.log
  • /var/log/apache2/error.log
  • /var/log/httpd/access_log
  • /var/log/httpd/error_log

Si aparece un error 500 después de editar .htaccess, revisa el log de errores. Muchas veces indicará una directiva no permitida, un módulo no habilitado o una sintaxis incorrecta.

Plantillas prácticas de redirecciones 301 listas para adaptar 🧰

Migración completa de HTTP a HTTPS y sin www

RewriteEngine On

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.ejemplo\.com$ [NC]
RewriteRule ^ https://ejemplo.com%{REQUEST_URI} [R=301,L]

Migración completa de HTTP a HTTPS y con www

RewriteEngine On

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\.ejemplo\.com$ [NC]
RewriteRule ^ https://www.ejemplo.com%{REQUEST_URI} [R=301,L]

Redirección de dominio antiguo a dominio nuevo conservando rutas

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?dominioantiguo\.com$ [NC]
RewriteRule ^(.*)$ https://www.dominionuevo.com/$1 [R=301,L]

Redirigir una categoría antigua a una nueva

RewriteEngine On

RewriteRule ^categoria-antigua/(.*)$ https://www.ejemplo.com/categoria-nueva/$1 [R=301,L]

Redirigir URLs con extensión .php a URLs limpias

RewriteEngine On

RewriteRule ^servicios\.php$ https://www.ejemplo.com/servicios/ [R=301,L]
RewriteRule ^contacto\.php$ https://www.ejemplo.com/contacto/ [R=301,L]

Redirigir una página eliminada a una alternativa relevante

Redirect 301 /guia-antigua-seguridad-wordpress/ https://www.ejemplo.com/blog/seguridad-wordpress/

Checklist final antes de publicar ✅

Antes de guardar el archivo y brindar con café frío —esa bebida oficial de tantas migraciones— revisa esta lista:

  • Has hecho copia de seguridad del archivo .htaccess.
  • Has probado las reglas primero con 302 si no estabas completamente seguro.
  • Las redirecciones específicas están antes que las generales.
  • No hay cadenas de redirección innecesarias.
  • No hay bucles.
  • Las URLs antiguas llevan a destinos equivalentes y útiles.
  • La versión canónica del dominio está clara: con o sin www.
  • HTTP redirige correctamente a HTTPS.
  • El sitemap XML contiene solo URLs finales.
  • Los enlaces internos han sido actualizados.
  • Los canonical tags apuntan a URLs finales.
  • Has probado con curl -I o herramientas de rastreo.
  • Has revisado Google Search Console después de publicar.

Una redirección bien hecha es invisible, y ahí está su mérito 🌉

Las mejores redirecciones 301 no se notan. Nadie aplaude cuando una URL antigua conduce sin ruido a su nuevo hogar. Nadie escribe a soporte para decir: “Qué maravilla, su encabezado Location ha sido impecable”. La gloria de la infraestructura suele ser esa: funcionar sin reclamar escenario.

Pero bajo esa discreción hay estrategia. Una redirección 301 efectiva protege tráfico orgánico, preserva enlaces externos, mejora la experiencia del usuario, evita duplicidades y mantiene limpia la arquitectura del sitio. Es pequeña como una bisagra y decisiva como una puerta.

Editar .htaccess en Apache exige respeto, no miedo. Con una copia de seguridad, reglas ordenadas, pruebas rigurosas y una comprensión clara de lo que ocurre en cada salto, las redirecciones dejan de ser un parche y se convierten en una forma elegante de continuidad. Porque en la web, como en las ciudades antiguas, las calles cambian de nombre; lo importante es que la gente siga encontrando el camino.

Deja una respuesta