Pular para conteúdo

Baseline de hosting dos blogs

DEV-1875. Contrato final no produto SHA 97cc086e; baseline Vercel coletada no harness SHA 515e3522. Serve para comparar o piloto na VPS Dev antes de qualquer troca de DNS. O Vercel é referência de comparação, não um estado aprovado em todos os gates.

O que este componente faz

O harness em scripts/blog-baseline/ mede desempenho HTTP, comportamento sob concorrência, SEO técnico e sinais de AEO dos blogs de tenant. Ele separa três perguntas que não podem ser misturadas:

  1. Desempenho absoluto: a página atende aos limites definidos?
  2. Paridade: a VPS preserva URL, HTML essencial, canonical, sitemap, robots e dados estruturados do Vercel?
  3. Regressão: a VPS piora o TTFB em relação ao mesmo URL medido na mesma máquina e janela?

Nenhuma coleta troca DNS, publica conteúdo ou notifica o IndexNow. O probe de /api/publish usa credencial inválida e nenhum campo publicável; somente HTTP 401 aprova o comportamento fail-closed.

Escopo da baseline de 2026-08-27

  • Quatro blogs: Felipe, Ariane, Sweet Angels e Rodrigo.
  • Oito páginas: home e um post representativo por blog.
  • HTTP: 30 amostras sequenciais e três lotes de 20 requests por página, totalizando 720 respostas medidas.
  • Lighthouse mobile: cinco execuções por página; mediana nearest-rank.
  • Ambiente: Windows x64, Intel Core Ultra 7 155H, 22 cores, Node 24.13.0 e rede rotulada book-current-network-2026-08-27.
  • Evidência de campo CrUX/PSI: indisponível, porque a consulta pública respondeu 429. Ausência de dados não equivale a aprovação.

Contrato de comparação e routing VPS Dev

O manifesto versionado é a fonte imutável de alvos e thresholds. A comparação falha fechado quando Vercel e VPS não usam:

  • o mesmo hash do manifesto e do coletor;
  • Node e plataforma equivalentes;
  • o mesmo hostname, modelo/quantidade de CPU e rótulo de rede;
  • intervalos completos collected_atcompleted_at dentro de 120 minutos;
  • Lighthouse próximo da respectiva coleta HTTP e com exatamente cinco fetched_at válidos e únicos por página.

O manifesto não recebe IP ou hostname de infraestrutura. No piloto, um overlay efêmero por target.id entra via BASELINE_REQUEST_TARGETS_JSON ou --request-targets. O harness resolve o hostname do overlay e conecta pelo IP efetivo, mas preserva a URL pública, Host e TLS/SNI.

O candidate é ancorado na VPS Dev por hash canônico do destino: 0220d141708c078ae6a8afaca09910e2b5c461f6f6011e23f0faef464a44f1b8. A evidência guarda hashes, não o destino em claro. O mesmo hash precisa aparecer nas superfícies HTTP e Lighthouse. O runner Lighthouse registra hash próprio e hashes dos 40 relatórios; apontar o candidate novamente para a Vercel resulta em NO-GO.

Gates

Dimensão Limite
Lighthouse lab LCP mediano ≤ 2,5 s; CLS ≤ 0,10; TBT ≤ 200 ms
Campo, quando disponível p75 LCP ≤ 2,5 s; INP ≤ 200 ms; CLS ≤ 0,10
TTFB VPS p95 ≤ 1,5 s e regressão p75 ≤ max(100 ms, 20%) por URL
Concorrência 60/60 respostas finais 2xx; p95 concorrente ≤ 2× p95 sequencial
SEO/AEO 200, hostname final correto, sem noindex, crawlers permitidos, canonical/sitemap corretos, Article e BreadcrumbList válidos
Publish probe 401 com credencial inválida e payload não publicável
IndexNow rota pública configurada e 200, sem disparar notificação
Routing baseline em DNS público; candidate no hash canônico da VPS Dev; HTTP e Lighthouse vinculados

Lighthouse não mede INP. TBT é somente proxy de laboratório e não deve ser renomeado como INP.

Resultado no Vercel

HTTP

Blog Página TTFB p75 TTFB p95 Conc. p95 Sucesso Razão Gate
Felipe Home 464,49 ms 599,07 ms 910,80 ms 60/60 1,52× Pass
Felipe Post sem imagem 419,54 ms 586,70 ms 1.037,38 ms 60/60 1,77× Pass
Ariane Home 430,15 ms 597,44 ms 928,81 ms 60/60 1,55× Pass
Ariane Post com imagem 599,73 ms 2.000,22 ms 1.021,51 ms 60/60 0,51× FAIL p95
Sweet Angels Home 441,13 ms 603,76 ms 1.828,97 ms 60/60 3,03× FAIL concorrência
Sweet Angels Post com imagem 478,42 ms 625,22 ms 1.572,30 ms 60/60 2,51× FAIL concorrência
Rodrigo Home 563,25 ms 687,11 ms 1.892,96 ms 60/60 2,75× FAIL concorrência
Rodrigo Post com imagem 449,49 ms 931,44 ms 948,09 ms 60/60 1,02× Pass

