API de Análisis de UX de Sitios Web
El endpoint /api/site/analyze permite realizar análisis completos de sitios web, evaluando su rendimiento, SEO, accesibilidad y mejores prácticas.
Características principales
- Implementación avanzada y flexible
- Ofrece múltiples tipos de análisis: básico, completo y estructurado
- Utiliza servicios especializados para cada tipo de análisis
- Permite configurar múltiples opciones avanzadas
- Puede utilizar diferentes proveedores de IA (OpenAI, Anthropic, Gemini)
- Sistema sofisticado de manejo de errores
Analizador de Sitios Web
Prueba el API de análisis de sitios web con tus propios parámetros.
Tipos de análisis
Análisis básico (basic)
Proporciona un análisis rápido y general del sitio web, incluyendo:
- Información básica del sitio
- Estructura general
- Problemas evidentes
Análisis completo (complete)
Proporciona un análisis más profundo, incluyendo:
- Todo lo del análisis básico
- Evaluación de rendimiento
- Análisis SEO
- Verificación de accesibilidad
- Mejores prácticas
- Recomendaciones detalladas
Análisis estructurado (structured)
Proporciona un análisis estructurado del sitio, incluyendo:
- Jerarquía de elementos
- Bloques de contenido
- Estructura semántica
- Relaciones entre elementos
Métodos disponibles
POST /api/site/analyze
Realiza un análisis completo de un sitio web, evaluando múltiples aspectos como rendimiento, SEO, accesibilidad y mejores prácticas.
Parámetros de solicitud
{
"url": "https://ejemplo.com", // URL del sitio (obligatorio)
"options": {
"analysisType": "complete", // Tipo de análisis: 'basic', 'complete', 'structured'
"depth": 2, // Profundidad del análisis (1-3)
"timeout": 30000, // Tiempo máximo de espera en milisegundos (entre 5000 y 60000)
"ignoreSSL": false, // Ignorar errores de certificados SSL
"userAgent": "Mozilla/5.0...", // User Agent personalizado (opcional)
"failOnError": false, // Si es false, intenta continuar incluso con errores
"safeSelectors": true, // Si es true, valida los selectores antes de usarlos
"includeScreenshot": true, // Incluir captura de pantalla en la respuesta
"aiProvider": "openai", // Proveedor de IA: 'openai', 'anthropic', 'gemini'
"aiModel": "gpt-5-nano" // Modelo específico de IA a utilizar
}
}Respuesta
{
"url": "https://ejemplo.com",
"title": "Título del sitio",
"description": "Descripción del sitio",
"screenshot": "data:image/png;base64,...", // Captura de pantalla en base64 (opcional)
"performance": {
"overall": 85,
"firstContentfulPaint": {
"score": 90,
"label": "First Contentful Paint",
"description": "Tiempo hasta que se muestra el primer contenido"
},
"largestContentfulPaint": {
"score": 85,
"label": "Largest Contentful Paint",
"description": "Tiempo hasta que se muestra el contenido principal"
},
// Otras métricas de rendimiento...
},
"seo": {
"overall": 88,
"metaTags": {
"score": 95,
"label": "Meta Tags",
"description": "Uso correcto de meta tags"
},
// Otras métricas de SEO...
},
"accessibility": {
"overall": 78,
"contrast": {
"score": 80,
"label": "Contraste",
"description": "Contraste adecuado entre texto y fondo"
},
// Otras métricas de accesibilidad...
},
"bestPractices": {
"overall": 82,
"httpsUsage": {
"score": 100,
"label": "Uso de HTTPS",
"description": "El sitio utiliza HTTPS correctamente"
},
// Otras métricas de mejores prácticas...
},
"technologies": [
{
"name": "React",
"version": "18.2.0",
"category": "JavaScript Framework"
},
// Otras tecnologías detectadas...
],
"resources": {
"total": 45,
"totalSize": 2500000,
"byType": {
"image": {
"count": 15,
"size": 1200000
},
"script": {
"count": 12,
"size": 800000
}
// Otros tipos de recursos...
},
"largest": [
{
"url": "https://ejemplo.com/imagen.jpg",
"type": "image",
"size": 500000,
"transferSize": 480000
}
// Otros recursos grandes...
]
},
"recommendations": [
{
"category": "performance",
"priority": "alta",
"issue": "Imágenes sin optimizar",
"recommendation": "Optimizar y comprimir imágenes para reducir su tamaño",
"impact": "Mejora significativa en el tiempo de carga"
},
// Otras recomendaciones...
],
"timestamp": "2023-06-15T14:30:00Z",
"analyzedBy": "AI Site Analyzer v1.0",
"analysisVersion": "1.0.0",
"processingTime": 12345,
"errors": [
{
"code": "RESOURCE_LOAD_ERROR",
"message": "No se pudo cargar un recurso",
"details": "https://ejemplo.com/script.js",
"recoverable": true
}
// Otros errores no críticos...
],
"completeness": 98 // Porcentaje de completitud del análisis (0-100)
}GET /api/site/analyze
Obtiene información sobre el servicio de análisis.
Respuesta
{
"service": "AI Site Analyzer",
"version": "1.0.0",
"status": "operational",
"capabilities": [
"performance",
"seo",
"accessibility",
"best-practices",
"technology-detection"
],
"limits": {
"requestsPerDay": 100,
"maxTimeout": 60000
}
}POST /api/site/analyze/structure
Realiza un análisis estructural del sitio web, enfocado en la estructura del DOM y la organización del contenido.
Parámetros de solicitud
{
"url": "https://ejemplo.com", // URL del sitio (obligatorio)
"htmlContent": "<html>...</html>", // HTML de la página (opcional)
"screenshot": "data:image/png;base64,...", // Captura de pantalla en Base64 (opcional)
"options": {
"timeout": 30000, // Tiempo máximo de espera en milisegundos
"userAgent": "Mozilla/5.0...", // User Agent personalizado (opcional)
"depth": 2, // Profundidad del análisis (1-3)
"includeScreenshot": true, // Incluir captura de pantalla en la respuesta
"aiProvider": "openai", // Proveedor de IA: 'openai', 'anthropic', 'gemini'
"aiModel": "gpt-5-nano" // Modelo específico de IA a utilizar
}
}Respuesta
{
"url": "https://ejemplo.com",
"structure": {
"headings": {
"h1": 1,
"h2": 5,
"h3": 12,
"h4": 8
},
"sections": [
{
"type": "header",
"elements": 5,
"importance": "high"
},
{
"type": "main-content",
"elements": 25,
"importance": "high"
},
{
"type": "sidebar",
"elements": 10,
"importance": "medium"
},
{
"type": "footer",
"elements": 8,
"importance": "low"
}
],
"navigation": {
"mainMenu": {
"items": 6,
"depth": 2
},
"footer": {
"items": 4,
"depth": 1
}
},
"contentBlocks": [
{
"type": "hero",
"elements": 3,
"position": "top"
},
{
"type": "features",
"elements": 12,
"position": "middle"
},
{
"type": "testimonials",
"elements": 6,
"position": "middle-bottom"
},
{
"type": "contact",
"elements": 5,
"position": "bottom"
}
]
},
"analysis": {
"clarity": 85,
"hierarchy": 90,
"consistency": 80,
"userExperience": 88
},
"recommendations": [
{
"category": "estructura",
"priority": "media",
"issue": "Jerarquía de encabezados inconsistente",
"recommendation": "Asegurar que los encabezados sigan una jerarquía lógica",
"impact": "Mejora en SEO y accesibilidad"
}
// Otras recomendaciones...
]
}Diferencias con la API Básica
Esta API avanzada (/api/site/analyze) difiere de la API básica (/api/analyze) en los siguientes aspectos:
- Implementación: Utiliza servicios especializados para diferentes tipos de análisis, mientras que la API básica usa la función
analyzeSiteAction. - Opciones: Permite configurar múltiples opciones avanzadas como tipo de análisis, profundidad, timeout, proveedor de IA, etc. La API básica tiene opciones limitadas.
- Respuesta: Devuelve una estructura de respuesta más detallada con metadatos adicionales.
- Manejo de errores: Implementa un sistema de manejo de errores más sofisticado con tipos de errores específicos.
Nota: Si necesitas una implementación más simple para casos de uso básicos, puedes utilizar la API básica
/api/analyze. Para más información, consulta la documentación de la API Básica de Análisis.
Códigos de estado
200 OK: La solicitud se completó correctamente400 Bad Request: Parámetros de solicitud inválidos404 Not Found: El recurso solicitado no existe429 Too Many Requests: Se ha excedido el límite de solicitudes500 Internal Server Error: Error en el servidor durante el análisis504 Gateway Timeout: Tiempo de espera agotado durante el análisis
Ejemplos de uso
Realizar un análisis completo
const response = await fetch('https://tudominio.com/api/site/analyze', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://ejemplo.com',
options: {
analysisType: 'complete',
timeout: 45000,
includeScreenshot: true,
aiProvider: 'openai',
aiModel: 'gpt-5-nano'
}
})
});
const data = await response.json();
console.log(data.performance.overall); // Puntuación de rendimiento
console.log(data.recommendations); // Recomendaciones de mejoraRealizar un análisis estructural
const response = await fetch('https://tudominio.com/api/site/analyze/structure', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://ejemplo.com',
options: {
depth: 3,
aiProvider: 'anthropic',
aiModel: 'claude-3-5-sonnet-20240620'
}
})
});
const data = await response.json();
console.log(data.structure); // Estructura del sitio
console.log(data.analysis); // Análisis de la estructura