Reemplazar enlaces después de un cambio de dominio

Publicada en WordPress.

Mira nuestro vídeo

Existe una versión mejor de tu web

Comparte este artículo

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.

25 comentarios en «Reemplazar enlaces después de un cambio de dominio»

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

    1. 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.

  2. 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. 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

  3. 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. 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.

  4. 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. 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 🙂

  5. 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.

  6. 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. 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.

  7. 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. 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í).

  8. Muchas gracias. Utilice el plugin Better Search Replace.

  9. 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).

  10. 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. 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.

  11. 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. 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.

Deja una respuesta

No publicaremos tu correo electrónico. Los campos obligatorios están marcados con: •

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

Al marcar la casilla de aceptación estás dando tu legítimo consentimiento para que tu información personal se almacene en SiteGround y sea usada por Nelio Software con el propósito único de publicar aquí este comentario. Contáctanos para corregir, limitar, eliminar o acceder a tu información.