Disponibilidade: 720/720. O p95 sequencial passou em 7/8; o post da Ariane marcou 2.000,22 ms. Três páginas falharam também a razão concorrente máxima de 2×. Resultado final: quatro das oito páginas reprovaram performance.

Lighthouse mobile

Blog Página LCP CLS TBT Gate
Felipe Home 4.489 ms 0,00 62 ms FAIL LCP
Felipe Post sem imagem 2.187 ms 0,02 36 ms Pass
Ariane Home 5.003 ms 0,04 81 ms FAIL LCP
Ariane Post com imagem 4.106 ms 0,07 63 ms FAIL LCP
Sweet Angels Home 2.986 ms 0,00 99 ms FAIL LCP
Sweet Angels Post com imagem 2.298 ms 0,00 58 ms Pass
Rodrigo Home 7.077 ms 0,00 38 ms FAIL LCP
Rodrigo Post com imagem 3.738 ms 0,02 72 ms FAIL LCP

CLS e TBT passaram em 8/8. LCP passou em 2/8. Trocar o provedor não corrige automaticamente problemas de renderização e conteúdo.

SEO e AEO

  • Os quatro blogs retornaram 200 para navegador, Googlebot, Bingbot e OAI-SearchBot, sem noindex nas páginas amostradas.
  • O probe não mutante de /api/publish retornou 401 nos quatro blogs.
  • Felipe: canonical ausente na home; post e sitemap amostrados usam hostname correto.
  • Ariane, Sweet Angels e Rodrigo: canonical ausente nas páginas amostradas e sitemap aponta para example.com.
  • IndexNow está sem rota configurada nos quatro projetos amostrados: FAIL/unavailable. Isso contradiz a expectativa histórica de retrofit automático descrita na documentação do IndexNow e deve ser tratado como gap de operação, não como aprovação.

Como executar

node --test scripts/blog-baseline/baseline.node-test.mjs
node scripts/blog-baseline/collect.mjs --output .qa-evidence/blog-baseline/vercel/baseline.json
node scripts/blog-baseline/lighthouse-run.mjs --output-dir .qa-evidence/blog-baseline/vercel/lighthouse/raw
node scripts/blog-baseline/lighthouse-aggregate.mjs --input .qa-evidence/blog-baseline/vercel/lighthouse/raw --output .qa-evidence/blog-baseline/vercel/lighthouse/aggregate.json
node scripts/blog-baseline/lighthouse-run.mjs --request-targets .qa-evidence/blog-baseline/vps/request-targets.json --output-dir .qa-evidence/blog-baseline/vps/lighthouse/raw
node scripts/blog-baseline/lighthouse-aggregate.mjs --input .qa-evidence/blog-baseline/vps/lighthouse/raw --routing-evidence .qa-evidence/blog-baseline/vps/lighthouse/raw/routing-evidence.json --output .qa-evidence/blog-baseline/vps/lighthouse/aggregate.json
node scripts/blog-baseline/compare.mjs --manifest scripts/blog-baseline/manifest.json --baseline-http .qa-evidence/blog-baseline/vercel/baseline.json --candidate-http .qa-evidence/blog-baseline/vps/baseline.json --baseline-lighthouse .qa-evidence/blog-baseline/vercel/lighthouse/aggregate.json --candidate-lighthouse .qa-evidence/blog-baseline/vps/lighthouse/aggregate.json

Antes do par de coletas, definir o mesmo BASELINE_NETWORK_LABEL não sensível. No piloto pré-DNS, a URL pública deve permanecer intacta; o overlay temporário altera somente a resolução de rede.

Decisão para o piloto VPS

A DEV-1881 só pode avançar se a coleta Vercel × VPS ocorrer na mesma máquina e janela, e se paridade, qualidade absoluta, disponibilidade, concorrência e regressão de TTFB passarem juntas. Migrar antes de corrigir canonical, sitemap e IndexNow apenas transporta defeitos. Migrar esperando resolver LCP é uma aposta sem evidência: 6/8 páginas já falham no provedor atual.

Fontes e evidência

  • Fonte técnica: cadencia-app/docs/features/blog-hosting-baseline.md.
  • Resultado versionado: cadencia-app/docs/features/blog-hosting-baseline-results-2026-08-27.md.
  • Harness: cadencia-app/scripts/blog-baseline/.
  • Evidência bruta local: .qa-evidence/blog-baseline/ (ignorada pelo Git).
  • HTTP final: .qa-evidence/blog-baseline/vercel/baseline-contract-final.json — SHA-256 63A44B8243E21747AFFEF7815D5DB212BC840A78872084ABC56A35F2E0761258.
  • Lighthouse final: .qa-evidence/blog-baseline/vercel/lighthouse-contract-final.json — SHA-256 32097E1753FD5BA8FF391202E6D9D56E1C00F33FD4BC0A0CAC414C6FB9D6D0A2.
  • Relacionado: IndexNow nos blogs.
  • Metodologia: Core Web Vitals, Lighthouse, mudança de hosting no Google, crawlers da OpenAI e IndexNow.

Histórico

  • 2026-08-27 — DEV-1875: contrato final no SHA 97cc086e, routing ancorado na VPS Dev e baseline Vercel atualizada para 4/8 páginas com falha de performance.