Para algunas personas es difícil entender que es una redirección 301 porque es necesario comprender otros conceptos como el protocolo HTTP y sus códigos de estado. Para definir ¿qué es una redirección 301? vamos a explicar brevemente de forma individual tanto "redirección" como "301".
Una redirección es la transferencia una solicitud que llega de una entrada a otra entrada. Un ejemplo de esto es cuando llegas a una tienda para comprar un libro, pero ya se agotó en esa sucursal y te dicen que vayas a otra sucursal donde si tienen existencia. Te está redireccionando de una sucursal a otra cuando quieres comprar un libro, eso mismo pasa con las direcciones URL.
Ahora, el 301 solo es un código de estado, solamente te indica el motivo de la redirección, te dejo un enlace a una tabla de estados HTTP que te van a ser de utilidad para otros códigos.El código 301 en específico significa que la página que se estaba buscando ya no se encuentra en la dirección que se pide y que fue movida permanentemente a otra dirección.
El código 301 en específico significa que la página que se estaba buscando ya no se encuentra en la dirección que se pide y que fue movida permanentemente a otra dirección.
Cuando un buscador indexa una página con una URL que fue renombrada, cuando intente acceder nuevamente no la va a encontrar y el servidor va a regresar un código de estado 404 y es cuando vemos la típica página que dice "Página no encontrada, error 404". Como el buscador no sabe que la página cambió de URL hay que indicarle que esa página fue movida a otra URL usando una redirección 301, el buscador lee el código de estado y se redireccionará a la nueva URL. Internamente el buscador reindexará la nueva URL y eliminará la anterior, de esta forma llevará a los visitantes a la nueva ubicación de la página.
Lo recomendable es dejar permanentemente todas las redirecciones realizadas porque en internet hay muchos buscadores y cada uno de ellos se va a dar cuenta de la reubicación de la página en tiempos independientes, además puede que haya enlaces que se hayan generado en otros dominios o enlaces internos que aun apuntan a la URL anterior.
A continuación voy a dejar varios ejemplos de como redireccionar una pagina usando una redirección 301 y voy a explicar sus ventajas y desventajas dependiendo de los escenarios en los que te puedas encontrar.
Cómo redireccionar una pagina web a otra con una redirección 301 desde el htaccess
Este tipo de redirección es la más recomendable y simple por varias razones. El htaccess (.htaccess) es un archivo que se encuentra en la carpeta raíz de la página o aplicación y simplemente es una extensión de la configuración de apache donde podemos personalizar varias directivas para cada página que tengamos en el mismo servidor. Esto es una ventaja porque para modificar las directicas de apache necesitamos modificar el archivo de configuración global y este archivo solo puede ser modificado por el administrador del mismo servidor y es necesario reiniciar el servicio para aplicar los cambios. Pero si personalizamos las directivas desde el htaccess, los cambios se aplican en vivo sin necesitar de la ayuda del administrador y si reiniciar el servidor web.
Para hacer la redirección 301 desde el archivo .htacces es necesario escribir la siguiente línea al inicio del archivo:
redirect 301 /ruta-origen /ruta-destino
Cómo redireccionar una pagina con un redireccionamiento 301 desde un virtualhost
Para esta redirección es necesario del apoyo del administrador del servidor porque es necesario modificar o crear archivos de configuración del servidor web, que podría ser apache.
La única ventaja que veo es la seguridad para que ningún otro usuario del servidor pueda modificar la redirección que haya establecido el administrador, no importa lo que agreguen en el .htacceso puesto que la redirección sucede antes de leer este archivo.
La desventaja es que es un poco más complicado porque por el hecho de que se necesitan los privilegios del administrador y que es necesario reiniciar el servidor web. Fuera de esto, es el mismo efecto que si se hacer desde el htaccess.
<VirtualHost *:80>
ServerName www.domain1.com
redirect 301 /ruta-origen /ruta-destino
</VirtualHost>
¿Cómo redireccionar un dominio a otro?
Si vas a migrar todo el contenido (entradas, publicaciones, páginas de sección o categorías) es necesario que uses condiciones y reglas de redireccionamiento, de esta forma puedes aplicar la redirección a todos los contenidos con unas pocas líneas.
Escribe lo siguiente en el archivo htaccess o dentro de la configuración del virtualhost de tu página:
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} !^\. [NC]
RewriteRule (.*) http%{ENV:protossl}://www.example.com/$1 [R=301,L,QSA]
</IfModule>
Redireccion 301 en WordPress
WordPress es un CMS que es usado en la mayoría de los blogs y páginas en internet porque es fácil de usar, de instalar en un servidor hosting, de instalar plantillas o plugins, etc. Esto permite a personas que no tienen conocimientos avanzados en programación web a crear sus propias páginas para blogs, empresas o tiendas e línea.
Entrando en materia, hay muchos plugins para hacer redireccionamientos 301 de una forma fácil y rápida, te dejo una pequeña lista de plugins:
En lo particular, para mi todos los plugins son iguales porque no los recomiendo porque no los uso. Pero ¿porqué?, bueno te explico las ventajas y desventajas y tu sacas tus propias conclusiones.
Ventajas: Solo una. Si no tienes muchos conocimientos de programación o eres novato en administrar páginas con WordPress es recomendable instalar un plugin porque es fácil de configurar los redireccionamientos.
Desventajas: Al instalar un plugin haces que el WordPress se haga un poquito más pesado hablando en términos de procesamiento de código porque se tiene que ejecutar una parte del código de WordPress hasta que se da cuenta que tiene que hacer un redireccionamiento. Esto no impacta demasiado pero si tienes muchas redirecciones y además tienes muchas visitas, tu sitio va a tardar un poco en hacer los redireccionamientos y el tiempo es importante hablado de SEO porque te afecta en tiempos de carga de la página.
Si quieres ganar unos cuantos segundos o milisegundos en la carga de las páginas, es mejor usar otras alternativas como la redirección 301 en el .htaccess, de esta forma nunca se ejecuta el código del WordPress porque apache detecta que el sitio tiene directivas locales en el archivo htaccess y es cuando encuentra los direccionamientos y los ejecuta en caso de que haya una coincidencia en una URL.
Redirección 301 http a https
El "Redirect http to https" es una redirección va a ser necesaria cuando compramos un certificado SSL para nuestro sitio especialmente si es una tienda en línea. Todo el contenido indexado por los motores de búsqueda van a tener http:// y con el siguiente código escrito en el virtualhost vamos a redireccionarlo al puerto seguro que sería https://
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Si el HTTP Redirect lo quieres implementar en el archivo htacces solo agrega lo siguiente al final.
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Redirección 301 GoDaddy
Cuando ya compraste el certificado en GoDaddy, solo tienes que agregar las siguientes líneas en el archivo htaccess tal y como te lo indica en su página de ayuda
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Redirección 301 y 302
Ya hemos explicado el significado del 301 pero ¿qué tiene de diferencia con la redirección 302? La redirección 302 hace exactamente lo mismo que con el 301 con la diferencia de que indica a los motores de búsqueda que la página ha cambiado temporalmente de URL y que en un corto tiempo va a regresar a la URL original. De esta forma los motores de búsqueda no eliminan las URL originales de su indexación y no agregan la nueva URL porque es temporal el cambio.
Redirección 301 de www a sin www
Con las siguientes líneas en el archivo htaccess vamos a cambiar la URL de las páginas de http://www.midominio.com a http://midominio.com
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
Redirección 301 sin www a www
Este es el caso contrario al caso anterior, coloca las siguientes líneas en el archivo htaccess vamos a cambiar la URL de las páginas de http://midominio.com a http://www.midominio.com
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Redirección desde lenguajes de programación
Para que funcione en la mayoría de los leguajes es necesario que no se haya escrito ni un carácter, de lo contrario te puede salir algún error y no se aplique el redireccionamiento o HTTP Redirect.
Redirección 301 con PHP
<?php header( "HTTP/1.1 301 Moved Permanently"); header( "Location: http://www.midominio.com"); ?>
Redirección 301 con ASP
<%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://www.midominio.com/" %>
Redirección 301 con JSP
<% response.setStatus(301); response.setHeader( "Location", "http://www.midominio.com/" ); response.setHeader( "Connection", "close" ); %>
Redirección 301 con javascript
Muchas personas preguntan ¿cómo se hace una redirección 301 con javascript? Se puede hacer una redirección pero no se puede indicar el código de estado 301 porque cuando se ejecuta el javascript, la petición de la página y el código de estado se establece al momento de la petición y javascript no interviene en el momento de la petición sino que se ejecuta después. Pero te dejo como se hace una redirección normal:
<script> window.location.href = "http://midominio.com"; </script>
Redirección 301 en HTML
Es el mismo caso que con javascript, no se puede definir el código de estado pero podemos hacer un HTML Redirect usando una meta etiqueta:
<meta http-equiv="refresh" content="0;url=http://www.midominio.com">
La anterior meta redirect va a refrescar la página (http-equiv="refresh") con el contenido en la URL http://www.midominio.com, y el 0 (cero) que se encuentra antes de la URL es la cantidad de segundos que va a esperar para hacer el redireccionamiento automáticamente.
¿Por qué mi redirección 301 no funciona?
Como ya le había mencionado algunos párrafos atrás, cuando usas una redirección dentro de un lenguaje de programación en la mayoría de los casos es indispensable hacer la redirección antes de escribir cualquier cosa en el documento HTML.
Si aplicas el redireccionamiento en el htaccess o en los archivos de configuración de apache, es probable que esté mal escrita la directiva o que no se encuentre en el lugar correcto del archivo, las redirecciones usadas con la directiva redirect se deben de agregar al inicio del archivo htaccess, mientras que las directivas RewriteCond y RewriteRule deben de estar al final.