Redirecciones 301 imprescindibles para migraciones o cambios de URL en WordPress sin perder SEO

Cuando tienes que hacer cambios en URLs o migraciones de WordPress siempre hay que tener un especial cuidado en no perder el posicionamiento SEO de las URLs anteriores.

Da igual cuál vaya a ser el cambio, de una sola URL o de un dominio completo, es vital que, si tenías ya una URL bien posicionada en Google o el resto de buscadores, tras el cambio de URLs los enlaces posicionados no lleven a una página de error 404, sino a la nueva URL.

Para este objetivo no hay nada mejor que conocer las reglas de redirección 301, o redirección permanente, que debemos añadir al archivo .htaccess del servidor para conseguir mantener el SEO de las URLs antiguas, que este se traspase a las nuevas, y que no lleven a páginas de error.

Nota importante: Haz siempre copia de seguridad del archivo .htaccess antes de aplicar cualquier redirección nueva, y si tras guardar los cambios tu web da algún error recupera la copia de seguridad y habla con tu proveedor de hosting para preguntarles por qué no te ha funcionado la redirección, por si tuviesen alguna limitación por su parte.

Nota: En los ejemplos de redirecciones cambia siempre los dominios de ejemplo por los tuyos.

Redirección 301 de URLs sin www a URLs con www

Si quieres forzar que las URLs de tu dominio, anteriormente sin www, se conviertan en URLs con www, añade lo siguiente al archivo .htaccess del servidor donde esté alojado tu dominio.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

Redirección 301 de URLs con www a URLs sin www

El ejemplo contrario, para no usar las www, sería así:

<IfModule mod_rewrite.c>
# Redirigir de www a no www
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</IfModule>

Redirección 301 de URLs HTTP a URLs HTTPS

Si acabas de instalar un certificado SSL para tu web es fundamental que redirijas todas las peticiones HTTP a HTTPS, así:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Redirección 301 de URLs HTTPS a URLs HTTP

Si tu situación es la contraria, que has decidido no servir con HTTPS, lo que deberías añadir sería esto otro:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Redirección 301 de un dominio a otro

Esta situación es quizás la más buscada, cuando haces un cambio de dominio por algún motivo. En este caso debes añadir lo siguiente al archivo .htaccess de la instalación del dominio antiguo.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://nuevodominio.com/$1 [R=301,L]
</IfModule>

Esto significa, además, que no debes dar de baja ni borrar el alojamiento donde esté el dominio anterior, o dejará de funcionar la redirección 301. Eso sí, puedes borrar toda la instalación de WordPress y archivos, así como el resto de reglas previas en el .htaccess del dominio anterior, la única que importa normalmente ya será esta, la redirección al nuevo dominio.

¿Cuánto tiempo deberías dejarlo activo? Pues, a modo de ejemplo extremo, yo hace como 5 años que redirigí el dominio ciberprensa.com a tellado.es, y aún mantengo el alojamiento (mínimo) asociado a ciberprensa.com con la redirección. Igual es demasiado tiempo, y ya podría anular el alojamiento, pero no me pide pan y con los designios de Google prefiero no arriesgar.

Pero bueno, quizás es exagerar un poco. La idea es que vigiles el cambio de dominio, y cuando ya no veas en tus búsquedas habituales de tu contenido resultados con el dominio anterior, y veas que estos han sido sustituidos por resultados con el nuevo dominio, ya podrías anular el alojamiento donde estuviese el dominio anterior, y dejar solamente una redirección directa de dominio a dominio desde el hosting, sin tener que mantener ningún alojamiento.

Para finalizar, aunque Google va a recoger sin problema los cambios de URL tras un cambio de dominio, y ya hace tiempo que anunció que no se pierde PageRank al cambiar de dominio si se hace una correcta redirección 301, puede ayudar que uses su herramienta de cambio de dominio para hacer seguimiento desde la Search Console.

Redirección 301 de un subdominio a un dominio

Aquí debes hacer lo mismo que en el ejemplo anterior, en este caso en el archivo .htaccess donde esté el subdominio:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://nuevodominio.com/$1 [R=301,L]
</IfModule>

