Home » Errores tontos al migrar WordPress
Errores al migrar Wordpress

Errores tontos al migrar WordPress

Migrar WordPress puede parecer sencillo, pero basta un pequeño descuido para perder horas solucionando problemas evitables. En este post, comparto los errores más tontos (pero comunes) que me encontré en mi última migración: permisos mal configurados, librerías PHP faltantes, caché roto y más. Si no quieres caer en los mismos tropiezos, sigue leyendo.

Hoy me tocó hacer una migración que creí sencilla, pero terminé cometiendo tantos errores tontos al migrar WordPress. Cometí errores de novato.

Nada grave, pero sí suficiente para perder un buen rato depurando cosas que podrían haberse evitado con una simple checklist previa. Así que aquí dejo mis fallos y algunos más que suelen ocurrir cuando migramos, instalamos o actualizamos WordPress.

1. Permisos de wp-content

Uno de los clásicos. Todo parecía estar bien hasta que WordPress empezó a quejarse de que manera no muy directa con un mensaje de error. Sino, simplemente me impedía borrar un plugin o actualizar otro.

Después de un rato me percaté que me faltaba ajustar los permisos y propiedad de la carpeta wp-content/. Ojo con esto:

chown -R www-data:www-data /ruta/a/wordpress/wp-content/
chmod -R 755 /ruta/a/wordpress/wp-content/

Si sigues teniendo problemas, revisa si tu hosting o servidor tiene alguna política restrictiva con SELinux o AppArmor.

2. FS_METHOD sin configurar: un error trágico

Luego de corregir los permisos en el paso anterior, aún no podía borrar un plugin. Al querer hacerlo, WordPress me pedía que ingrese datos de conexión vía FTP a mi servidor: típico síntoma que WordPress no puede escribir en wp-content/

Sospeché de SELinux, pero esto era Ubuntu. ¿Quizá AppArmor? No lo creo, al menos nunca me impidió escribir en un directorio como este.

De pronto, recordé que en la configuración wp-config.php me faltaba esto:

define('FS_METHOD', 'direct');

Con esto, ya tuve un problema menos. Ya era un dolor menos, pero empezaba a renegar por cometer errores tontos al migrar WordPress.

3. ¿El problema era el collation de MySQL?

Esto fue lo más serio y que más terror me causó: muchas partes de mi contenido cargaban de forma errónea, con caracteres extraños, extractos de texto duplicado, desencuadrado, etc. ¡Un horror!

Pensé que había hecho algo mal en mi último post. Tal vez copié un texto a un archivo con un formato extraño y lo copié de vuelta a WordPress, lo cual pudo introducir caracteres raros «invisibles». Pero, noté que el error estaba presente no solo en mi último post, sino en ¡TODOS!

Se me vino a la mente que tal vez el backup de MySQL lo había estado generando de forma incorrecta, pues lo venía generando así:

kubectl -n mysql exec mysql-0 -- mysqldump --all-databases > "${bkp_dir}/alldb.sql"

¿Tal vez la redirección STDOUT a un archivo pudo introducir caracteres extraños que corrompió las tablas y registros? Ya empezaba a sudar frío…

Después, pensé que había problemas con la base de datos, específicamente con la codificación (algo distinto a UTF-8). Me tocó verificar que todas las tablas tengan la misma collation:

SELECT table_schema, table_name, collation_name
FROM information_schema.tables
WHERE table_schema = 'tu_base_de_datos';

Si hay inconsistencias, puedes convertir todo a utf8mb4_unicode_ci, que es lo recomendado hoy en día.

Sin embargo, todo parecía estar bien. Así que me tocó explorar «a mano» el contenido de la BD de MySQL. Empecé con algo como esto:

SELECT ID, post_title FROM wp_posts WHERE post_title LIKE '%parte de un titulo%';

Después, ver el contenido directamente en la consola:

SELECT post_content FROM wp_posts WHERE ID = ID_articulo;

Y ahí pude comprobar que el contenido del artículo estaba todo correcto, sin ningún caracter extraño.

Pero, el contenido servido por nginx en un navegador Web seguía fallando. Al menos con eso ya me quedé tranquilo que la base de datos no tenía ningún problema. Era WordPress, nginx, o algo distinto al MySQL el problema.
Seguía investigando.

