3.4
Estándares web
Propuesto¿Qué nivel de calidad cumple todo sitio?
Especificación
- WCAG 2.2 AA es el piso en toda superficie (criterio 4). Lo que una comprobación estática puede ver se comprueba en cada build: lang en html, un solo h1 y ningún nivel de título salteado, un main y un enlace para saltar, alt en cada imagen, nombre o aria-hidden en cada SVG en línea, texto en cada enlace, etiqueta y autocomplete en cada control. El foco (el anillo), el tamaño de objetivo (24 px) y el movimiento reducido los resuelven los tokens de forma; el contraste lo prueba el build de color.
- Direcciones: cada página bajo su idioma (/es/, /en/, /pt/), cada segmento traducido, minúsculas ASCII con guiones y barra final; la raíz redirige por Accept-Language con el español como reserva; x-default apunta a la raíz. Las direcciones viejas redirigen de forma permanente.
- Idiomas: lang igual al idioma de la página (es, en, pt); hreflang para los tres más x-default, absolutos, la propia página incluida; un canonical que es la dirección propia. Números, fechas y unidades con Intl en el idioma de la página (es-AR, pt-BR, en): coma decimal en español y portugués, espacio fino antes de la unidad y del %.
- SEO en los sitios indexables: título de 10 a 70 caracteres, descripción de 30 a 160, og:title, og:description, og:url y og:image (la foto de perfil de la marca a 1200 px salvo que la página tenga la suya), JSON-LD Organization en el inicio con AKRIBIS Group como parentOrganization, y un sitemap con todas las páginas. Brand es noindex mientras es borrador y lleva todo salvo el sitemap.
- Presupuestos por página, sin comprimir: HTML 200 kB, CSS 80 kB, JS 150 kB, fuentes 260 kB, a lo sumo tres fuentes precargadas; cada imagen con width y height; fuentes solo desde Brand, nunca desde un CDN de fuentes; las hojas de estudio y los logotipos como archivos, no incrustados.
- Consentimiento: ningún script de terceros se carga antes del consentimiento; un script de un dominio de analítica o publicidad va condicionado (data-consent). El valor por defecto es ninguno: donde nada rastrea no hace falta un aviso de cookies. La única analítica sin consentimiento es la baliza sin cookies de Cloudflare.
- El verificador (brand/src/check-site.ts) corre estas reglas sobre un sitio construido, más los patrones de la anatomía para la clase del sitio, lista cada infracción y termina con error; este sitio lo corre en sus pruebas en cada build, con cero infracciones en 175 páginas; cada sitio lo corre antes de publicar.
- No estático, igual regla: manejo por teclado de cada componente, foco visible, nada perdido con 400 % de zoom ni a 320 px, movimiento detenido con prefers-reduced-motion, formularios que anuncian sus errores. Se comprueba a mano en cada componente compartido cuando se construye.
- Tres reglas más (ADR-0031, ADR-0032): pages, cada página compartida existe en cada idioma en su slug; headers, el sitio publica en _headers la base de cabeceras (X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Options); naming, ninguna página escribe una grafía prohibida en su texto. El verificador corre dentro del build de cada sitio: la integración de @akribis/site lo ejecuta sobre dist/ y una infracción falla el build.
Para volver a razonar
- Comprobaciones con navegador (axe, contraste calculado, teclado) en la integración continua, cuando los sitios la tengan: hoy ninguno tiene CI.
- Imágenes: formatos (AVIF, WebP), srcset y el tamaño del LCP; hoy ningún sitio usa astro:assets.
- La migración de las direcciones actuales (español en la raíz, segmentos sin traducir) a la gramática: tabla de redirecciones por sitio.
Evidencia para auditar
- brand/standards.yaml · brand/src/check-site.ts · brand/test/site.test.ts (175 pages, 26 rules, 0 violations after the fixes this decision caused: canonical, descriptions, x-default, heading levels, inlined sheets)
- Audit (2026-10-05): hreflang on 3 of 5 sites (one always pointing at the homes), canonical on 4, sitemap on 2, JSON-LD on 2, a skip link on 1, focus styles missing on 1, Google Fonts on 1, reCAPTCHA scripts on 2, no CI, no a11y tooling, no Intl utilities; lang tags es-AR/pt-BR on 3 sites and bare codes on 2
- Audit: all five sites keep Spanish at the root (prefixDefaultLocale: false); only akribis_info translates section slugs, and keeps Spanish for legal and thank-you pages in every language
- Audit: akribis_info scripts/i18n-integrity.mjs, akleia_info scripts/check-i18n-parity.mjs, solfarma_com scripts/checks.mjs (AA contrast, no font CDN, links resolve): three partial checkers
- WCAG 2.2 (1.4.11, 2.4.11, 2.4.13, 2.5.8, 2.3.3) · llmstxt.org · schema.org Organization
- Websites/akribis_info · audit of 2026-10-06: no skip link, no _headers, reCAPTCHA and the analytics beacon without consent, 222 inline styles, an SSR adapter for static pages, 232 accepted type errors
Entrega
- Los estándares como dato (standards.json)
- el verificador que cualquier sitio corre sobre su build
- y este sitio como primer sitio que los cumple.
Depende de
Lo necesitan
Decisión
- ADR-0025 Set the web standards as data and check every build against them Propuesta
- ADR-0031 Deliver the shared layer of every site as one Astro package with a starter, and check each build inside it Propuesta
- ADR-0032 Name the shared pages in each language and check the spellings on every build Propuesta
Figuras
Direcciones e idiomas
url-grammar^/[a-z0-9]+(?:/[a-z0-9-]+)*/$automáticohtml-langes, en, ptautomáticohreflangx-defaultautomáticocanonicalselfautomático
Accesibilidad
h11automáticoheading-orderh1 → h2 → h3automáticomainmainautomáticoskip-link#mainautomáticoimg-altaltautomáticosvg-namedrole="img" | aria-hiddenautomáticolink-texttext | aria-labelautomáticocontrols-labelledlabelautomáticoautocompletename, email, tel, organizationautomáticofocus-visible--focus-ringmanualtarget-size24 pxmanualreduced-motion--duration-* → 0manual
SEO
title10–70automáticodescription30–160automáticoopen-graphog:title, og:description, og:image, og:urlautomáticostructured-dataOrganizationautomáticositemapsitemap.xmlautomático
Presupuestos por página, sin comprimir
budget-html200 kBautomáticobudget-css80 kBautomáticobudget-js150 kBautomáticobudget-fonts260 kBautomáticopreloads≤ 3automáticoimg-dimensionswidth, heightautomáticoremote-fontsfonts.googleapis.com, fonts.gstatic.com, use.typekit.netautomático
Consentimiento
consentgoogletagmanager.com, google-analytics.com, connect.facebook.net, hotjar.com, clarity.ms, doubleclick.net, cloudflareinsights.comautomático
Páginas y cabeceras
pages/<lang>/<slug>/ · /404.htmlautomáticoheadersX-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Optionsautomático
Nombres
namingSOL FARMA · Sol Farma · Sol-Farma · AKIOT · Akiot · AKRIBIS · One · AKRIBIS·One · AKRIBIS ONE · Akribis One · Parte de AKRIBISautomático
pnpm check corre el verificador sobre el sitio construido; una infracción falla el build. Cualquier sitio: node brand/src/check-site.ts dist