Redirección 301 de una carpeta a un dominio

Exactamente igual que en los 2 casos anteriores, la instalación de origen no importa, funciona igualmente, lo importante es indicar a dónde debe hacerse la redirección 301:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://nuevodominio.com/$1 [R=301,L]
</IfModule>

Redirección 301 de dominio a subdominio

Ahora vamos a ponernos en el caso contrario, en que tras años pagando por un dominio hayas decidido que mejor quieres tu instalación en un subdominio. Pues bien, tras mover toda tu instalación, en el archivo .htaccess del dominio anterior añade lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://subdominio.midominio.com/$1 [R=301,L]
</IfModule>

Redirección 301 de dominio a subcarpeta

Y lo mismo sería si has decidido mover tu contenido a una subcarpeta en un dominio:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://midominio.com/mi-carpeta/$1 [R=301,L]
</IfModule>

Redirección 301 de subdominio a subcarpeta

Un ejemplo algo diferente sería cambiar de subdominio a subcarpeta. En este caso sería de este modo:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://midominio.com/mi-carpeta/$1 [L,NE,R=301]
</IfModule>

Redirección 301 de una página a otra

Estas redirecciones son las más habituales en cualquier web, WordPress o no, pues sirven para redirigir el tráfico de una entrada o página a otra cuando borramos, queda obsoleta, o lo que sea, la primera. Se hacen así:

<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /mi-pagina-anterior/ /mi-nueva-pagina/
</IfModule>

Otro modo de hacer estas redirecciones, exactamente igual de efectivo que el anterior, sería así:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^mi-pagina-anterior/$ https:/midominio.com/mi-nueva-pagina/ [R=301,L]
</IfModule>

Si vas a crear varias redirecciones de este tipo no es necesario que añadas IfModule y RewriteEngine On para cada una, basta con hacerlo una sola vez, como en este ejemplo:

<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /mi-pagina-anterior/ /mi-nueva-pagina/
Redirect 301 /mi-otra-pagina-anterior/ /mi-otra-nueva-pagina/
</IfModule>

Y con el otro método exactamente igual:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^mi-pagina-anterior/$ https:/midominio.com/mi-nueva-pagina/ [R=301,L]
RewriteRule ^mi-otra-pagina-anterior/$ https:/midominio.com/mi-otra-nueva-pagina/ [R=301,L]
</IfModule>

Y así sucesivamente.

Nota importante: Si vas a hacer muchas redirecciones de entradas o páginas, mejor que uses un plugin como Redirection. Te evitarás tener que estar editando el archivo .htaccess y posibles errores de tecleo, y además el plugin puede hacer redirecciones automáticamente por ti cuando hagas un cambio de slug.

Redirección 301 de URLs con día y nombre a URLs solo con el nombre

Esto es muy habitual en sitios que han migrado de WordPress.com a WordPress, pues en el servicio de blogs de Automattic las URLs por defecto son con día nombre (/%year%/%monthnum%/%day%/%postname%/) , y no se pueden cambiar en la mayoría de los planes.

En cualquier caso, si has cambiado los enlaces permanentes de día y nombre (/%year%/%monthnum%/%day%/%postname%/) a solo el nombre (%postname%) debes añadir lo siguiente para no perder posicionamiento:

RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://midominio.com/$4

Redirección 301 de URLs con mes y nombre a URLs solo con el nombre

Si los enlaces permanentes anteriores eran del tipo de mes y nombre (/%monthnum%/%day%/%postname%/), y has cambiado a solo nombre (%postname%), entonces debes añadir esto otro:

RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ https://midominio.com/$3

Redirección 301 de URLs numéricas a URLs solo con el nombre

Si tenías los enlaces permanentes numéricos (/archivos/%post_id%) y quieres que tengan solo el nombre (%postname%) entonces esta es la redirección:

RedirectMatch 301 ^/archivos/(\d+)$ https://midominio.com/?p=$1

Redirección 301 de URLs simples a URLs con nombre

Esta redirección no es necesaria, pues las URLs simples de WordPress (?p=123) siempre redirigirán a la estructura de enlaces permanentes activa actualmente, sea la que sea.

