Redirección 301 con .htaccess
Le explicamos cómo configurar en Apache, con .htaccess, las redirecciones de www, HTTPS y direcciones antiguas conservando el valor SEO, cómo probarlas y cómo resolver los errores de bucle.

Para una redirección con htaccess, mod_rewrite debe estar activado en Apache y las reglas deben escribirse en el archivo .htaccess de la carpeta raíz del sitio, después de la línea RewriteEngine On. En los traslados permanentes se usa la bandera R=301; así el navegador y los buscadores pasan a la nueva dirección y el valor de posicionamiento de la antigua se conserva en gran medida. Pruebe antes las reglas con curl -I.
¿Qué es una redirección 301 y cuándo hace falta?
La redirección 301 es la respuesta HTTP que indica que una dirección se ha trasladado de forma permanente a otra. El navegador lleva automáticamente al visitante a la nueva dirección, y los buscadores sustituyen con el tiempo la dirección antigua del índice por la nueva.
Las redirecciones 302 y 307, en cambio, son temporales; se usan en situaciones de corta duración, como una campaña o una página de mantenimiento. Usar una redirección temporal en un cambio permanente puede hacer que el buscador siga manteniendo la dirección antigua en su índice.
La necesidad de redirigir suele surgir en estos casos: pasar el sitio a HTTPS, elegir entre la versión con www y la versión sin www, cambiar las direcciones de las páginas, cambiar de dominio o pasar a un sitio nuevo. En las renovaciones de sitios, asignar una por una las direcciones antiguas es uno de los pasos más críticos del proceso de diseño web SEO.
Requisitos previos: mod_rewrite y AllowOverride
El archivo .htaccess solo funciona en Apache y en servidores compatibles con Apache (como LiteSpeed). Nginx no lee este archivo; si usa Nginx, debe escribir las mismas reglas en el bloque del servidor, y los detalles están en nuestra guía de instalación de Nginx.
En el hosting compartido, mod_rewrite suele estar activado y puede pasar directamente a las reglas. Si gestiona su propio servidor, debe activar el módulo y habilitar el valor AllowOverride en la configuración del host virtual; de lo contrario, Apache ignora por completo el archivo .htaccess.
sudo a2enmod rewrite
sudo nano /etc/apache2/sites-available/ornek.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2<Directory /var/www/ornek.com/public_html>
AllowOverride All
Require all granted
</Directory>Redirección a HTTPS y www
Un sitio puede abrirse como mínimo con cuatro direcciones distintas: http y https, con www y sin www. Lo más limpio es elegir una única dirección principal y redirigir las otras tres a ella en un solo paso. Las redirecciones en cadena (primero a HTTPS y luego a www) son lentas y además desperdician el presupuesto de rastreo.
Antes de pasar a la redirección a HTTPS, asegúrese de que el servidor tiene un certificado válido; explicamos la instalación en la guía de instalación de un certificado SSL. Redirigir a HTTPS sin certificado hace que el visitante vea una advertencia de seguridad.
Por qué HTTPS ya no es una opción sino una obligación, y los tipos de certificado, lo explicamos en detalle en el artículo qué es un certificado SSL. Una vez elegida la dirección principal, asegúrese de que las etiquetas canónicas, el mapa del sitio y los enlaces internos también usan esa dirección; de lo contrario, envía señales contradictorias al buscador.
Forzar sin www y HTTPS
La regla siguiente redirige la solicitud en un solo paso a la dirección https sin www si HTTPS está desactivado o si la dirección empieza por www. La última condición captura el nombre de dominio y %1 usa ese valor capturado.
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]Forzar con www y HTTPS
Si su dirección principal es la versión con www, escriba la regla así.
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=301]Mover páginas, carpetas y dominios antiguos
Cuando cambia la estructura de las direcciones, cada página antigua debe redirigir a la página nueva más cercana en contenido. Redirigir todas las direcciones antiguas a la página de inicio parece fácil, pero los buscadores suelen interpretarlo como un soft 404 y el valor de la página antigua se pierde.
El orden de las reglas importa: las reglas específicas van arriba y las generales abajo. Apache procesa las reglas de arriba abajo, y la bandera L detiene el procesamiento de esa pasada después de la regla que coincide.
En los traslados grandes, empiece preparando un mapa de redirecciones: una tabla con la dirección antigua a la izquierda, la nueva a la derecha y, al lado, el tráfico y el número de enlaces de la página. Esta lista le servirá de guía tanto al escribir las reglas como al comprobarlas una por una tras la publicación. Para las páginas que se han eliminado de verdad y no tienen equivalente, devolver una respuesta 410 o 404 en lugar de una redirección es una señal más honesta.
- En traslados sencillos de una sola página también puede usarse la línea Redirect 301 de mod_alias, pero no mezclarla con RewriteRule en el mismo archivo evita sorpresas con el orden.
- Extraiga la lista de direcciones antiguas de Search Console y del antiguo mapa del sitio; no se deje ninguna página importante.
- En un cambio de dominio, utilice también la herramienta Cambio de dirección de Search Console.
RewriteEngine On
# Tek sayfa
RewriteRule ^eski-sayfa\.html$ /yeni-sayfa/ [R=301,L]
# Traslado de carpeta: /haberler/... -> /blog/...
RewriteRule ^haberler/(.*)$ /blog/$1 [R=301,L]
# Redirección descartando la cadena de consulta
RewriteCond %{QUERY_STRING} ^id=15$
RewriteRule ^urun\.php$ /urunler/deri-canta/ [R=301,L,QSD]
# Cambio de dominio (en el .htaccess del dominio antiguo)
RewriteCond %{HTTP_HOST} ^(www\.)?eskialan\.com$ [NC]
RewriteRule ^(.*)$ https://yenialan.com/$1 [R=301,L]Quitar la extensión .html
En los sitios estáticos puede que quiera usar direcciones limpias como /hakkimizda en lugar de /hakkimizda.html. Para ello hacen falta dos reglas: una redirige con 301 las solicitudes con extensión a la dirección sin extensión, y la otra asocia en segundo plano la solicitud sin extensión con el archivo .html correspondiente.
En la primera regla es importante usar %{THE_REQUEST}; esta variable conserva la solicitud original que envía el navegador e impide que la reescritura interna se convierta de nuevo en una redirección y genere un bucle infinito.
RewriteEngine On
# /sayfa.html -> /sayfa (301)
RewriteCond %{THE_REQUEST} \s/([^.\s]+)\.html[\s?] [NC]
RewriteRule ^ /%1 [R=301,L]
# Asociar la solicitud /sayfa al archivo sayfa.html (reescritura interna)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L]¿Cómo pruebo las redirecciones?
Los navegadores guardan en caché la respuesta 301. Cuando corrige una regla errónea, su navegador puede seguir recordando la redirección anterior; por eso, durante las pruebas use primero R=302 y, cuando todo sea correcto, cámbielo a 301. Lo más fiable es hacer las pruebas en una ventana de incógnito o desde la línea de comandos.
El comando curl muestra claramente el código de respuesta y la cabecera Location. Con el parámetro -L puede seguir toda la cadena y, si hay varios pasos, reducirlos a una sola redirección.
- En Windows PowerShell, escriba curl.exe en lugar de curl; de lo contrario, podría ejecutarse otro comando.
- Para probar en local, puede usar un paquete que incluya Apache, como XAMPP.
- Tras la puesta en producción, vigile durante unas semanas los informes de redirecciones y de indexación en Search Console.
curl -I http://www.ornek.com/eski-sayfa.html
# Para ver toda la cadena
curl -sIL http://ornek.com | grep -iE '^(HTTP|location)'Errores frecuentes y soluciones
La mayoría de los problemas de redirección se manifiestan con unos pocos síntomas conocidos. El registro de errores de Apache (en Ubuntu, /var/log/apache2/error.log) suele indicar en qué línea está el problema.
| Síntoma | Posible causa y solución |
|---|---|
| 500 Internal Server Error | Error de escritura o mod_rewrite desactivado; deshaga la última línea añadida y consulte el registro de errores. |
| ERR_TOO_MANY_REDIRECTS | Las reglas se redirigen entre sí o no se detecta HTTPS detrás de un proxy. |
| La regla no funciona en absoluto | AllowOverride None o archivo en la carpeta equivocada; compruebe la configuración del host virtual. |
| La nueva dirección da 404 | La ruta de destino es incorrecta o está escrita en relativo; añada / al principio del destino. |
| La corrección no se ve | El navegador usa el 301 antiguo desde la caché; pruebe en una ventana de incógnito o con curl. |
Detrás de Cloudflare o de un balanceador de carga
Si el SSL termina en el proxy, la solicitud que llega al servidor siempre aparece como HTTP y la condición %{HTTPS} off provoca un bucle infinito. En ese caso, compruebe la cabecera X-Forwarded-Proto que envía el proxy o haga la redirección a HTTPS desde el panel del proxy.
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Preguntas frecuentes
01¿La redirección 301 traslada todo el valor SEO?
Una redirección permanente al destino correcto transfiere a la nueva dirección la mayor parte de las señales de la antigua. Aun así, durante la transición puede haber fluctuaciones temporales en las posiciones; las redirecciones a destinos cuyo contenido no coincide, en cambio, hacen perder valor.
02¿Cuánto tiempo debo mantener las redirecciones?
No quite las redirecciones mientras otros sitios sigan enlazando a las direcciones antiguas. En la práctica, lo más seguro es mantenerlas como mínimo un año y, en las páginas importantes, de forma indefinida.
03¿Hace falta también una redirección para la barra final?
Los buscadores pueden ver las direcciones /hakkimizda y /hakkimizda/ como páginas distintas. Decidir cuál va a usar y redirigir la otra con 301 evita que el mismo contenido se indexe en dos direcciones. Lo importante es que la elección sea coherente en todo el sitio.
04¿Muchas redirecciones ralentizan el sitio?
Unos cientos de líneas de reglas no producen una lentitud apreciable, pero como .htaccess se lee en cada solicitud, miles de líneas suponen una carga adicional. A esa escala es más eficiente trasladar las reglas a la configuración del host virtual o a un archivo de correspondencias con RewriteMap.
Las redirecciones 301 bien configuradas evitan que se pierdan su esfuerzo y su tráfico al cambiar de dirección. Si desea llevar a la vez, al renovar el sitio, la correspondencia de direcciones antiguas, las redirecciones y los controles de SEO técnico, consulte nuestro servicio de diseño web SEO y, para las mejoras de velocidad tras la publicación, nuestro trabajo de velocidad y rendimiento. Para vigilar con regularidad sus datos de búsqueda, puede aprovechar también nuestro apoyo en SEO y analítica y, en los proyectos de traslado de una plataforma e-commerce, trabajar con nuestro equipo de diseño web.