4. Falta de librerías PHP esenciales

Ya llevaba poco más de 1 hora sin corregir el problema anterior de caracteres extraños en el contenido. Pedí apoyo a ChatGPT y me dio una idea: desactivar uno o más plugins relacionados al contenido.

Así hice, desactivé uno que venía usando para generar Tablas de Contenidos. Al hacerlo, se corrigió el problema mágicamente. Ya empezaba a sonreír.

Pero aún intrigado de por qué el plugin dejó de funcionar si hice una migración de la misma versión de componentes (MySQL, nginx, PHP, Sistema Operativo, archivos de WordPress, etc.). Pero, mientras hacía clic por aquí y por allá, observé una advertencia de una librería de PHP que faltaba: mbstring

Así que de inmediato instalé lo que faltaba, y de paso me adelanté en instalar también el soporte para Redis (del cual ya había visto unos errores minutos antes):

sudo apt install php8.2-mbstring php8.2-redis

Siempre revisa el error.log de PHP para detectar si falta alguna extensión. Eso es de gran ayuda, también y te podría evitar cometer errores tontos al migrar WordPress.

5. Redis no configurado para el caché de WordPress

Activé el plugin de caché, habilité Redis y… nada. Resulta que me faltaba configurar el servicio correctamente en wp-config.php:

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);

Y por supuesto, asegurarme de que Redis estuviera corriendo:

systemctl status redis

6. Headers restrictivos en Nginx

Luego, ya habiendo resuelto la mayoría de problemas críticos, se me ocurrió hacer una mala práctica: hacer cambios adicionales no relacionados a la migración en sí. Es decir, quise optimizar algunas cositas de seguridad por aquí y por allá, lo cual no está mal pero no era el momento.

Cuando moví el sitio, configuré headers de seguridad estrictos en Nginx… y rompí la carga de algunas partes de mi blog. Un error común es bloquear X-Frame-Options o Content-Security-Policy sin permitir ciertas rutas que WordPress necesita. Revisa bien antes de aplicar configuraciones como esta:

add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'";

Si algo deja de cargar, prueba relajar las reglas o revisar la consola del navegador para ver qué se está bloqueando.

Para ser honesto, aún no resolví del todo esta parte. Como no era muy prioritario, simplemente opté por deshabilitar esas directivas hasta nuevo aviso.

En este punto, ya podía sentirme tranquilo. Por fin había terminado de migrar el blog luego de algunas lágrimas y sudor.

Otros errores tontos al migrar WordPress

Además de mis errores, aquí algunos más que he visto (o cometido) con frecuencia:

  • No cambiar los salts del wp-config.php, dejando los mismos valores de la instalación original.
  • Subir solo los archivos de WordPress y olvidarse de la base de datos (sí, pasa más de lo que debería).
  • Configurar mal la URL en wp_options, lo que rompe el acceso al admin.
  • Olvidar regenerar los permalinks después de mover el sitio.
  • No revisar la compatibilidad de plugins con la nueva versión de PHP o WordPress.
  • Dejar archivos de respaldo accesibles (backup.sql, .tar.gz o .zip en la raíz del sitio).

Conclusión

Migrar y/o instalar WordPress no es ciencia espacial, pero sí tiene suficientes detalles como para hacerte perder tiempo en tonterías si no vas con cuidado. La lección aquí es simple: hazte una checklist y síguela religiosamente. Y eso fue exactamente lo que no hice hoy.

Solo quise migrarlo sin ninguna planificación, creyendo que lo haría todo en menos de 15 minutos. Pero, la mente es frágil y olvidé varios tips de WordPress que antes los conocía muy bien, pero dado que ya habían pasado varios meses sin trabajar mucho con este tema, se me fueron olvidando. Tantos errores tontos al migrar WordPress, aún no puedo creer cuánto tiempo perdí.

Resumen de la lección aprendida: Planifica bien y con cautela.

¿Tienes algún otro error común que hayas cometido migrando WordPress? ¡Déjalo en los comentarios!

Post navigation

Deja un comentario

Deja una respuesta

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