Skip to content

Todo para WordPress, el desarrollo web — y mucho más

🔄 Cómo reemplazar un dominio antiguo por uno nuevo usando phpMyAdmin: una guía para WordPress

🔄 Cómo reemplazar un dominio antiguo por uno nuevo usando phpMyAdmin: una guía para WordPress

Ha movido un sitio a un nuevo dominio y no funciona. O abre, pero sin estilos. O el panel de administración no le deja entrar. Cualquiera que haya migrado WordPress manualmente ha pasado por este momento: la base de datos aún recuerda la URL antigua y el sitio intenta desesperadamente cargar recursos desde una dirección que ya no existe.

Cuatro consultas SQL en phpMyAdmin resuelven el problema en cinco minutos. Sin plugins, sin WP-CLI, sin pánico. A continuación, una guía paso a paso desde cómo encontrar el dominio actual hasta la verificación final. Con ajustes para prefijos de tabla no estándar, HTTPS y datos serializados.

💡 Resumen rápido:

  • Encuentre el dominio actual en la tabla wp_options: los campos siteurl y home
  • Ejecute cuatro consultas UPDATE en la pestaña SQL de phpMyAdmin
  • Restablezca la contraseña del administrador mediante wp_users si el panel de administración no le deja entrar
  • Guarde los enlaces permanentes en los ajustes de WordPress para restaurar los estilos
  • Para tiendas y multisitios, use Better Search Replace o WP-CLI: un REPLACE común rompe los arrays serializados

Por dónde empezar: encuentre el dominio actual en la base de datos

Antes de reemplazar, asegúrese de saber qué dominio está configurado actualmente para el sitio. Esto le ahorrará tiempo si el sitio ya fue movido antes y pudiera quedar una tercera URL «intermedia» en la base de datos.

Abra phpMyAdmin, seleccione la base de datos del sitio y busque la tabla wp_options. Contiene dos filas: siteurl (la dirección de WordPress) y home (la dirección del sitio). Estos son los valores que cambiaremos primero.

Tabla wp_options con valores siteurl y home en phpMyAdmin

Si el prefijo de la tabla no es estándar (por ejemplo, mysite_ en lugar de wp_), busque la tabla mysite_options. Puede encontrar el prefijo en el archivo wp-config.php: la variable $table_prefix.

Cuatro consultas SQL para un reemplazo completo del dominio

Ejecute cada consulta una por una en la pestaña «SQL» de phpMyAdmin. Antes de ejecutarlas, asegúrese de hacer una copia de seguridad de la base de datos: exportar mediante phpMyAdmin toma un minuto y le salva de errores irreversibles.

Reemplace http://www.oldurl por http://www.newurl en todas las consultas a continuación. Si el sitio funciona con HTTPS, use https:// en ambas direcciones.

1. Actualizar HOME y SITEURL

Esto cambia las dos direcciones clave en wp_options. Sin este paso, el sitio simplemente no abrirá en el nuevo dominio; WordPress seguirá intentando redirigir al antiguo.

1UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';

2. Actualizar los GUID de las entradas

El campo guid en wp_posts almacena el identificador permanente de cada entrada. Reemplazarlo no es crítico para el funcionamiento del sitio; WordPress no usa el GUID para el enrutamiento. Pero si la gente lee su sitio a través de lectores RSS, la limpieza del GUID importa: las URL antiguas en el feed llevarán a enlaces rotos.

1UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl', 'http://www.newurl');

3. Actualizar el contenido de las entradas

La consulta más extensa. post_content contiene el texto de todas las páginas y entradas, incluidas las imágenes incrustadas y los enlaces internos. Después de ejecutar esto, todas las imágenes del contenido se cargarán desde el nuevo dominio.

1UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl');

4. Actualizar los campos meta

Campos personalizados, ajustes de plugins, datos del tema: todo esto se almacena en wp_postmeta. Si omite esta consulta, obtendrá enlaces rotos en lugares aparentemente inesperados: el logo en el pie de página, el fondo en el personalizador, la URL en su plugin de SEO.

1UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://www.oldurl', 'http://www.newurl');

Después de ejecutar las cuatro consultas, abra el sitio en el nuevo dominio. Si todo se hizo correctamente, no debería haber problemas. Pero a veces ocurre otra cosa: un mensaje de «Error al establecer la conexión con la base de datos» o la página abre sin estilos.