Redirección 301 de URLs con la categoría y el nombre a URLs solo con el nombre

Si en algún momento creaste enlaces permanentes personalizados, que incluyesen la categoría en la URL (/%category%/%postname%/), algo muy habitual dicho sea de paso, y en algún momento vuelves a las URLs solo con el nombre (%postname%), deberías añadir una redirección 301 para no arruinar tu SEO, así:

RedirectMatch 301 ^/<category>/(.*)$ https://midominio.com/$1

Redirección 301 de URLs sin barra final (/) a URLs con barra final

Esto pasa cuando quieres redirigir todas las URLs de una web con barra al final a URLS sin la barra al final.

Se haría así:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
</IfModule>

Todas las URLs del tipo https://midominio.com/mi-entrada/ pasarían a ser https://midominio.com/mi-entrada

Redirección 301 de URLs con barra final (/) a URLs sin barra final

Si tu caso es justamente el contrario, lo que tendrías que añadir sería lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

</IfModule>

Aquí consigues todo lo contrario, que todas las URLs https://midominio.com/mi-entrada pasen a ser https://midominio.com/mi-entrada/

Redirección de URLs con extensión a URLs sin extensión

Imagina que en su momento decidiste añadir una extensión a los enlaces permanentes de tu web, por ejemplo .htm, pero luego te arrepientes y quieres quitar las extensiones, pero sin perder el SEO conseguido.

U otro ejemplo, que vas a redirigir todas las URLs de una web HTML simple, todas con extensión .html, a URLs creadas con WordPress, sin extensión.

Si es lo que necesitas, un ejemplo del código, si provienen de la extensión .html, sería así:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/?(.*).(html)$ /$1 [R=301,L]
</IfModule>

Todas las URLs como https://midominio.com/mi-entrada.html pasarían a ser https://midominio.com/mi-entrada

Otro ejemplo, en este caso si las URLs terminan en .php, típico de instalaciones de otros CMS, sería así:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/?(.*).(php)$ /$1 [R=301,L]
</IfModule>

Redirección 301 de URLs AMP a URLs no AMP

Si hace poco has decidido desactivar AMP de tu web, es vital que añadas la siguiente redirección 301 de tus URLs AMP a las URLs no AMP:

RewriteEngine On
RewriteCond %{REQUEST_URI} (.+)/amp(.*)$
RewriteRule ^ %1/ [R=301,L]
RewriteCond %{QUERY_STRING} ^(.*)?amp=1$
RewriteRule (.*) /$1? [R=301,L]

Redirección 301 de URLs en mayúsculas a URLs en minúsculas

Seguro que ya sabrás que los servidores web distinguen entre mayúsculas y minúsculas ¿verdad?

O sea, que para un servidor, y tu navegador, no es lo mismo la URL https://midominio.com/MI-ENTRADA/ que la URL https://midominio.com/mi-entrada/.

Pues bien, te puedes encontrar en la situación de haber tenido que cambiar URLs con mayúsculas a URLs con minúsculas, en cuyo caso deberías forzar redirecciones permanentes (301) de las viejas URLs con mayúsculas a las nuevas URLs en minúsculas.

Esto es lo que debes añadir a tu archivo .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
RewriteRule ![A-Z] - [S=28]
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2
RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]
</IfModule>

Bonito ¿eh?

Estas reglas de redirección son las más habituales, pero si sabes alguna más que sea interesante cuéntanoslo en los comentarios y la añado a la lista 🙂

(3 votos, promedio: 5) Valora este artículo para ayudar a mejorar la calidad del blog

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

1 comentario en “Redirecciones 301 imprescindibles para migraciones o cambios de URL en WordPress sin perder SEO”

  1. Gracias Fernando,
    Uso el plugin Rank Math SEO, y tengo activadas las redirecciones, incluyendo que, las páginas o artículos sin redirección los lleve a la página de inicio. ¿Es correcto? Gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
  • Responsable: Fernando Tellado ([email protected])
  • Fin del tratamiento: Moderación de comentarios para evitar spam
  • Legitimación: Tu consentimiento
  • Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
  • Derechos: Acceso, rectificación, portabilidad, olvido

 

Ir arriba Ir al contenido