integracion

Unexpected token '<'

Tu app pidió datos, esperaba recibirlos en formato de datos, y lo que ha llegado empieza por el símbolo menor que. Eso es HTML: una página web. Está intentando interpretar una página como si fueran datos, y se atraganta en el primer carácter.

Revisado en agosto de 2026

De paso

Ya de paso: ¿tu app está exponiendo datos?

Analízala gratis mientras lees. Tarda treinta segundos y no toca nada.

Solo leemos lo que tu app ya le entrega a cualquier visitante.

Diagnóstico

Por qué te pasa

Ese HTML casi siempre es una página de error. Pediste datos a una dirección, esa dirección no existe, y el servidor te devolvió educadamente su página de no encontrado. Tu código no mira si la respuesta era correcta: intenta interpretarla directamente como datos y revienta ahí.

En apps de una sola página hay una variante especialmente confusa. Estas apps están configuradas para devolver su página principal ante cualquier dirección desconocida, porque así funciona la navegación interna. El efecto secundario es que una llamada a una dirección equivocada no devuelve un error claro: devuelve tu propia web. De ahí que el error hable de HTML inesperado cuando tú creías estar hablando con una base de datos.

Las causas concretas se reducen a tres. La dirección se construye con una variable de entorno que llegó vacía, y la petición acaba yendo a una ruta que no existe. La dirección tiene una barra de más o de menos al unirse con la ruta. O el servicio ha respondido con una página de mantenimiento o de bloqueo en vez de con datos.

Lo que este error no significa

  • No significa que los datos estén corruptos. Nunca llegaron: lo que llegó fue una página.
  • No es un problema de formato ni de codificación. Es que estás hablando con el sitio equivocado, o con el sitio correcto que te está diciendo que algo va mal.
  • No se arregla envolviendo la conversión en una comprobación para que no falle. Eso silencia el síntoma y deja la pantalla vacía sin explicación.

Solución

Arréglalo tú, gratis

El diagnóstico está en una sola pantalla del navegador y es concluyente: ver qué llega exactamente.

  1. 01Abre la app publicada, pulsa F12 y ve a la pestaña Network. Recarga y provoca el error.
  2. 02Busca la petición que falla y pulsa sobre ella. Mira la pestaña de respuesta: si ves código HTML, ahí tienes la confirmación.
  3. 03Fíjate ahora en la dirección exacta de esa petición. Casi siempre el problema salta a la vista: una dirección con undefined en medio, una doble barra, o una ruta que claramente no es la de la API.
  4. 04Si aparece undefined o la dirección está incompleta, el origen es una variable de entorno que falta. Ve al panel de tu hosting, dala de alta en todos los entornos y vuelve a desplegar.
  5. 05Si la dirección parece correcta, cópiala y ábrela directamente en una pestaña del navegador. Lo que veas ahí es exactamente lo que recibe tu app, y suele explicar el resto.

Si al abrir la dirección en el navegador ves tu propia web en vez de datos, es la variante de las apps de una sola página: la ruta no existe en el servidor y te está devolviendo la aplicación entera.

Y esto para la parte de código

Pégaselo tal cual al agente que escribió tu app. Está redactado para que te diga lo que ha hecho, no solo para que lo haga.

Prompt para tu agente

Mi app da el error "Unexpected token '<'" al procesar la respuesta de una petición.

Necesito que hagas esto:
1. Localiza la petición que falla y enséñame cómo se construye su dirección, pieza a pieza, incluyendo de dónde sale cada variable.
2. Comprueba si esa dirección puede quedar mal formada cuando falta alguna variable de entorno, y añade una comprobación que falle con un mensaje claro en vez de lanzar una petición a una ruta inventada.
3. Antes de interpretar la respuesta como datos, comprueba que la petición ha ido bien y que el tipo de contenido es el esperado. Si no lo es, muestra un error explicando que el servidor ha devuelto algo distinto a datos.
4. Revisa que no se estén juntando barras de más al unir la dirección base con la ruta.
5. Aplica lo mismo al resto de peticiones del proyecto que tengan el mismo patrón sin proteger, y dime cuáles eran.

Si no sale

¿Lo has intentado y sigue sin salir?

O el escáner de arriba ha encontrado algo y prefieres no tocarlo solo. En cualquiera de los dos casos esto ya es de los gordos y merece un humano: no es que no hayas sabido, es que has llegado al punto en que hace falta alguien que entre y lo vea por dentro.

Las 10 primeras apps son gratis. Estoy empezando y necesito casos reales. A cambio te pido permiso para contar después qué me encontré, sin decir de quién era la app ni enseñar tus datos. Sin tarjeta y sin suscripción: cuando se acaben las plazas empezaré a cobrar y lo diré aquí.

Cita a partir de mañana

Agendar revisión

Gratis

durante el lanzamiento

Elegimos hueco, miro tu app con calma y te digo qué pasa y cómo se arregla.

  • Sesión de trabajo en directo contigo
  • Diagnóstico del error y del riesgo real
  • Te quedas con el arreglo aplicado

Hoy, en cola prioritaria

Rescate exprés

Gratis

durante el lanzamiento

Entras en la cola de hoy. Reservas hueco y lo dejamos resuelto en el día.

  • Hueco el mismo día
  • Prioridad sobre las revisiones agendadas
  • Mismo trabajo, antes

Quién

Marc Sala

IT Manager

  • Analista de ciberseguridad certificado por Google

No es un rating anónimo de un marketplace: es la persona que va a entrar en tu app. Reviso el código, encuentro qué falla y lo arreglo contigo delante, explicándote qué ha pasado sin jerga.