Cómo se calcula
Una redirección es una respuesta del servidor con un código de estado 3xx y una cabecera Location. El navegador, o un buscador, pide entonces la dirección nueva. El generador escribe la redirección lo antes posible: en Nginx, un bloque server que no hace nada más; en Apache, reglas de reescritura al principio de .htaccess.
# Apache, .htaccess
RewriteRule ^old-page\.html$ /new-page [R=301,L]
# Nginx
location = /old-page.html {
return 301 /new-page;
} Apache compara con una expresión regular, así que los puntos y otros caracteres especiales de una ruta se escapan, y la barra inicial se omite porque .htaccess la quita. Nginx compara una location exacta como texto plano. Ambos conservan la cadena de consulta del visitante salvo que la dirección antigua tuviera una propia. Las reglas de HTTPS y www van a la dirección final en un solo paso, en lugar de pasar por dos redirecciones seguidas.
Ejemplo
Mueves example.com a www.example.com: las peticiones a http://example.com/blog, http://www.example.com/blog y https://example.com/blog reciben todas una sola 301 a https://www.example.com/blog. Solo https://www.example.com se sirve con normalidad.
Qué código de estado usar
| Código | Significado | Úsalo para |
|---|---|---|
| 301 | Movido permanentementeUna página o un sitio que se mudó para siempre. Los buscadores pasan el posicionamiento de la dirección antigua a la nueva. | Una página o un sitio que se mudó para siempre. Los buscadores pasan el posicionamiento de la dirección antigua a la nueva. |
| 302 | Encontrado, temporalmente en otro sitioUn desvío corto, como una página de ofertas o un mantenimiento. La dirección antigua se queda en los resultados de búsqueda. | Un desvío corto, como una página de ofertas o un mantenimiento. La dirección antigua se queda en los resultados de búsqueda. |
| 307 | Temporal, mismo métodoComo 302, pero un formulario enviado con POST se vuelve a enviar con POST. | Como 302, pero un formulario enviado con POST se vuelve a enviar con POST. |
| 308 | Permanente, mismo métodoComo 301, pero mantiene POST. Útil para una API o un endpoint de formulario que se mudó. | Como 301, pero mantiene POST. Útil para una API o un endpoint de formulario que se mudó. |
Preguntas
¿Cuál es la diferencia entre una redirección 301 y una 302?
Una 301 dice que la dirección se mudó para siempre: los navegadores la recuerdan y los buscadores sustituyen la dirección antigua por la nueva. Una 302 dice que el cambio es temporal, así que la dirección antigua conserva su lugar. Usa 301 para un dominio nuevo, HTTPS o una página renombrada; Google trata de todos modos como una 301 una 302 mantenida mucho tiempo.
¿Debo redirigir www a sin www o al revés?
Cualquiera de las dos sirve para los buscadores, siempre que elijas una y redirijas la otra hacia ella. La forma corta es más fácil de escribir; www facilita fijar cookies solo para el sitio y apuntar el nombre a un CDN con un registro CNAME.
¿Por qué mi redirección entra en bucle?
Normalmente porque HTTPS termina en un proxy o CDN y el servidor ve cada petición como http://, así que redirige incluso las https://. Marca la opción de proxy para comprobar en su lugar la cabecera X-Forwarded-Proto. En Cloudflare, el modo SSL Full (strict) evita el problema. Vacía la caché del navegador tras arreglarlo: los navegadores recuerdan las redirecciones 301.
¿Nginx lee archivos .htaccess?
No. Nginx no tiene archivos de configuración por carpeta, así que las reglas de un archivo .htaccess hay que escribirlas en la configuración del servidor, como en la pestaña de Nginx de aquí, y recargar Nginx. Eso requiere acceso al servidor, que un VPS da y el hosting compartido normalmente no.