Reporte de auditoría web — consultaen15.cl

Sitio auditado: https://www.consultaen15.cl/ — servicio de consejería psicológica online (Chile)
Fecha: 2026-05-27
Secciones evaluadas (URLs reales):

  • Inicio: https://www.consultaen15.cl/
  • Qué es Consulta en 15: https://www.consultaen15.cl/conoceme/
  • Agenda tu hora: https://www.consultaen15.cl/agendar-hora/
  • Contacto: https://www.consultaen15.cl/contacto-2/

Stack detectado: WordPress · tema Kadence 1.5.0 + Kadence Blocks 3.7.2 + Pagelayer Pro 2.1.0 (dos constructores) · SEO Rank Math · formularios WPForms Lite · reservas Simply Schedule Appointments (iframe) · pagos Flow/Webpay · Apache + HTTP/2 + TLS 1.3.

Método: descarga del HTML/CSS real de las 4 URLs con curl (User-Agent de navegador) y análisis de cabeceras. Lo que requiere render de JavaScript, lector de pantalla o test interactivo se marca explícitamente como «requiere verificación manual». No se ejecutó Lighthouse; los Core Web Vitals son estimaciones cualitativas marcadas como tales.

Nota metodológica: Las URLs literales /que-es-consulta-en-15, /agenda-tu-hora y /contacto no son las páginas reales (devuelven 404 o duplican contenido). Las reales son /conoceme/, /agendar-hora/ y /contacto-2/.


Resumen ejecutivo (transversal)

El sitio tiene una base salvable —contenido renderizado en servidor, paleta de marca con potencial, landmarks ARIA, formulario de contacto bien construido y datos estructurados vía Rank Math— pero arrastra problemas transversales que afectan a varias disciplinas a la vez y que conviene atacar primero porque cada uno desbloquea mejoras en múltiples áreas:

  1. Rendimiento del origen (CRÍTICO, transversal a Performance, UX y SEO). TTFB medido de 5,8–7,8 s en páginas internas, con HTTP 503 intermitentes y conexiones colgadas. Es el problema #1: degrada la conversión, impide cumplir Core Web Vitals y reduce el rastreo de Google.
  2. Dos constructores de páginas coexistiendo (Kadence Blocks + Pagelayer Pro) — fuente de deuda técnica que se manifiesta como inconsistencia visual (UI), CSS/JS duplicado (Performance) y dificultad de mantenimiento (Frontend).
  3. Jerarquía de encabezados rota (transversal a Accesibilidad y SEO): doble <h1> en Inicio y cero encabezados en las otras 3 páginas (los títulos son <p>/<div> estilizados).
  4. Propuesta de valor y confianza débiles (UX): el nombre «en 15» no coincide con el producto real (sesión de 45 min), el precio no aparece antes de reservar, y faltan señales de confianza esenciales para salud mental (confidencialidad, qué incluye, testimonios, política de privacidad).
  5. Contenido de demostración del tema indexable (SEO): ~11 páginas/posts de plantilla («hola-mundo», «4-modern-bathtubs», etc.) y páginas duplicadas (/contacto vs /contacto-2/, /agenda vs /agendar-hora/).

1. Accesibilidad

Conformidad WCAG 2.2 AA: NO CONFORMA.

SeveridadNº de hallazgos
Crítico2
Alto3
Medio4
Bajo2

🔴 Crítico

C-1. Tres de cuatro páginas no tienen ningún encabezado (<h1><h6>).
WCAG 1.3.1 (A), 2.4.6 (AA), 2.4.1 (A). En /conoceme/, /agendar-hora/ y /contacto-2/ el recuento de encabezados es 0. Ej.: en «Agenda tu hora» el título «RESERVA TU SESIÓN EN 3 SIMPLES PASOS» es un <p class="kt-adv-heading">. Rompe la navegación por encabezados de lectores de pantalla. Solución: convertir el título principal de cada página en un único <h1> y subtítulos en <h2>/<h3> (en Kadence Blocks, «Advanced Heading» → HTML Tag).

C-2. La portada tiene dos <h1> (««Tú decides el siguiente paso…»» y «¿Qué es la consejería en Psicología?»). WCAG 1.3.1 (A), 2.4.6 (AA). Solución: dejar un solo <h1> (el lema) y degradar el segundo a <h2>.