Error de conexión a la base de datos tras cambiar el dominio de WordPress

Lo primero que necesita en esta situación es acceso al panel de administración.

Cómo acceder al panel de administración si perdió la contraseña o el sitio no le deja entrar

El cliente no dejó la contraseña. O usted mismo se bloqueó al cambiar el dominio y /wp-admin le lanza a un bucle infinito de redirecciones. Aquí tiene dos maneras de obtener derechos de administrador directamente a través de la base de datos.

Restablecer la contraseña del administrador mediante phpMyAdmin

Abra la tabla wp_users (su prefijo puede ser diferente: mysite_users, etc.). Encuentre el usuario con derechos de administrador y haga clic en «Editar»:

Tabla wp_users en phpMyAdmin mostrando la lista de usuarios de WordPress

En la fila user_pass, seleccione la función MD5 del menú desplegable e ingrese la nueva contraseña en el campo adyacente. Haga clic en «Continuar»:

Establecer una contraseña MD5 para un usuario de WordPress mediante phpMyAdmin

Nota: el WordPress moderno usa phpass (hashes bcrypt), no MD5. Pero cuando usted ingresa una contraseña de WordPress, el sistema verifica el hash en secuencia: si la comprobación bcrypt falla, intenta la alternativa MD5 e inmediatamente rehace el hash de la contraseña al formato actual. Por eso MD5 mediante phpMyAdmin funciona como una llave temporal.

Crear un administrador mediante PHP

Un método alternativo es añadir un nuevo usuario administrador de forma programática. El código se inserta en el functions.php del tema activo o mediante un MU-plugin.

Añada lo siguiente al functions.php de su tema hijo:

1function sdstudio_add_admin_user() {
2 $userdata = array(
3 'user_login' => 'tempadmin',
4 'user_pass' => 'TempPass123!',
5 'user_email' => '[email protected]',
6 'role' => 'administrator',
7 );
8 wp_insert_user( $userdata );
9}
10add_action( 'init', 'sdstudio_add_admin_user' );

La función wp_insert_user() crea un usuario con los parámetros proporcionados, y el hook init se ejecuta en cada solicitud de WordPress. Simplemente abra cualquier página del sitio una vez y el usuario se creará.

Después de iniciar sesión en el panel de administración, asegúrese de eliminar tanto la función del functions.php como el usuario temporal que creó. Dejar tempadmin con una contraseña en texto plano es un agujero de seguridad.

Reparar imágenes rotas y estilos tras reemplazar el dominio

Usted tiene acceso al panel de administración, pero las imágenes no cargan y la maquetación está rota. En nueve de cada diez casos, una simple operación ayuda.

Vaya a «Ajustes» → «Enlaces permanentes»:

Página de ajustes de enlaces permanentes de WordPress en el panel de administración

No cambie nada; simplemente haga clic en «Guardar cambios»:

Botón de guardar cambios en los ajustes de enlaces permanentes de WordPress

WordPress reconstruirá la estructura de URL, actualizará la caché de reglas de reescritura y limpiará la caché interna de redirecciones. Después de esto, las imágenes suelen volver a su lugar.

Si eso no ayudó, significa que el dominio antiguo está incrustado en arreglos serializados. Un REPLACE común en SQL los rompe: la longitud de la cadena en un arreglo serializado está codificada como un número, y reemplazar «dominio-largo-antiguo.ru» por «nuevo-corto.io» cambia esa longitud, volviendo el arreglo ilegible. Instale el plugin gratuito Better Search Replace; maneja correctamente la serialización y le muestra cuántas coincidencias se encontraron en cada tabla antes de reemplazar.

Para sitios con WP-CLI, es aún más simple con un comando:

1wp search-replace 'http://olddomain.ru' 'https://newdomain.io' --all-tables --dry-run

La bandera --dry-run primero muestra qué se reemplazará sin hacer cambios. Una vez que esté seguro, ejecútelo sin la bandera. search-replace de WP-CLI también maneja datos serializados y lo hace más rápido que la interfaz web.

El video a continuación demuestra el proceso completo desde iniciar sesión en phpMyAdmin hasta verificar el sitio después del reemplazo:

⁉️🤔 Preguntas frecuentes

¿Es obligatorio usar phpMyAdmin para reemplazar el dominio?

