Flecha

Realizar un cambio de dominio en WordPress puede ser una pesadilla. Todos los enlaces que tengamos que usen el nombre de dominio antiguo van a fallar. Y créeme, no quieres que eso pase.

Seguramente pienses que no vas a cambiar nunca de nombre de dominio y que esto a ti no te afecta. Y estás en lo cierto. Pero, ¿te has planteado quizás usar un certificado SSL en tu web? Sí, me refiero a que aparezca el típico icono del candado en el navegador junto a HTTPS en vez de HTTP. Si es tu caso, vas a tener un problema parecido, aunque habitualmente sólo afectará a imágenes.

Tanto si vas a cambiar de dominio como si vas a usar SSL, ten en cuenta que tu dominio será diferente. Y es importante que sepas como reemplazar enlaces para que todo aquello que apuntaba a http://midominio.com ahora apunte a http://midominionuevo.com o https://midominio.com (según sea tu caso).

Veamos, pues, cómo conseguir aplicar los reemplazos de forma sencilla y de varias maneras diferentes.

Modificando la Base de Datos de WordPress

La opción más rápida es reemplazar los enlaces directamente desde la base de datos con instrucciones SQL. Tan solo debes utilizar la siguiente instrucción para aplicar las modificaciones en el contenido de tus entradas y páginas:

UPDATE wp_posts 
SET post_content = 
REPLACE (post_content, 'http://midominio.com', 'http://midominionuevo.com');

Anteriormente ya te expliqué cómo trabajar con SQL y lo útil que resulta para un montón de tareas relacionadas con WordPress. Aparentemente, con esto ya estaría todo, ¿no? En realidad, todavía no estamos, ya que es muy posible que haya enlaces antiguos en otros lugares de la base de datos, como por ejemplo en la columna guid de la tabla wp_posts para todas las imágenes almacenadas en nuestra Biblioteca de Medios. En tal caso, puedes usar esta sentencia SQL:

UPDATE wp_posts 
SET guid = 
REPLACE (guid, 'http://midominio.com', 'http://midominionuevo.com');

y, aún así, seguiríamos sin tener todo actualizado. Nos estamos dejando más apariciones de enlaces antiguos en otros lugares, como por ejemplo en las tablas wp_options o wp_postmeta de tu base de datos WordPress. Si estás pensando en ir aplicando las sentencias anteriores a las nuevas tablas, te recomiendo que frenes un poco y sigas leyendo.

El problema con las tablas wp_options o wp_postmeta es que, en muchos casos, almacenen cadenas de texto serializadas. Una cadena de texto serializada en PHP no es más que una forma de almacenar datos en la base de datos. Por ejemplo, podríamos tener este conjunto de datos en PHP (un array):

array (
 'dominio' => 'http://midominio.com',
 'usuario' => 'avillegasn',
 'edad' => 30
);

Si lo guardamos en la base de datos serializado, el resultado es el siguiente:

a:3:{s:7:"dominio";s:20:"http://midominio.com";s:7:"usuario";s:10:"avillegasn";s:4:"edad";i:30;}

Si miras el resultado anterior con detalle, verás que los números que aparecen delante de los valores indican la longitud en caracteres (de hecho, en bytes) del valor. Para este caso, si guardamos http://midominio.com, automáticamente se indica con un 20 que la longitud (en este caso, el número de letras) es esa. Por lo que si directamente hacemos el reemplazo por http://minuevodominio.com, tendremos:

a:3:{s:7:"dominio";s:20:"http://minuevodominio.com";s:7:"usuario";s:10:"avillegasn";s:4:"edad";i:30;}

Pero claro, http://minuevodominio.com no tiene 20 letras, sino 25. Cuando WordPress intente «deserializar» este valor, fallará estrepitosamente. Y no queremos que esto pase.

Por tanto, parece que utilizar SQL no es lo más recomendable para modificar todos los enlaces. Afortunadamente, hay más opciones.

