3.4
Normas web
PropostoQue nível de qualidade todo site cumpre?
Especificação
- WCAG 2.2 AA é o piso em toda superfície (critério 4). O que uma verificação estática pode ver é verificado em cada build: lang no html, um só h1 e nenhum nível de título pulado, um main e um link para pular, alt em cada imagem, nome ou aria-hidden em cada SVG em linha, texto em cada link, rótulo e autocomplete em cada controle. O foco (o anel), o tamanho de alvo (24 px) e o movimento reduzido são tarefa dos tokens de forma; o contraste é provado pelo build de cor.
- Endereços: cada página sob seu idioma (/es/, /en/, /pt/), cada segmento traduzido, minúsculas ASCII com hífens e barra final; a raiz redireciona por Accept-Language com o espanhol como reserva; x-default aponta para a raiz. Os endereços antigos redirecionam de forma permanente.
- Idiomas: lang igual ao idioma da página (es, en, pt); hreflang para os três mais x-default, absolutos, a própria página incluída; um canonical que é o endereço próprio. Números, datas e unidades com Intl no idioma da página (es-AR, pt-BR, en): vírgula decimal em espanhol e português, espaço fino antes da unidade e do %.
- SEO nos sites indexáveis: título de 10 a 70 caracteres, descrição de 30 a 160, og:title, og:description, og:url e og:image (a foto de perfil da marca a 1200 px salvo se a página tiver a sua), JSON-LD Organization no início com AKRIBIS Group como parentOrganization, e um sitemap com todas as páginas. A Brand é noindex enquanto é rascunho e leva tudo menos o sitemap.
- Orçamentos por página, sem compressão: HTML 200 kB, CSS 80 kB, JS 150 kB, fontes 260 kB, no máximo três fontes pré-carregadas; cada imagem com width e height; fontes só da Brand, nunca de um CDN de fontes; as folhas de estudo e os logotipos como arquivos, não incorporados.
- Consentimento: nenhum script de terceiros carrega antes do consentimento; um script de um domínio de analítica ou publicidade fica condicionado (data-consent). O padrão é nenhum: onde nada rastreia não é preciso aviso de cookies. A única analítica sem consentimento é o beacon sem cookies da Cloudflare.
- O verificador (brand/src/check-site.ts) roda estas regras sobre um site construído, mais os padrões da anatomia para a classe do site, lista cada infração e termina com erro; este site o roda em seus testes em cada build, com zero infrações em 175 páginas; cada site o roda antes de publicar.
- Não estático, ainda regra: operação por teclado de cada componente, foco visível, nada perdido com 400 % de zoom nem a 320 px, movimento parado com prefers-reduced-motion, formulários que anunciam seus erros. Conferido à mão em cada componente compartilhado quando é construído.
- Três regras a mais (ADR-0031, ADR-0032): pages, cada página compartilhada existe em cada idioma em seu slug; headers, o site publica em _headers a base de cabeçalhos (X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Options); naming, nenhuma página escreve uma grafia proibida em seu texto. O verificador roda dentro do build de cada site: a integração de @akribis/site o executa sobre dist/ e uma infração falha o build.
Para repensar
- Verificações com navegador (axe, contraste calculado, teclado) na integração contínua, quando os sites a tiverem: hoje nenhum tem CI.
- Imagens: formatos (AVIF, WebP), srcset e o tamanho do LCP; hoje nenhum site usa astro:assets.
- A migração dos endereços atuais (espanhol na raiz, segmentos sem tradução) para a gramática: tabela de redirecionamentos por site.
Evidência 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
- As normas como dado (standards.json)
- o verificador que qualquer site roda sobre seu build
- e este site como o primeiro que as cumpre.
Depende de
Necessário para
Decisão
- ADR-0025 Set the web standards as data and check every build against them Proposta
- ADR-0031 Deliver the shared layer of every site as one Astro package with a starter, and check each build inside it Proposta
- ADR-0032 Name the shared pages in each language and check the spellings on every build Proposta
Figuras
Endereços e idiomas
url-grammar^/[a-z0-9]+(?:/[a-z0-9-]+)*/$automáticohtml-langes, en, ptautomáticohreflangx-defaultautomáticocanonicalselfautomático
Acessibilidade
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
Orçamentos por página, sem compressão
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
Consentimento
consentgoogletagmanager.com, google-analytics.com, connect.facebook.net, hotjar.com, clarity.ms, doubleclick.net, cloudflareinsights.comautomático
Páginas e cabeçalhos
pages/<lang>/<slug>/ · /404.htmlautomáticoheadersX-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Optionsautomático
Nomes
namingSOL FARMA · Sol Farma · Sol-Farma · AKIOT · Akiot · AKRIBIS · One · AKRIBIS·One · AKRIBIS ONE · Akribis One · Parte de AKRIBISautomático
pnpm check roda o verificador sobre o site construído; uma infração falha o build. Qualquer site: node brand/src/check-site.ts dist