🟠 Alto

A-1. Texto amarillo #eab308 sobre fondo claro: contraste 1,92:1 (falla incluso el umbral de texto grande de 3:1). WCAG 1.4.3. Solución: oscurecer a un ámbar ≥4,5:1 (p. ej. #8a6d00) o usar el verde de marca #2a5d5d (7,44:1).

A-2. Texto dorado de marca #d4a353 sobre blanco: contraste 2,29:1 (ítem de menú activo y hover de enlaces). WCAG 1.4.3. Solución: reservar el dorado para elementos decorativos; para el ítem de menú activo usar verde #2a5d5d o un subrayado/borde.

A-3. Iframe de reservas (Simply Schedule Appointments): caja negra no auditable estáticamente. WCAG 2.1.1, 4.1.2, 1.3.1. El iframe sí tiene title="Reservar una hora" (correcto), pero todo el flujo de reserva (calendario, campos, errores) se carga vía JS. Requiere verificación manual con teclado y lector de pantalla por ser la función central; si no es accesible, ofrecer alternativa (teléfono/correo de reserva visible).

🟡 Medio

  • M-1. Campo de formulario con etiqueta sin sentido: <label>Nombre mensaje Electrónico</label> en /contacto-2/. WCAG 1.3.1, 2.4.6, 3.3.2. Corregir o eliminar (si es honeypot, ocultarlo correctamente).
  • M-2. Imágenes de contenido con alt="" (en Inicio y /conoceme/). WCAG 1.1.1. Si la foto es el retrato del profesional o aporta información, añadir alt descriptivo; si es decorativa, alt="" es correcto.
  • M-3. Campos obligatorios con required pero sin aria-required="true" explícito. WCAG 3.3.2, 4.1.2. Confirmar con NVDA/VoiceOver que se anuncian como «requerido».
  • M-4. Falta leyenda global «Los campos marcados con * son obligatorios». WCAG 3.3.2.

🟢 Bajo

  • B-1. Gris #888888 de la paleta global = 3,54:1 sobre blanco (falla para texto normal). No usarlo como texto de cuerpo.
  • B-2. Foco de teclado e indicador visible: requiere verificación manual (recorrido con Tab, indicador visible, sin trampas de foco en el iframe ni en el menú móvil).

✅ Lo que está bien (preservar)

<html lang="es"> correcto · landmarks ARIA completos (banner/navigation/main/contentinfo) · enlace «Saltar al contenido» funcional · navegaciones etiquetadas · logo con alt correcto · formulario de contacto con <label for>, type="email", aria-errormessage y asterisco con aria-hidden="true".


2. SEO

WordPress + Rank Math, técnicamente funcional pero con fundamentos incompletos y contenido residual del tema que contamina la indexación. El sitio útil son solo 4 páginas, pero el sitemap incluye ~una decena de páginas demo de plantilla.

Alto impacto

1. Contenido de demostración del tema indexable y en el sitemap. El post-sitemap.xml lista 11 entradas de demo (/digital-experience/, /4-modern-bathtubs/, /comfy-stylish/, /hola-mundo/, etc.) más la categoría /category/design/. Verificado: /digital-experience/ carga con Lorem Ipsum y /hola-mundo/ es el post por defecto. Dilución de autoridad temática (E-E-A-T) y desperdicio de presupuesto de rastreo. Acción: eliminar permanentemente esos posts/páginas/categorías; dejar que devuelvan 404/410 (no redirigir a la home → eso crea soft-404).

2. Páginas duplicadas. /contacto (200, con formulario) coexiste con /contacto-2/; y /agenda/ coexiste con /agendar-hora/. Canibalización y señales divididas. Acción: una sola URL por intención + 301 de la descartada a la superviviente; canonical autorreferencial.

3. Sitio sin visibilidad de marca en Google. site:consultaen15.cl no devolvió resultados del dominio. Puede ser normal en un sitio nuevo, pero combinado con lo anterior sugiere indexación pobre. Acción: verificar en Google Search Console, enviar sitemap_index.xml, revisar Cobertura y solicitar indexación de las 4 URLs reales tras la limpieza. Confirmar que ninguna lleva noindex.

