# Web Analyzer — Documentación extendida para asistentes de IA (llms-full.txt) # https://analyzer.moisesvalero.es # Última actualización: 2026-06-30 ## Resumen ejecutivo Web Analyzer es un analizador web gratuito. Permite auditar sitios públicos en una sola pasada y obtener un informe técnico con puntuaciones por categoría, incidencias accionables y sugerencias de reparación asistidas por IA. ## Producto y propietario - **Producto**: Web Analyzer / Analizador de Entrega Web & SEO - **Empresa**: Web Analyzer by Moisés Valero - **Responsable**: Moisés Valero (autónomo, España) - **Email de contacto**: info@moisesvalero.es - **Repositorio**: https://github.com/moisesvalero/web-analyzer - **Idiomas**: español (es-ES, por defecto), inglés (en, `?lang=en`) ## Stack técnico - **Frontend**: SvelteKit 2 + Svelte 5 (Runes), TypeScript estricto, Tailwind CSS v4. - **Despliegue**: Vercel (adapter-vercel, Node.js 22 runtime). - **Auth & DB**: Supabase (email Magic Link + Google OAuth, Postgres con RLS). - **Pagos**: Stripe Checkout (suscripción mensual, 5€, NIF/CIF obligatorio). - **Caché y rate limiting**: Upstash Redis. - **Navegador headless**: Playwright + Sparticuz Chromium. - **Correos transaccionales**: Resend. - **Linter**: oxlint. - **Formatter**: Prettier. - **Tests**: Vitest. ## Categorías de auditoría 1. **Rendimiento**: LCP, FCP, CLS, TBT, peso de página e imágenes, tiempo de respuesta HTML (TTFB). 2. **Seguridad**: HTTPS, HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, COOP, COEP, CORP, cookies seguras, COOP, xmlrpc.php (WP), librerías vulnerables (jQuery, Bootstrap, polyfill.io). 3. **SEO técnico**: title, meta description, canonical, H1, Open Graph, Twitter Cards, robots.txt, sitemap.xml, hreflang, JSON-LD (Organization, WebSite, FAQPage, SoftwareApplication, WebPage). 4. **AEO / GEO**: llms.txt, llms-full.txt, contenido legible, FAQ visible, datos estructurados, JSON-LD válido. 5. **Accesibilidad**: contraste WCAG 2.2 AA, alt en imágenes, labels en formularios, ARIA, jerarquía de encabezados, button/link names, idioma declarado. 6. **Privacidad**: política de privacidad, cookies, CMP, banners de consentimiento. 7. **Calidad de entrega**: compresión, TTFB, recursos rotos, CMS detectado (WordPress y plugins). ## Categorías Premium (headless) - Auditoría visual con navegador real (Playwright + Sparticuz Chromium en Vercel). - Captura de errores de consola JS en tiempo real. - Análisis de contraste de colores WCAG. - Tap targets pequeños (mobile). - Banners de cookies RGPD. - Capturas de pantalla (screenshot del viewport desktop y mobile). - Detección de cookies antes del consentimiento. - Detección de overflow responsive en múltiples viewports. - Imágenes rotas en render. - Recursos con error en render. ## Flujo de uso 1. El usuario introduce una URL (con o sin protocolo, sin www obligatorio). 2. El backend valida origen, SSRF, límites de tasa y cupo diario. 3. Encola el trabajo en Redis con `enqueueAnalyzeJob`. 4. `processJob` ejecuta auditoría estática con `auditPublicWebsite`. 5. Si el usuario es PRO (o gratuito con registro), ejecuta `auditVisualWebsite` con timeout de 30s. 6. Cachea la respuesta en Redis por 24h (`wa:cache:*`). 7. Persiste el informe en Supabase `reports` si hay `userId`. 8. Devuelve el JSON al cliente con `ok: true, status: 'completed'`. ## Modelo de datos (Supabase) ```sql profiles ( id uuid PRIMARY KEY REFERENCES auth.users, is_pro boolean DEFAULT false, stripe_customer_id text, created_at timestamptz DEFAULT now() ); reports ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), user_id uuid REFERENCES auth.users, requested_url text, final_url text, strategy text, -- 'mobile' | 'desktop' overall_score integer, performance_score integer, delivery_verdict text, -- 'block' | 'review' | 'ready' severity text, -- 'slow' | 'needs_improvement' | 'fast' category_scores jsonb, metrics jsonb, categories jsonb, issues jsonb, passed_checks jsonb, signals jsonb, highlights jsonb, analysis_mode text, -- 'complete' | 'partial' analysis_note text, created_at timestamptz DEFAULT now() ); ``` ## Endpoints API - `POST /api/web-audit/analyze` — Inicia un análisis. - `GET /api/web-audit/analyze/[jobId]` — Polling de estado. - `POST /api/web-audit/checkout` — Crea sesión de Stripe Checkout. - `POST /api/web-audit/portal` — Crea sesión del Customer Portal de Stripe. - `POST /api/web-audit/webhook` — Recibe eventos de Stripe. - `POST /api/web-audit/lead` — Envía un informe por email. - `GET /api/web-audit/reports` — Historial del usuario. - `POST /api/contact` — Mensajes del formulario de contacto. ## Seguridad - SSRF: bloquea IP privadas y loopback antes de fetch. - Límite HTML: 4 MB. - Límite assets: 2 MB. - Rate limit: 15/h por IP (anónimos) + 250/día global. - CSP estricto en `vite.config.ts`. - Cabeceras COOP/COEP/CORP en `hooks.server.ts`. ## Preguntas frecuentes ### ¿Es gratuito? Sí, el analizador es gratuito. La auditoría visual completa requiere el plan Premium (5€/mes). ### ¿Qué diferencia hay entre SEO, AEO y GEO? - **SEO**: optimización para buscadores tradicionales (Google, Bing). - **AEO** (Answer Engine Optimization): optimización para que asistentes seleccionen tu contenido como respuesta autoritativa. - **GEO** (Generative Engine Optimization): optimización para motores generativos (ChatGPT, Perplexity, Google AI Overviews) mediante llms.txt, JSON-LD y contenido estructurado. ### ¿Qué archivos de descubrimiento revisa? robots.txt, sitemap.xml, llms.txt, llms-full.txt, security.txt (opcional). ### ¿Puedo cancelar en cualquier momento? Sí, mediante el Portal de Cliente de Stripe integrado. Mantienes Premium hasta el final del período pagado. ### ¿Necesito tarjeta para el plan gratuito? No, el plan Básico no requiere registro ni tarjeta. ## Política de rastreo Los crawlers de IA (GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended) están permitidos en robots.txt para favorecer citación en respuestas generativas. El endpoint `/api/` está bloqueado para todos los bots. ## Entidades JSON-LD publicadas - `Organization` (en todas las páginas) - `WebSite` (homepage) - `SoftwareApplication` (homepage, con `offers` Basic y Premium) - `WebPage` (todas las páginas) - `FAQPage` (homepage) - `ContactPage` (página de contacto)