No. Si el sitio aún no se ha migrado, Duplicator o All-in-One WP Migration realizan el reemplazo automáticamente durante el despliegue. Si el sitio ya está en el nuevo hosting sin acceso al panel de administración, le quedan las consultas SQL mediante phpMyAdmin, Adminer o WP-CLI. Para la mayoría de los webmasters, phpMyAdmin es el método más directo y controlado: usted ve cada operación en lugar de confiar en la caja negra de un plugin.

¿Qué hago si el prefijo de las tablas no es wp_?

Revise el valor de la constante $table_prefix en wp-config.php. Normalmente es wp_, pero algunos hostings o plugins de seguridad como Solid Security (antes iThemes Security) a veces lo cambian por uno aleatorio. En todas las consultas anteriores, reemplace wp_ por su prefijo (por ejemplo, xyz123_options en lugar de wp_options).

¿Por qué el sitio se abre sin estilos después del reemplazo?

El dominio antiguo permanece en los ajustes del tema, la caché o el CDN. Restablezca los enlaces permanentes (instrucciones más arriba) y limpie la caché de su plugin de caché. Si usa Cloudflare u otro CDN, invalide la caché del lado del proveedor. Si eso no ayudó, ejecute Better Search Replace: probablemente la URL antigua esté incrustada en un array serializado theme_mods_*.

El sitio está en HTTPS, pero después de la migración el certificado no funciona. ¿Qué debo hacer?

Asegúrese de haber usado https:// (no http://) en todas las consultas. Verifique que ambas direcciones en los ajustes de WordPress, una vez dentro del panel de administración, comiencen con https://. El certificado SSL en sí se configura del lado del hosting, a través del panel de control o con Let's Encrypt gratuito. Este es un procedimiento independiente, no relacionado con la base de datos.

¿Puedo reemplazar el dominio sin acceso a phpMyAdmin?

Sí. WP-CLI: wp search-replace 'http://olddomain' 'http://newdomain' --all-tables. Solo FTP: añada las líneas define('WP_HOME','http://newdomain'); y define('WP_SITEURL','http://newdomain'); a wp-config.php. Esto sobrescribe temporalmente las direcciones y le da acceso al panel de administración. Después de iniciar sesión, elimine las líneas y guarde los ajustes desde la interfaz.

¿Necesito cambiar el GUID en wp_posts o puedo omitirlo?

No es necesario para el funcionamiento del sitio. WordPress no usa el GUID para el enrutamiento, solo para identificar entradas en los feeds RSS. Si hay personas que leen activamente su sitio por RSS, el reemplazo tiene sentido. Si no, puede omitir la tercera de las cuatro consultas sin consecuencias.

Después de reemplazar el dominio por SQL, se perdieron ajustes de algunos plugins. ¿Por qué?

Plugins como WooCommerce, Advanced Custom Fields y sliders almacenan URLs en arrays serializados en wp_postmeta. Un REPLACE normal no tiene en cuenta el contador de longitud de la cadena en la serialización y rompe la estructura. La solución es Better Search Replace o wp search-replace (deserializan el array, reemplazan la cadena y la vuelven a serializar). Si ya lo ha roto, restaure la base de datos desde la copia de seguridad y repita el reemplazo con la herramienta adecuada.

Qué hacer en casos complejos: tiendas, multisitios y bases de datos grandes

El reemplazo de dominio por SQL es un procedimiento de cinco minutos si tiene acceso directo a phpMyAdmin y un prefijo de tabla estándar. Pero hay situaciones en las que el reemplazo manual mediante REPLACE es realmente arriesgado.

Tiendas en línea con WooCommerce con cientos de miles de pedidos. Redes multisitio con decenas de tablas separadas para cada subsitio. Sitios donde las URLs están incrustadas en arrays serializados (ajustes de temas, maquetadores visuales, sliders). En estos casos, un solo REPLACE de SQL puede dañar la estructura de datos, y restaurar la base de datos desde la copia de seguridad llevará más tiempo que hacer un reemplazo preciso desde el principio.

Better Search Replace o search-replace de WP-CLI manejan la serialización; úselos. Y si el tamaño de la base de datos supera un gigabyte y el costo de un error es alto, una hora de trabajo de un desarrollador especializado costará menos que restaurar una tienda cuyo tiempo de inactividad cuesta dinero.

Cubrimos el tema de la migración de sitios preservando el SEO y sin perder tráfico en una guía separada. Y si encuentra un error específico después del reemplazo, escriba en los comentarios y le ayudaremos con el diagnóstico.