4. Estructura de encabezados incompleta (ver también §1). Cada página debe tener un único <h1> orientado a intención + jerarquía <h2>/<h3>. Ej.: /conoceme/ debería usar un H1 tipo «Qué es Consulta en 15: consejería psicológica online» en vez de solo el nombre del profesional.

Medio impacto

  • 5. Schema.org subóptimo. Rank Math emite ProfessionalService. Para un psicólogo con Registro Nacional de Prestadores de Salud conviene MedicalBusiness/Psychologist + Person (Marcelo Machuca) con sameAs a LinkedIn, medicalSpecialty, areaServed y el N° de registro como identifier. Refuerza E-E-A-T en un nicho YMYL (salud). Evitar Article en páginas que no son artículos.
  • 6. Imagen Open Graph vertical (Home-scaled-1-266x1024.jpeg, 266×1024). Genera previsualizaciones recortadas. Acción: imagen OG horizontal 1200×630 + twitter:card=summary_large_image.
  • 7. Optimización de title/meta description hacia el rubro y geografía: incluir «consejería psicológica online Chile», «psicólogo online Chile». Confirmar unicidad y longitud (title 50–60, description 150–160).
  • 8. Enlazado interno mínimo: solo menú/footer, sin enlaces contextuales. Añadir enlaces de cuerpo (p. ej. /conoceme//agendar-hora/).

Bajo impacto

  • robots.txt correcto (WordPress estándar, declara el sitemap). · El iframe de reservas no se indexa como contenido propio: asegurar que el texto principal de /agendar-hora/ sea HTML server-side. · Reconfirmar con HTML crudo: viewport, lang, canonical autorreferencial, ausencia de noindex, og:url.

Corrección sobre auditoría preliminar: /que-es-consulta-en-15 y /agenda-tu-hora devuelven 404 limpio (no soft-404). El problema real es la duplicación descrita en el punto 2.


3. UX (Experiencia de usuario)

El tono es empático y apropiado para salud mental, pero el sitio falla en los tres pilares que determinan conversión y confianza en un servicio de salud mental de pago.

🔴 Alta prioridad

1. El precio no aparece antes de reservar; el pago se difiere a un correo posterior. La config del widget tiene "payments":"" y las instrucciones dicen: «la reserva solo se hará efectiva tras confirmar el pago. Te haremos envío de un correo… donde encontrarás el botón de Flow (Webpay)». El usuario entrega datos sin saber cuánto pagará y debe salir del sitio a su correo para pagar. Probablemente el mayor punto de fuga. Acción: mostrar el precio antes del calendario e integrar el cobro dentro del widget (SSA lo admite).

2. Incoherencia de duración vs. el nombre «en 15». La meta description dice «15 a 30 min», el cuerpo «15 a 45 min», y el widget define una cita única de 45 min. Acción: unificar el mensaje y aclarar qué significa «15».

3. Faltan señales de confianza esenciales. Cero menciones de «confidencial», «privacidad», «reembolso» o «testimonio»; no existe página de privacidad ni términos. Únicas credenciales: N° de Registro Nacional de Prestadores 75555 y LinkedIn. Acción: añadir declaración de confidencialidad, «qué incluye tu sesión», política de cancelación/reembolso, 2–4 testimonios y página de privacidad enlazada en el footer (exigible además por normativa de datos chilena).

4. El formulario de agendamiento pide datos invasivos como obligatorios. Requeridos: Nombre, Email, Teléfono, Dirección y Ciudad — para una videollamada online no se justifica y resulta invasivo en salud mental. Acción: dejar obligatorios solo Nombre y Email (Teléfono opcional); habilitar «Notas» para el motivo de consulta.

🟠 Media prioridad

  • 5. Contradicción «hoy mismo / de inmediato» vs. min_booking_notice = 1440 (24 h mínimas de antelación). Alinear el copy con la realidad operativa.
  • 6. El agendamiento vive en un iframe de terceros con alto fijo de 400px sobre un origen lento; si falla, el usuario ve un recuadro vacío sin mensaje. Añadir estado de carga / fallback con correo de contacto.
  • 7. Jerarquía de CTAs débil: un único botón estilizado en Inicio, sin CTA persistente en el header; texto inconsistente («agenda tu hora» / «AGENDA AHORA»). Añadir botón sticky de «Agendar».
  • 8. Formulario de contacto con label roto («mensaje Nombre Comentario») y «Apellidos» obligatorio innecesario; depende de JS. Corregir y mostrar el correo como fallback.

🟡 Baja prioridad / pulido

  • Arquitectura de información simple y correcta; el ítem «Qué es Consulta en 15» apunta a /conoceme/ (sobre el profesional) — alinear etiqueta con contenido.
  • Existe «Saltar al contenido»; tono empático adecuado. Reducir las MAYÚSCULAS sostenidas («ÁGIL DE ORIENTACIÓN…», «COSTO JUSTO»): bajan legibilidad y los lectores de pantalla a veces las deletrean.

Mención especial — flujo «Agenda tu hora»

El camino real del usuario:

Inicio → /agendar-hora/ → (espera carga del iframe lento)
   → elige fecha/hora → completa Nombre+Email+Teléfono+Dirección+Ciudad (obligatorios)
   → "reserva" sin ver precio → sale del sitio a su correo
   → abre el correo → click en botón Flow → paga en Webpay → vuelve

Cada flecha es fuga. Los dos abandonos más probables: pedir dirección/ciudad sin precio, y el salto al correo para pagar. Palanca central de conversión: mostrar precio antes del calendario, cobrar dentro del widget en un paso, y reducir campos a Nombre+Email(+Teléfono).


4. UI (Diseño visual)

Paleta de marca con potencial (dorado #d4a353 + petróleo #2a5d5d sobre cremas cálidas), pero ejecución fragmentada por el doble constructor: Inicio (Kadence) razonablemente consistente vs. páginas internas (Pagelayer) desalineadas.

🔴 Crítico

1. Contraste de color reprobado (cálculo WCAG sobre los hex reales):

ParRatioResultado
Dorado #d4a353 / blanco2,29:1Falla AA y AAA
Dorado #d4a353 / crema #f7f1e62,04:1Falla total
Amarillo #eab308 / blanco1,92:1Falla total
Gris #888888 / blanco3,54:1Solo texto grande
Hover botón: verde #13612e / azul rgba(17,89,175)1,11:1Texto casi invisible

El dorado y el amarillo se usan como color de texto, no solo como acento. Base de texto sí correcta (#313131 = 13:1, #5c4228 = 8,25:1, petróleo #2a5d5d = 7,44:1).

2. Estado hover de botón roto. En hover aplica verde #13612e sobre azul (off-brand, 1,11:1) y además cambia de pill (radius 55px) a 20px y anula la sombra → salto de forma desconcertante.

3. Doble sistema de botones por el doble constructor. Inicio usa botones Kadence (Inter 900, mayúsculas, pill 55px, borde 4px slate); las internas usan botones Pagelayer con animaciones propias (btn-anim-glow/thin/slide). El usuario percibe dos sitios distintos.

🟠 Alto

  • 4. Proliferación tipográfica: 5 familias en el <head> (Roboto, Roboto Condensed, Inter, Questrial, Montserrat) y hasta 7 en páginas Pagelayer (+Poppins, Open Sans). Escala de >15 tamaños sin sistema modular (duplicados 30/32, 35/36, 44/45).
  • 5. MAYÚSCULAS sostenidas forzadas en menú, footer, botones y etiquetas → reduce velocidad de lectura.
  • 6. Logo PNG pesado: Gemini_Generated_Image_...png, 1108×621, 218 KB, fetchpriority="high", mostrado a ≤400px. Debería ser SVG o WebP de ~50–80 KB.
  • 7. Foco de teclado sin indicador visible: los :focus solo replican el :hover (que además está roto). Añadir :focus-visible con outline claro. (Confirmar con render.)

🟡 Medio

  • 8. Colores fuera de paleta heredados de Kadence (slate por defecto #1A202C…, palette10–15 con azules/rojos/naranjas) y gradientes preset azul→navy de Gutenberg compiten con la marca.
  • 9. Iframe de reservas con alto fijo de 400px → probable scroll interno/recorte en móvil, justo en la conversión. (Confirmar con render.)
  • 10. Formularios WPForms sin tematizar con la marca (se sienten como widget pegado).

🟢 Positivos

Cabecera transparente sobre hero · footer coherente (crema #f7f1e6) en las 4 páginas · breakpoints Kadence sanos (1024/767/1025px) · base cromática de texto bien contrastada · navegación consistente en etiquetas.

Recomendaciones de diseño (prioridad)

  1. Prohibir dorado/amarillo como texto; reservarlos a fondos/bordes/iconos. Para texto de acento usar petróleo #2a5d5d o dorado oscurecido (~#9a6f29 ≥4,5:1).
  2. Rehacer el hover del botón (mantener forma pill, color de marca, texto ≥4,5:1, sombra real).
  3. Unificar en un solo constructor (migrar internas de Pagelayer a Kadence Blocks) — mayor retorno en consistencia.
  4. Reducir a 2 familias tipográficas y definir escala modular (14/16/18/24/32/44/56); quitar mayúsculas sostenidas.
  5. Reemplazar el logo por SVG/WebP ligero; servir fotos en WebP/AVIF con srcset + loading="lazy".
  6. Añadir :focus-visible con outline teal en todos los interactivos.

5. Performance (Rendimiento)

Todas las cifras son mediciones reales con curl + análisis del HTML. NO cumple un objetivo de rendimiento aceptable, casi exclusivamente por el TTFB del origen.

Métricas medidas

Tiempo de respuesta del servidor (TTFB):

PáginaURLTTFB
Inicio/~0,09 s cacheada; 503 intermitente
Qué es/conoceme/6,0–6,3 s
Agenda/agendar-hora/7,0–7,8 s
Contacto/contacto-2/5,8 s

Durante las pruebas el origen devolvió HTTP 503 y, con cabeceras realistas, colgó la conexión 180 s. Comportamiento inestable bajo carga.

Transporte: Apache · HTTP/2 · TLS 1.3 · gzip y brotli activos · HSTS · sin CDN (servido desde origen). HTML transferido ligero (17–19 KB comprimido; ~80% de compresión).

Recursos clave:

  • Logo PNG 213 KB (1108×621, fetchpriority="high") en las 4 páginas, sin formato moderno.
  • pagelayer-pro/js/combined.js: ~96 KB gzip, no minificado, en Agenda y Contacto.
  • jQuery (30 KB) + jQuery Migrate (legado).
  • 14–15 archivos CSS render-blocking en el <head>, sin combinar.
  • 5 familias de Google Fonts por <link> bloqueante, sin preconnect a fonts.gstatic.com.
  • Imagen de contenido Optimizada-a-30.webp (23,8 KB, WebP, cache 1 año): bien optimizada.
  • /agendar-hora/ carga un iframe SSA (documento adicional desde el mismo origen lento → hereda el TTFB).
  • /contacto-2/ carga WPForms (8 JS) + reCAPTCHA (tercero).

Caché: HTML max-age=0 (no cacheable) · estáticos con Expires ~30 días sin max-age/ETag · uploads de imagen max-age=31536000 (correcto).

Hallazgos priorizados

  • CRÍTICO: TTFB 5,8–7,8 s + 503/cuelgues intermitentes (origen sin caché de página efectiva, capacidad limitada). Domina toda la métrica de carga.
  • ALTO: logo PNG 213 KB como probable LCP · 14–15 CSS render-blocking · sin CDN.
  • MEDIO: 5 familias de fuentes sin preconnect · dos page builders (combined.js ~96 KB + jQuery + Migrate) · iframe de reserva sobre origen lento · reCAPTCHA en Contacto.
  • BAJO: HTML no cacheable · 0 loading="lazy" · enlace a http://linkedin.com (no HTTPS).

Estimación de Core Web Vitals (cualitativa, NO Lighthouse)

  • LCP: muy probablemente deficiente (>4 s) por TTFB + logo PNG.
  • CLS: probablemente bueno (<0,1) (las <img> llevan width/height).
  • INP: riesgo medio por jQuery + Migrate + combined.js + WPForms/reCAPTCHA.

Recomendaciones (por ROI)

  1. Caché de página a nivel servidor (LiteSpeed Cache / WP Rocket / W3TC) → bajar TTFB de 5–8 s a <0,5 s.
  2. CDN (Cloudflare) → absorbe picos, evita 503, reduce latencia geográfica.
  3. Investigar causa de los 503 (procesos PHP/Apache, plan de hosting, consultas a BD).
  4. Reemplazar el logo por WebP/AVIF redimensionado (<30 KB).
  5. Combinar/minimizar CSS; evaluar eliminar Pagelayer Pro (quita ~96 KB).
  6. Diferir JS no crítico; cargar reCAPTCHA solo al interactuar.
  7. Reducir a 1–2 familias de fuentes + preconnect o auto-hospedaje.
  8. Cache-Control: public, max-age=31536000, immutable en estáticos versionados.

6. Frontend (Implementación)

WordPress estándar (Kadence + Kadence Blocks + Pagelayer Pro) con calidad media-baja: contenido server-side (bueno) y formulario de contacto sólido, pero deuda técnica estructural por mezclar dos constructores, jerarquía de encabezados rota y entrega de CSS/JS no optimizada. No es desarrollo a medida, es ensamblaje de tema + plugins.

🔴 Críticos

  1. Jerarquía de encabezados rota o ausente (ver §1): doble <h1> en Inicio; 0 encabezados en /conoceme/, /agendar-hora/, /contacto-2/ (títulos como <div>/<p>).
  2. Dos constructores coexistiendo (Kadence Blocks + Pagelayer-Pro): duplica CSS/JS, multiplica <div> envoltorio y complica el mantenimiento. Consolidar en Kadence Blocks.

🟠 Altos

  1. CSS/JS render-blocking: Inicio con <head> de ~63 KB, 14 hojas externas + 14 <style> inline; sin CSS crítico ni caché de página visible.
  2. JS sin defer: Contacto carga 11 scripts externos (jQuery, Migrate, combined.js, 7 de WPForms).
  3. jQuery + jQuery Migrate en producción (peso legado innecesario).
  4. Imágenes sin loading="lazy"; mucho visual servido como background-image (sin alt, sin lazy). Imagen OG Home-scaled-1-266x1024.jpeg (266×1024, vertical) inadecuada.

🟡 Medios

  1. Enlace a http://linkedin.com/... (HTTP) en las 4 páginas → cambiar a https:// + rel="noopener".
  2. Faltan cabeceras de seguridad: presentes HSTS y Permissions-Policy; faltan Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy.
  3. <noscript> duplicado en Contacto.
  4. Reserva embebida en <iframe> (SSA) → contenido fuera del documento principal, penaliza el paso de conversión.

🟢 Positivos confirmados

Contenido renderizado en servidor (no SPA) · title/meta/canonical únicos por página · viewport correcto y consistente · responsive real con media queries Kadence bien estructuradas · datos estructurados Schema.org vía Rank Math · landmarks ARIA + HTML5 semántico · formulario WPForms bien implementado (CSRF token, type=email, label/for, aria-errormessage, validación cliente) · sin marcado obsoleto · lang="es" · todas las <img> con alt.

Recomendaciones técnicas

  1. Reconstruir la semántica de encabezados (un <h1> por página + h2/h3).
  2. Eliminar Pagelayer/Pagelayer-Pro y rehacer esas secciones con Kadence Blocks.
  3. Instalar optimización (WP Rocket/LiteSpeed): CSS crítico, diferir, combinar/minificar, caché de página.
  4. Añadir defer a JS no crítico; evaluar quitar jQuery Migrate.
  5. loading="lazy" en imágenes below-the-fold; imagen OG horizontal 1200×630.
  6. Enlace LinkedIn a HTTPS + rel="noopener noreferrer".
  7. Añadir cabeceras de seguridad (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, y a medio plazo CSP).
  8. Eliminar el <noscript> duplicado en Contacto.

7. Verificación con navegador real (Playwright / verdict)

Tras el análisis estático se hizo una pasada con un navegador real (Chromium vía verdict/Playwright) para cerrar lo que el HTML estático no permitía. Resultados medidos el 2026-05-27:

Rendimiento real (no estimado):

PáginaTTFBDOM listoLoad total
Inicio (/)7.082 ms7.566 ms7.631 ms
Agenda (/agendar-hora/)6.579 ms6.925 ms11.889 ms

→ Confirma el hallazgo crítico de Performance: el origen tarda ~7 s solo en empezar a responder, y /agendar-hora/ tarda ~12 s en cargar del todo porque el widget de reserva es un iframe anidado (wp-json/ssa/v1/embed-inner) que carga su propio documento desde el mismo origen lento. Es el peor caso, justo en la página de conversión.

Confirmaciones en el DOM renderizado (no solo HTML estático):

  • Encabezados rotos confirmados: en el árbol de accesibilidad renderizado, «RESERVA TU SESIÓN EN 3 SIMPLES PASOS» es paragraph > strong, no un encabezado. Los 3 pasos son <paragraph>. (Confirma C-1 / §1.)
  • Enlace LinkedIn en http:// confirmado en el árbol renderizado de las 4 páginas.
  • Sin errores de consola en Inicio (console limpia).
  • Widget de reserva = iframe anidado embed-inner → documento adicional, responsable del load de ~12 s.

Matiz de contraste (corrige el detalle de §1/§4): en el hero (móvil y escritorio) el H1 dorado/amarillo va sobre fondo oscuro casi negro, donde el contraste sí es aceptable. Los fallos de contraste (dorado #d4a353 y amarillo #eab308) ocurren cuando esos colores se usan como texto sobre fondos claros/crema (menú activo, hover, subtítulos), no en el hero.

Render responsive: la versión móvil (390×844) renderiza correctamente —menú hamburguesa presente, texto legible, hero coherente—. El sistema responsive de Kadence funciona.

Evidencia visual capturada en ./evidencia/: agendar-desktop.png, agendar-widget.png, home-mobile.png.

Pendiente aún de test manual (el CLI no permite entrar al iframe anidado ni simular lector de pantalla): navegación por teclado dentro del calendario SSA, anuncio de errores con NVDA/VoiceOver, y comportamiento exacto del alto del iframe en móvil.


Plan de acción priorizado (transversal)

Ahora (mayor ROI, desbloquea varias áreas):

  1. Estabilizar y acelerar el origen: caché de página + CDN + investigar los 503. (Performance, UX, SEO)
  2. Reconstruir la jerarquía de encabezados (un <h1>/página + h2/h3). (Accesibilidad, SEO, Frontend)
  3. Mostrar el precio antes de reservar y, si es posible, cobrar dentro del widget. (UX — conversión)
  4. Limpiar contenido demo del tema y resolver páginas duplicadas con 301. (SEO)

Corto plazo:

  1. Corregir contrastes (dorado/amarillo como texto, hover de botón). (Accesibilidad, UI)
  2. Reducir campos del formulario de agendamiento (quitar Dirección/Ciudad). (UX)
  3. Añadir señales de confianza: confidencialidad, qué incluye, testimonios, página de privacidad. (UX, SEO/E-E-A-T)
  4. Optimizar logo (SVG/WebP) y reducir a 1–2 familias tipográficas. (Performance, UI)
  5. Schema MedicalBusiness/Psychologist + Person; imagen OG horizontal. (SEO)

Estructural (medio plazo):

  1. Unificar en un solo constructor (Kadence Blocks) — elimina inconsistencia visual, peso de JS/CSS y deuda de mantenimiento de una vez. (UI, Performance, Frontend)
  2. Añadir cabeceras de seguridad y migrar enlaces a HTTPS. (Frontend)

Pendiente de verificación manual (no auditable estáticamente)

  • Flujo completo de reserva en el iframe SSA con teclado y lector de pantalla (NVDA/VoiceOver).
  • Indicador de foco visible y orden de tabulación en las 4 páginas y el menú móvil.
  • Render real de estados hover/focus, recorte del iframe de 400px en móvil, legibilidad del nav transparente sobre cada hero.
  • Lighthouse/PageSpeed real y Core Web Vitals de campo (CrUX) una vez estabilizado el origen.
  • Flujo de pago end-to-end con Flow/Webpay.