Baseline de hosting dos blogs¶
DEV-1875. Contrato final no produto SHA
97cc086e; baseline Vercel coletada no harness SHA515e3522. 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:
- Desempenho absoluto: a página atende aos limites definidos?
- Paridade: a VPS preserva URL, HTML essencial, canonical, sitemap, robots e dados estruturados do Vercel?
- 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_at–completed_atdentro de 120 minutos; - Lighthouse próximo da respectiva coleta HTTP e com exatamente cinco
fetched_atvá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
noindexnas páginas amostradas. - O probe não mutante de
/api/publishretornou 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-25663A44B8243E21747AFFEF7815D5DB212BC840A78872084ABC56A35F2E0761258. - Lighthouse final:
.qa-evidence/blog-baseline/vercel/lighthouse-contract-final.json— SHA-25632097E1753FD5BA8FF391202E6D9D56E1C00F33FD4BC0A0CAC414C6FB9D6D0A2. - 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.