El error «La respuesta no es una JSON válida» aparece cuando la herramienta WordPress Importer no recibe una estructura de datos procesable tras enviar una petición AJAX. Esto ocurre porque el servidor interrumpe la ejecución por falta de tiempo, límite de memoria o devuelve código HTML no esperado (como un aviso de advertencia PHP o una redirección). La solución pasa por incrementar los recursos asignados a PHP y ajustar los tiempos de espera en la configuración web.
Qué significa el error
Durante la importación de contenido en WordPress (a través del plugin WordPress Importer o herramientas basadas en la API REST), la interfaz utiliza JavaScript para enviar el archivo XML fragmentado al servidor. La interfaz espera que el servidor responda exclusivamente con una cadena en formato JSON formateada correctamente.
Si durante ese proceso el servidor agota el tiempo de ejecución (timeout), supera el límite de memoria asignado a PHP o emite un fallo como un Notice o Warning, la respuesta JSON se corrompe. Al recibir código HTML o una cadena vacía en lugar de JSON, la consola de JavaScript falla y WordPress muestra el mensaje modal en pantalla.
Causas más habituales
- Límite de tiempo de ejecución superado (max_execution_time): El archivo XML es demasiado masivo y el proceso PHP se interrumpe a los 30 segundos predeterminados.
- Memoria de PHP insuficiente (memory_limit): La lectura del archivo de datos agota la RAM asignada a los procesos web.
- Salida de código no deseada (Output/Warnings): Plugins o temas activos emiten avisos PHP que se mezclan con la respuesta JSON.
- Fallo de comunicación en la API REST: Reglas en el archivo
.htaccesso directivas del servidor bloquean las llamadas awp-json. - Redirecciones activadas (HTTP a HTTPS o permalinks): El servidor redirige la llamada AJAX devolviendo una página HTML 301 o 302 en vez de procesar los datos.
Antes de empezar
Antes de modificar archivos de configuración o ejecutar comandos en el servidor, asegúrate de cumplir con los siguientes requisitos:
- Realiza una copia de seguridad completa de la base de datos y de la carpeta
wp-content. Si ocurre un fallo durante la importación, podrás restaurar el estado previo. Consulta cómo resolver un error crítico en WordPress si tu sitio deja de funcionar tras modificar archivos. - Acceso mediante FTP/SFTP o gestor de archivos del panel de control (cPanel, Plesk) a la raíz del sitio web.
- Acceso con rol de Administrador en el panel de control de WordPress.
- PHP actualizado a la versión 8.0, 8.1 u 8.2 en el servidor.
Solución 1: Incrementar los límites de tiempo y memoria de PHP
El motivo principal de este fallo al procesar archivos XML voluminosos es que el servidor agota el tiempo antes de terminar la lectura de datos. Ajustar las variables de PHP en el archivo de configuración .htaccess resolverá el bloqueo en la mayoría de alojamientos compartidos.
- Conéctate a tu servidor mediante FTP o utiliza el administrador de archivos del panel de hosting.
- Localiza el archivo
.htaccesssituado en el directorio raíz de la instalación de WordPress (habitualmente dentro depublic_htmlowww). - Edita el archivo y añade las siguientes directivas al final de la estructura existente:
php_value max_execution_time 300 php_value memory_limit 512M php_value post_max_size 64M php_value upload_max_filesize 64M - Guarda los cambios y sube el archivo al servidor.
- Regresa al panel de WordPress e intenta de nuevo el proceso de importación.
Esta solución funciona porque amplía el tiempo que el script de importación puede estar ejecutándose en segundo plano (de 30 a 300 segundos) y aumenta la memoria disponible para procesar los nodos del XML. Si estas variables provocan un error interno 500, tu servidor no permite cambiarlas mediante .htaccess. En ese caso, deshaz los cambios e intenta aplicarlos desde el archivo php.ini o la herramienta de selección de versión PHP de tu hosting.
Solución 2: Modificar los tiempos en wp-config.php y desactivar la depuración visual
Si la directiva de PHP muestra alertas o información sobre código obsoleto en pantalla mientras se procesa la importación, romperá la estructura del JSON enviado al navegador. Para solucionar esto, desactivaremos la depuración visual en wp-config.php e incrementaremos la memoria desde la configuración del núcleo.
- Abre el cliente FTP y edita el archivo
wp-config.phpubicado en la raíz del sitio. - Busca la línea que contiene
define('WP_DEBUG', false);otrue. - Reemplaza esa línea y añade el siguiente bloque de código justo antes del texto
/* That's all, stop editing! Happy publishing. */:define('WP_MEMORY_LIMIT', '512M'); define('WP_MAX_MEMORY_LIMIT', '512M'); define('WP_DEBUG', true); define('WP_DEBUG_DISPLAY', false); define('WP_DEBUG_LOG', true); - Si sufres problemas recurrentes con la carga de contenido, revisa las causas del error upload_max_filesize en WordPress para garantizar que los valores del sistema estén alineados.
- Guarda el archivo e inicia el proceso de importación en WordPress.
Al establecer WP_DEBUG_DISPLAY en false, evitamos que las advertencias y errores menores de PHP se impriman directamente en la salida del navegador. Así, cualquier advertencia de código se redirigirá al archivo wp-content/debug.log sin interferir con la respuesta JSON limpia requerida por la API.
Solución 3: Comprobar la salud del sitio y regenerar los enlaces permanentes
Las interrupciones en la API REST impiden que JavaScript envíe o reciba datos correctamente. Si las URL de las entradas o de la API se están redirigiendo, la llamada AJAX recibe una respuesta HTML en lugar de JSON. Si la respuesta está bloqueada por bucles de redirección, puedes ver más detalles en nuestra guía para solucionar el error ERR_TOO_MANY_REDIRECTS en WordPress.
- Entra en la administración de WordPress y navega a Ajustes > Enlaces permanentes.
- Sin cambiar ninguna opción, desplázate hasta el final de la página y haz clic en el botón Guardar cambios. Esto reconstruye la estructura de reescritura del archivo
.htaccess. - Accede a Herramientas > Salud del sitio y espera a que finalicen las comprobaciones de estado.
- Revisa la sección de resultados. Si aparece la alerta «La API REST ha detectado un resultado inesperado» o «El sitio no ha podido realizar una petición de bucle de retorno», significa que el servidor bloquea las conexiones locales.
- Revisa la configuración de tus plugins de seguridad (como Wordfence o iThemes Security) para asegurarte de que la ruta
/wp-json/no está bloqueada para usuarios autenticados.
Al regenerar los enlaces permanentes, WordPress borra las reglas corruptas que causan desviaciones en los endpoints de la API. Con una estructura limpia, las peticiones internas hacia wp-json/wp/v2/ devolverán las cabeceras HTTP 200 y la estructura JSON correcta.
Solución 4: Dividir el archivo XML de importación e importar mediante CLI
Cuando un archivo de exportación XML sobrepasa los 50 u 80 Megabytes, el servidor suele bloquear la transacción a nivel de servidor web (Nginx o Apache) independientemente de los límites de PHP. La opción más rápida y estable es importar utilizando la línea de comandos con WP-CLI.
- Accede a tu servidor por SSH con la cuenta de usuario que administra la web.
- Desplázate al directorio raíz de la instalación de WordPress:
cd /var/www/html/tu-sitio - Sube el archivo XML de importación a la raíz del servidor mediante FTP o
scp(por ejemplo,contenido.xml). - Ejecuta el siguiente comando para verificar si el plugin de importación de WP-CLI está activo:
wp plugin install wordpress-importer --activate - Inicia el proceso de importación desde la consola del servidor ejecutando:
wp import contenido.xml --authors=create
Al ejecutar la importación mediante SSH a través de la herramienta oficial WP-CLI, se omite por completo la capa del servidor HTTP, el tiempo de espera del navegador y las respuestas AJAX en formato JSON. El script se conecta directamente a la base de datos de MariaDB/MySQL sin riesgo de timeout ni errores de procesamiento de scripts cliente.
Cómo comprobar que se ha solucionado
Para comprobar que el error ha quedado resuelto, regresa al panel de administración de WordPress y dirígete a Herramientas > Importar. Selecciona la opción Ejecutar el importador bajo el encabezado de WordPress.
Selecciona tu archivo XML y presiona Subir archivo e importar. Asigna los autores del contenido y marca la casilla para descargar los adjuntos. Si el proceso inicia una barra de progreso o muestra el mensaje «¡Que lo disfrutes! La importación ha finalizado», los paquetes de datos JSON han sido procesados sin sufrir alteraciones ni bloqueos.
Si nada de lo anterior funciona
Si tras seguir los métodos expuestos la herramienta continúa devolviendo una JSON no válida, los motivos pueden ser estructurales en el entorno del hosting:
- Revisar los registros de errores del servidor: Accede a los archivos
error_logde Apache/Nginx o al log de PHP en la ruta/var/log/php-fpm/para observar la causa del cierre repentino del hilo de ejecución. - Falta de módulos de PHP: Confirma que la extensión
php-xmlyphp-mbstringestán instaladas y activas en el servidor web. Puedes comprobar la configuración de PHP leyendo la documentación oficial en PHP.net. - Reglas de ModSecurity o WAF: Pide al soporte de tu proveedor de hosting que revise si el Firewall de Aplicaciones Web (WAF) está bloqueando las peticiones POST enviadas hacia
admin-ajax.phpo a la ruta REST.
Preguntas frecuentes
¿Por qué la importación se detiene siempre al mismo porcentaje?
Ocurre cuando la tarea se topa con un elemento adjunto en el XML (como una imagen grande) cuyo servidor de origen no responde o la descarga tarda más del tiempo máximo asignado por el servidor local. Incrementar max_execution_time previene estas caídas.
¿Es peligroso importar el mismo archivo XML varias veces si da fallo?
WordPress verifica la duplicidad de títulos y entradas antes de escribirlas en la base de datos. Sin embargo, los archivos multimedia (imágenes o documentos) sí pueden duplicarse en la librería de medios si el proceso se interrumpe justo tras la descarga.
¿Afecta tener activos otros plugins durante la importación?
Sí. Plugins de caché, seguridad o SEO pueden interceptar las peticiones AJAX e insertar su propio código en la respuesta del servidor. Se aconseja desactivar temporalmente todos los plugins salvo WordPress Importer durante el proceso.
¿Puedo solucionar el fallo dividiendo el archivo XML a mano?
Sí. Puedes usar herramientas de separación de archivos XML para crear partes más pequeñas de unos 10 MB cada una. De este modo, la memoria consumida por cada transacción AJAX se mantendrá por debajo de los límites del servidor.