Usando un Script PHP

Una opción más sencilla que ir directamente a toquetear la base de datos es usar un script PHP que realice las labores por nosotros. Si eres un crack del PHP es posible que seas capaz de programar el script tu mismo; ¡enhorabuena por ello! 😀 Pero sino, puedes usar este script de interconnect/it que funciona tanto para WordPress como para Drupal.

Script de interconnect/it para buscar y reemplazar, teniendo en cuenta cadenas serializadas.
Captura del script de interconnect/it para buscar y reemplazar, teniendo en cuenta cadenas serializadas.

Lo bueno de este script es que sólo lo tienes que subir a la raíz de tu instalación WordPress (mediante FTP, por ejemplo) y acceder a él desde el navegador. Se te abrirá una interfaz como la que puedes ver en la captura anterior, dónde tendrás que indicar los datos de acceso a tu base de datos para que el script pueda acceder a ella.

A partir de ese momento, puedes usar el formulario para buscar y reemplazar valores de forma sencilla, tal y como harías en cualquier editor de texto habitual. No obstante, recuerda hacer una copia de seguridad de tu base de datos para evitar posibles problemas.

Plugins de Búsqueda y Reemplazo

Por último, aquí te dejo 4 plugins para realizar reemplazos en tus contenidos, los cuales tienen en cuenta los valores serializados y hacen la búsqueda en todas las tablas de la base de datos. Además, no necesitas nada más que instalarlos y activarlos como cualquier otro plugin. Así de fácil.

Better Search Replace

Better Search Replace
Better Search Replace

Este plugin nos permite buscar y reemplazar cualquier contenido. Tiene en cuenta valores serializados y además permite hacer una simulación para saber cuantas apariciones va a sustituir antes de realmente hacer los reemplazos. De esta manera podemos tener un poco más de idea sobre el impacto que los cambios van a tener.

No es el más popular, pero está traducido al español, lo que es un plus.

Search & Replace

Search & Replace
Search & Replace

Un plugin muy parecido al anterior, para buscar y reemplazar contenidos en general. Lo bueno de este es que aparentemente permite hacer copia de seguridad de la base de datos. Además, su interfaz es muy sencilla. Sólo hay que seleccionar en qué tablas queremos realizar la búsqueda y listo. Una opción interesante y con buena puntuación en el directorio de plugins de WordPress.

Velvet Blues Update URLs

Velvet Blues Update URLs
Velvet Blues Update URLs

Es el plugin que yo suelo utilizar, sobretodo por ser de los más antiguos y además seguir recibiendo actualizaciones de vez en cuando. Es específico para modificar enlaces, ya que sólo debes decirle cual es la dirección web antigua y la nueva, y dónde quieres que haga la búsqueda (habitualmente, con marcar todas las opciones que ofrece es suficiente).

Como resultado nos indica el número de sustituciones que ha hecho. Para mí, de los mejores para esta labor, y el que más descargas e instalaciones activas tiene (casi 700.000 y más de 200.000, respectivamente).

WP Migrate DB

WP Migrate DB
WP Migrate DB

Aunque este plugin se suele usar para hacer migraciones de webs en WordPress, también incluye la opción de buscar y reemplazar contenidos. Por tanto, si alguna vez lo has usado o ya estás familiarizado con él, será una opción a tener en cuenta cuando tengas que hacer un cambio de dominio. Más de 500.000 descargas y 100.000 instalaciones activas lo avalan.

Resumen

Has visto tres maneras completamente diferentes de modificar enlaces (incluso cualquier texto) en tu instalación WordPress:

  • La opción más arriesgada es la de utilizar sentencias SQL, ya que no solucionan el problema de las cadenas de texto serializadas.
  • Alternativamente, puedes usar un script como el de interconnect/it (más info aquí) o hacerte tu el tuyo propio, aunque esta opción no es para todo el mundo.
  • Y si eres un usuario básico o principiante, dispones de varios plugins que te ayudan a buscar y reemplazar enlaces antiguos. Sin duda, esta es la mejor opción si para ti las siglas FTP o SQL te suenan a chino mandarín. Eso si, acuérdate de desactivarlos una vez hayas terminado de usarlos.

