Acerca de este problema HTML
Un código de estado HTTP 202 Accepted indica que el servidor ha recibido y reconocido la petición, pero el procesamiento aún no está completo. Esto se utiliza comúnmente para operaciones asíncronas — el servidor pone en cola el trabajo y responde inmediatamente para informar al cliente que la petición fue aceptada sin hacer que el cliente espere. Aunque esto es perfectamente válido para APIs y sistemas de trabajos en segundo plano, no es apropiado para servir documentos HTML, hojas de estilo, scripts, u otros recursos que el navegador (o validador) necesita leer inmediatamente.
El Validador HTML de W3C funciona obteniendo tu página y cualquier recurso enlazado (archivos CSS, imágenes, scripts, etc.) a través de HTTP. Espera una respuesta 200 OK con el contenido completo en el cuerpo de la respuesta. Cuando recibe un 202 Accepted, el cuerpo puede estar vacío, incompleto o contener un marcador de posición — ninguno de los cuales puede ser validado de manera significativa. Esto resulta en que el validador aborte su verificación para ese recurso y reporte el error.
Causas comunes
-
Retrasos en el procesamiento del lado del servidor: Tu servidor web o framework de aplicación está aplazando la generación de contenido a un proceso en segundo plano y devolviendo
202como respuesta provisional. - Endpoints asincrónicos o en cola: La URL apunta a un endpoint estilo API que desencadena un trabajo en lugar de servir contenido directamente.
-
Configuración incorrecta de CDN o proxy: Una red de entrega de contenido o proxy reverso frente a tu servidor está devolviendo
202mientras obtiene o genera el recurso desde el origen. -
Generación de sitio estático bajo demanda: Algunas plataformas generan páginas en la primera petición y devuelven
202hasta que la compilación está completa (por ejemplo, regeneración estática incremental que aún no ha almacenado en caché la página).
Cómo solucionarlo
La solución principal es asegurar que la URL que envíes al validador responda con un estado 200 OK y entregue el contenido completo del recurso en el cuerpo de la respuesta. Aquí tienes pasos específicos:
-
Verifica la configuración de tu servidor. Asegúrate de que tu servidor web o aplicación devuelva
200 OKpara páginas HTML y recursos estáticos. Si se necesita procesamiento en segundo plano, debe ocurrir antes de que se envíe la respuesta, o el resultado debe almacenarse en caché y servirse directamente en peticiones posteriores. -
Evita validar endpoints asincrónicos. Si una URL está diseñada para desencadenar trabajo en segundo plano (como un webhook o cola de tareas), no es un recurso HTML validable. Solo envía URLs que sirvan documentos HTML completos.
-
Pre-calienta el contenido en caché. Si tu plataforma de hosting utiliza generación bajo demanda, visita la URL en un navegador primero para desencadenar la compilación, luego valídala una vez que la página esté completamente generada y almacenada en caché.
-
Inspecciona las cabeceras de respuesta. Usa las herramientas de desarrollador del navegador o una herramienta de línea de comandos como
curl -I <url>para verificar el código de estado que tu servidor realmente devuelve. Busca la líneaHTTP/1.1 202 Acceptedy rastrea por qué se está enviando.
Ejemplos
Comportamiento incorrecto del servidor (devuelve 202)
En este ejemplo conceptual, el servidor responde con 202 para una página HTML, lo que impide que el validador la verifique:
HTTP/1.1 202 Accepted
Content-Type: text/html
<!-- El contenido puede estar vacío o incompleto -->
Si estás usando un servidor Node.js/Express, este tipo de código causaría el problema:
app.get('/page', (req, res) => {
res.status(202).send('<p>Processing...</p>');
// El trabajo en segundo plano ocurre después
});
Comportamiento correcto del servidor (devuelve 200)
El servidor debe responder con 200 OK y el contenido HTML completo:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
</head>
<body>
<h1>Welcome</h1>
<p>This page is fully rendered and ready to validate.</p>
</body>
</html>
La solución equivalente en un servidor Node.js/Express:
app.get('/page', (req, res) => {
const html = renderPage(); // Genera contenido completo sincrónicamente o lo espera
res.status(200).send(html);
});
Verificando el código de estado con curl
Puedes verificar qué código de estado devuelve una URL antes de enviarla al validador:
curl -I https://example.com/page
Busca HTTP/1.1 200 OK (o HTTP/2 200) en la primera línea de la salida. Si ves 202 Accepted, investiga la configuración de tu servidor antes de intentar la validación.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: