Prueba tus redirecciones web y respuestas HTTP
La redirección 301
La redirección 301, o redirección permanente, indica al navegador y a los robots de los motores de búsqueda que la página visitada ha cambiado definitivamente de dirección. Los motores de búsqueda actualizan su índice y transfieren el "peso" SEO a la nueva URL.
Redirección 301 en PHP
Colócalo al comienzo del archivo PHP, antes de cualquier salida HTML:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.ejemplo.net/nueva-pagina.php");
exit();
?>
Redirección 301 con .htaccess (Apache)
Método sencillo con la directiva RedirectPermanent:
Redirigir una página:
RedirectPermanent /directorio/pagina-antigua.html https://www.ejemplo.net/nueva-pagina.html
Redirigir un directorio completo:
RedirectPermanent /directorio-antiguo https://www.ejemplo.net/directorio-nuevo
Redirigir un dominio completo:
RedirectPermanent / https://www.ejemplo.net/
Redirección 301 con mod_rewrite (.htaccess)
Más potente, mod_rewrite permite usar expresiones regulares. Ejemplos habituales:
Forzar HTTPS (HTTP → HTTPS):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Forzar www (sin www → con www):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Eliminar www (con www → sin www):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]
Redirigir una URL antigua a una nueva:
RewriteEngine On
RewriteRule ^pagina-antigua\.html$ /nueva-pagina.html [L,R=301]
Redirección 301 con Nginx
En el archivo de configuración de Nginx (bloque server):
Redirigir una página concreta:
location = /pagina-antigua.html {
return 301 https://www.ejemplo.net/nueva-pagina.html;
}
Forzar HTTPS:
server {
listen 80;
server_name ejemplo.net www.ejemplo.net;
return 301 https://$host$request_uri;
}
Forzar www:
server {
listen 443 ssl;
server_name ejemplo.net;
return 301 https://www.ejemplo.net$request_uri;
}
Eliminar www:
server {
listen 443 ssl;
server_name www.ejemplo.net;
return 301 https://ejemplo.net$request_uri;
}
Nota: los códigos 307 (redirección temporal que conserva el método HTTP) y 308 (redirección permanente que conserva el método HTTP) también existen, pero se usan poco en la práctica.