En cualquier caso, y sea cual sea la solución por la que te decantes, recuerda tener precaución y hacer una copia de seguridad de tu base de datos WordPress para poder recuperar todo en caso de catástrofe.

Imagen destacada de George Laoutaris.

35 respuestas a «Reemplazar enlaces después de un cambio de dominio»

  1. Avatar de jose luis

    muy bueno el post y bien explicado.De mucha utilidad. gracias.

    1. Avatar de Antonio Villegas

      Gracias a ti por pasarte por nuestra web. ¡Un saludo!

  2. Avatar de Miguel Gomez Carmona
    Miguel Gomez Carmona

    Hola yo no sabia nada y cambie el dominio, se pueden pasar las entradas al nuevo dominio? Gracias

    1. Avatar de Antonio Villegas

      Claro. ¿Estas hablando de dos instalaciones diferentes o de la misma instalación de WordPress? En este segundo caso las entradas ya estarán pasadas, porque sólo has cambiado el nombre de dominio. En el primer caso, tendrás que hacer una migración.

  3. Avatar de Niell
    Niell

    Amigo de la que me has salvado, necesitaba reemplazar los enlaces de 550 post de un acortador que ya no funcionaba, y con el script que has compartido me lo ha hecho la instante, eres un crack!

    Saludos desde Perú.

    1. Avatar de Antonio Villegas

      Hola Niell. Me alegro de que te haya sido útil. ¡Un abrazo!

  4. Avatar de Miguel Godinez
    Miguel Godinez

    El Script PHP funciona con SQL o con MySQL?

    1. Avatar de David Aguilera

      Hola Miguel,

      Pues, sinceramente, no estoy seguro. Sé que la función REPLACE está disponible en MySQL y algún otro SGBD, pero no sé si forma parte de SQL como tal.

      Un saludo,
      David

  5. Avatar de Tristán
    Tristán

    Hola Antonio, como puedo ver todos las rutas que usa un WP? Es decir, tengo el dominio http://www.xxxxx.com y algunas llamas son http://www.midominio.com/xxxxxxxx.com, pero no se cuales son … o puede que no haya. Esto me ha pasado en páginas antiguas y que ahora, al migrar el WP de godaddy a 1and1, no me funcionan bien.

    Me puedes ayudar?

    1. Avatar de Antonio Villegas

      Hola Tristán. No acabo de entender qué es lo que te pasa. De todas formas, si quieres saber todas las rutas activas que hay en tu WordPress, puedes utilizar un plugin como Export All URLs. Espero que te sirva.

  6. Avatar de Christian

    Muy buenas, y si quisiera cambiar todos los enlaces de mi web que aparecen sin barra al final («/») para que todos lleven la barra.

    No me sirve con una redirección, obviamente sí funciona, pero lo que quiero es que no haga la redirección, sino cambiar todos los enlaces internos para que contengan la barra, de manera que no tenga que ir uno a uno cambiando el contenido. Se puede? Muchas gracias in advance !

    1. Avatar de Antonio Villegas

      Hola Christian. Si tienes bien configurado WordPress no has de hacer nada ya que tus URLs sin «/» al final harán la redirección con la barra automáticamente. No se porqué quieres hacer esto que comentas, pero de hacerlo deberías hacer consultas SQL en todos los campos de la base de datos sujetos a contener URLs y usar el operador REPLACE. O bien programarte una función que coja los campos desde PHP y haga el reemplazo con expresiones regulares. Requiere un tiempo pensar exactamente cómo hacerlo, así que te dejo a ti la investigación 🙂

  7. Avatar de Christian

    Grande, muchas gracias ! Claro, lo quiero hacer porque quiero reducir el número de redirecciones internas, a ser posible. Es decir, una redirección está muy bien para no perder los enlaces entrantes, pero mi dominio no debería tener enlaces redireccionados, o al menos, eso recomienda ahrefs.

  8. Avatar de cinetux

    Muy buen contenido me sirvió de mucha ayuda gracias

  9. Avatar de Sara
    Sara

    Hola! una pregunta, se debe renombrar la base de datos acorde al nuevo dominio?
    Gracias. es que pedí a soporte que me hicieran el cambio de dominio y ahora no se como ingresar al wordpress para actualizar enlaces por medio de plugin. El cpanel me sigue apareciendo con el dominio anterior

    1. Avatar de Antonio Villegas

      Si te refieres a cambiarle el nombre a la base de datos, no te hará falta. Si algo te sigue fallando, vuelve a contactar con el equipo de soporte de tu hosting para que te lo solucionen.

      1. Avatar de Sara
        Sara

        Vale, muchas gracias

  10. Avatar de Danny Davila
    Danny Davila

    Al utilizar el script se deben excluir las tablas wp_options y wp_postmeta? Para que no se vea afectada la longitud en caracteres? o este script hace todo de tal manera que se pueda reemplazar absolutamente todo incluyendo estas tablas?

    1. Avatar de Antonio Villegas

      Hace ya 3 años de esta entrada y no sé si el script habrá cambiado o no. De todas maneras, pruébalo con una copia de la base de datos. Es la única manera de saber si lo hace como debe (yo diría que sí).

  11. Avatar de Anz
    Anz

    Muchas gracias. Utilice el plugin Better Search Replace.

  12. Avatar de Ricardo
    Ricardo

    Gracias!! Usé el script de interconnect/it y funcionó de maravilla. En un paso quedaron todas las url’s antoguas con la nueva URL, para todos los casos (enlaes, imágenes, posts, todo).

  13. Avatar de SM
    SM

    Hola, buenas noches, ojalá me puedas ayudar porque estoy super complicada, un poco superada y sin encontrar solucion en internet, voy a intentar explicar todo:

    1. Tengo un hosting en Chile donde alojaba mi sitio que era un .com.

    2. He decidido expandirme y compré el dominio .cl.

    3. Contraté un hosting en USA para alojar allá el .com y me migraron el sitio completo, tengo problemas con una de las paginas, pero eso es tema aparte.

    4. Luego de asegurarme que el .com estaba arriba y funcionando desde el server en USA, he solicitado a la gente del hosting en Chile que «migraran» el sitio a este nuevo dominio .cl, pero me contestaron:

    «El cambio de nombre de dominio se encuentra realizado a nivel de infraestructura, que es la parte que vemos nosotros.

    Restaría que modifiques el nombre de dominio en la base de datos y de ser necesario en las rutas de tu desarrollo.»

    4. Hoy cuando entro al .cl, me redirige de inmediato al .com, tengo claro que debo modificar las b de d y todo lo que redirija al .com por .cl, pero ahí ya todo se complica, porque no tengo un .cl/wp-admin/, también va directo a .wp-admin/.

    Edité el archivo functions.php de mi tema por Cpanel:

    update_option( ‘siteurl’, ‘xxxxxxx.cl’ );
    update_option( ‘home’, ‘xxxxxxx.cl’ );

    Pero nada cambió, excepto que ahora cuando entro a través del .cl redirige a la versión en español del .com, antes lo hacía directo a la de inglés.

    En resumen, en el sitio alojado en Chile con la versión .cl necesito:

    1. Cambiar todos los enlaces y rutas de las BdeD que apunten al .com por .cl.
    2. Habilitar mi cuenta wordpress donde este todo el sitio, todas mis paginas para poder editarlas, hoy solo veo una nueva instalacion wordpress a traves del Cpanel, pero esta vacia, no tiene nada.

    Ahora ya te digo, que el tema me queda grande, me supera, intento ser autodidacta, pero mi nivel informático es básico…yo siempre pensé que la gente del hosting me lo dejaria operativo cuando me lancé….busco información pero nada parece funcionar, he chequeado interconnect/it , pero sinceramente eso, dudo que logre hacerlo!!! jajajaja

    Por todo lo expuesto, agradecería mucho, muchísimo tu ayuda al respecto…ya no sé que más hacer….

    1. Avatar de Antonio Villegas

      Hola SM. Para poder ayudarte con todo esto que comentas, debería contactar contigo directamente y que lo habláramos, porque es complicado de entender. Desafortunadamente, en Nelio no nos dedicamos a este tipo de trabajos de consultoría. Sin embargo, estoy seguro de que en tu zona puedas contactar con algún profesional que te pueda ayudar y te ofrezca un presupuesto para solucionarte el problema.

  14. Avatar de Edwin Escudero
    Edwin Escudero

    Hola, tengo una situación similar, estoy pasando de http a https pero el sitio esta hecho con php puro, en un servidor CentOS con apache, y yo no hice el desarrollo, cuando ajusto el httpd.conf para usar SSL las rutas de los enlaces no funcionan, en este caso que deberia revisar?

    1. Avatar de Antonio Villegas

      Depende de cómo tengas hecha la web. Quizás puedas reemplazar los enlaces o cambiarlos en la base de datos. Entiendo que no usas WordPress.

  15. Avatar de Guido
    Guido

    Excelente post. He podido encontrar una soluciòn a lo que buscaba. Muchas gracias!

  16. Avatar de Alonzo
    Alonzo

    Hola antonio soy nuevo en esto y yo mismo me cree mi pagina web de forma gratuita con una extensión .ml y ahora quiero comprar el dominio con extensión .com si utilizo estos pluguin pueden redireccionar mis paginas al nuevo dominio .com para que sea el mismo, no quiero tener que volver a crearla desde 0 gracias.

    1. Avatar de Antonio Villegas

      Hola Alonzo. No tienes que crear tu página desde cero de nuevo. Utiliza un plugin de redirecciones y cambia las direcciones .ml por .com. Ponte en contacto con tu proveedor de hosting si necesitas ayuda.

  17. Avatar de Edwin
    Edwin

    saludos bro, ya mis enlaces y paginas aparecen actualizados pero cunado entro en modo desde google en una pagina me sigue saliendo la dirección antigua, como hago para cambiarla en esas paginas o redirigiríla.

    1. Avatar de Antonio Villegas

      En Google Search Console tienes que indicarlo, si no recuerdo mal. De todos modos, tardará un tiempo que Google haga el cambio.

  18. Avatar de Jonny martinez
    Jonny martinez

    tengo un caso, yo tengo 5000 redireciones de una pagina .com a otra .co

    la pagina vieja era www y la redirecciones worpress , hppts://

    en este momento dejaron de funcionar las redirecciones

    Tu das consultas ? puedo pagarte

    1. Avatar de Antonio Villegas

      No proporcionamos este tipo de servicios de consultoría personalizada. Te recomiendo que encuentres un especialista en tu zona que te pueda ayudar.

  19. Avatar de Pili
    Pili

    ¡Genial post! Tenía un dominio de pruebas y quería migrar el contenido a la web «de verdad». Lo hice y, claro, no se veía naaaada.
    Con la solución en SQL pude reemplazar los dominios y todo funciona. ¡Mil mil gracias. ¡Lo que aprende una!

    1. Avatar de David Aguilera

      Gracias, Pili. Nos alegra mucho saber que nuestra entrada te ayudó.

Deja una respuesta

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

He leído y acepto la política de privacidad de Nelio Software

Tus datos personales se almacenarán en SiteGround y serán usados por Nelio Software con el único objetivo de publicar tu comentario aquí. Con el envío de este comentario, nos das el consentimiento expreso para ello. Escríbenos para acceder, rectificar, limitar o eliminar tus datos personales.