Saltar para o conteúdo
megapromotingVamos falar

Expertise · Sites web

Este site é a nossa especificação técnica — incluindo as medições que não nos favorecem.

Construímos sites renderizados no servidor, com imagens em AVIF e WebP, cabeçalhos de segurança verificados externamente, mapa do site gerado a partir de dados e uma verificação de aceitação executada após cada publicação. Tudo pode ser inspecionado na página que você está a ler.

Já construídoNu putem cita un site de client fără acordul lui, dar nu avem nevoie: dovada e chiar pagina asta. Rulează Next.js 16.2.4 cu React 19.1.0, e servită prerandat din cache (`x-nextjs-prerender: 1`, `x-nextjs-cache: HIT`), poartă HSTS cu `preload`, `nosniff`, `SAMEORIGIN`, `Referrer-Policy` și o politică de conținut completă — verificate cu `curl -I` pe 06.09.2026. Harta de site conține 147 de adrese, toate generate din date, nu scrise de mână. A doua implementare, în același depozit: infrastructura formularului — jurnal append-only, sondă publică de sănătate, limitare de rată — și scriptul de acceptare rulat după publicare.

Um site institucional tem um único teste honesto: você consegue verificar do exterior o que a empresa diz sobre ele? Por isso esta página não enumera tecnologias, mas sim coisas que você pode controlar sozinho com um comando. O site corre Next.js 16.2.4 e React 19.1.0, e as páginas são prerenderizadas na construção e servidas a partir da cache — vê-se nos cabeçalhos da resposta: `x-nextjs-prerender: 1`, `x-nextjs-cache: HIT`, `s-maxage=31536000`, com uma janela de 300 segundos em que uma página antiga ainda pode ser servida enquanto é atualizada.

A renderização no servidor não é uma preferência de arquitetura. Um visitante com ligação fraca e um motor de busca recebem o mesmo HTML completo, sem esperar por JavaScript. A isto soma-se a disciplina de recursos: as imagens saem em AVIF e WebP, com cache de um ano; as fontes são alojadas por nós, não pedidas a um serviço externo; oito bibliotecas de interface têm as importações otimizadas para não carregar módulos inteiros por um único ícone.

Os cabeçalhos de segurança são enviados de dois locais e verificados na resposta real, não apenas na configuração: transporte seguro imposto durante dois anos com subdomínios e inclusão na lista de preloading, proibição de adivinhação do tipo de ficheiro, restrição de enquadramento em frames de terceiros, política de referência e uma política de permissões que fecha a câmara e deixa o microfone apenas para a própria origem — porque as demonstrações de voz precisam dele e, sem esta exceção, o navegador recusa-se em silêncio.

A última parte é a que nos diferencia, e é desagradável: publicamos também o que medimos mal no nosso site. O servidor ainda não oferece Brotli nem HTTP/2. O catálogo de traduções é transmitido em cada navegação e custa cerca de 70 KB comprimidos de cada vez. Um pacote de 443 KB contém quatro catálogos de idioma, dos quais só um é encaminhável. As fontes trazem também o subconjunto cirílico, embora as páginas verificadas não contenham qualquer caráter cirílico. Estes números são medidos, escritos no repositório e na lista de reparações. Um fornecedor que não tenha estes números sobre o seu próprio site ou não mediu, ou não quer dizer.

Qué incluye

El trabajo, por componentes

Renderização no servidor, servida a partir de cache

As páginas são prerenderizadas na construção e entregues como HTML completo, não construídas no navegador. Na resposta real aparecem `x-nextjs-prerender: 1` e `x-nextjs-cache: HIT`, com `cache-control: s-maxage=31536000` e uma janela de 300 segundos durante a qual a versão antiga ainda pode ser servida enquanto é atualizada. O efeito prático: um visitante com ligação fraca e um crawler recebem o mesmo conteúdo, no mesmo pedido.

Imagens e fontes com orçamento, não com sorte

Os formatos configurados são AVIF e WebP, com duração mínima de cache de 31.536.000 segundos — um ano — e cabeçalho `immutable` nos ficheiros estáticos, imagens e fontes. As fontes são alojadas por nós na construção, não pedidas a um serviço externo a cada visita, e são apresentadas com `swap`, para que o texto apareça antes de a fonte ser descarregada. Existe também um script de compressão em lote, com qualidade 80 para WebP e 75 para AVIF, para que a origem não dependa do que alguém exportou do editor gráfico.

Cabeçalhos de segurança enviados de dois locais e verificados na resposta

Da aplicação: transporte seguro imposto durante 63.072.000 segundos com subdomínios e inclusão na lista de preloading, `X-Content-Type-Options: nosniff`, `X-Frame-Options: SAMEORIGIN`, `Referrer-Policy: strict-origin-when-cross-origin` e uma política de permissões que fecha a câmara, deixa o microfone apenas para a própria origem e desativa a segmentação por interesses. Do servidor web, separadamente: uma política de segurança de conteúdo completa, com a lista explícita de origens permitidas. Na entrega escreve-se explicitamente que são dois locais — caso contrário, o próximo que alterar algo procura no lugar errado.

Mapa do site gerado a partir de dados, não escrito à mão

O mapa do site é construído a partir de cinco fontes — 13 endereços fixos, os artigos, 19 produtos, 12 serviços e 100 combinações serviço × domínio — e passa por uma deduplicação final. O resultado: 147 endereços, contados tanto no código como no ficheiro servido em produção. Uma página nova entra automaticamente; uma apagada desaparece. Ninguém mantém uma lista paralela que se desincroniza em três semanas.

Os endereços antigos não morrem: 43 redirecionamentos permanentes

Uma limpeza de estrutura deixa para trás endereços que alguém tem guardados ou publicou. Na configuração há 43 redirecionamentos permanentes — 9 guias para o blog, 20 artigos órfãos, 6 estudos de caso remapeados e 8 páginas individuais. Existem também 11 páginas que redirecionam dentro da aplicação; estão corretas funcionalmente, mas são mais caras do que uma regra de configuração, e são indicadas como tal na lista de reparações.

O formulário é infraestrutura, não decoração

O pedido é escrito num registo append-only antes de se tentar a entrega, com uma segunda linha para o resultado; existe uma sonda pública de saúde que indica se um lead pode chegar agora a uma pessoa; e os pedidos para interfaces são limitados a 10 por minuto, com a chave retirada do último salto do cabeçalho de endereços redirecionados, não do primeiro — o primeiro é enviado pelo cliente. Os motivos estão escritos no código, não em documentação separada.

Verificação de aceitação após cada publicação

Um script abre cada página de produto, em grupos de três, e falha se faltar o código 200, a âncora de perguntas, a âncora de exemplo ou o endereço canónico. Depois verifica o mapa do site — para conter cada produto e não conter variantes de idioma que não se possam abrir — e `robots.txt`, para não bloquear os recursos necessários à renderização. Cada verificação corresponde a algo que já se estragou uma vez.

Endereço canónico resolvido uma vez, para todo o site

O endereço canónico é declarado de forma relativa, num único lugar da configuração base, e é resolvido para cada rota em particular. A mesma solução para o endereço de partilha social, que antes declarava a página inicial na maioria das páginas. É uma linha de código que substitui uma convenção que cada nova página teria de se lembrar por si só — e que, inevitavelmente, não se lembra.

O que não funciona está escrito no repositório, junto ao código

O repositório contém um ficheiro de defeitos conhecidos que explica, por exemplo, por que as variantes de idioma no endereço não mudam o idioma, por que a solução óbvia piora as coisas — na renderização no servidor não existe nem armazenamento local, nem browser, por isso o detetor cai para inglês e todas as páginas saem em inglês — e quais são as duas soluções reais. Preferimos que um comprador técnico encontre a limitação escrita por nós, e não descoberta por ele.

Qué aspecto tiene

El recorrido, paso a paso.

01

O inventário dos endereços e o que acontece aos antigos

A primeira entrega é a lista dos endereços existentes e a decisão para cada um: mantém-se, redireciona-se ou desaparece. Neste site resultaram 43 redirecionamentos permanentes. É o trabalho que toda a gente salta e que produz, alguns meses depois, páginas de erro nos resultados da pesquisa.

02

A estrutura de conteúdo e as fontes a partir das quais é gerada

As páginas de produto e de serviço são construídas a partir de dados, não de ficheiros separados. Daí vêm o mapa do site gerado automaticamente, os endereços canónicos consistentes e a possibilidade de verificar programaticamente que cada página tem o que é necessário. Entregamos a estrutura de dados, não apenas as páginas renderizadas a partir dela.

03

A construção, com orçamentos definidos antes do conteúdo

Definimos desde o início que formato têm as imagens, o que é armazenado em cache e quanto, o que é renderizado no servidor e o que fica interativo no browser. O conteúdo encaixa depois neste orçamento. A ordem inversa produz sites que parecem bons no lançamento e ficam mais pesados com cada página adicionada.

04

A publicação com gate e verificação de aceitação

A publicação verifica a memória livre do servidor, executa o auditor de segurança das dependências, constrói a partir de uma versão limpa e confirma que o processo está em execução antes de reportar sucesso. Logo depois, o script de aceitação abre as páginas e verifica as âncoras, os endereços canónicos, o mapa do site e `robots.txt`. Ambos são entregues, não ficam connosco.

05

A entrega, com a lista de faltas e de medições

Entregamos o código, o procedimento de publicação, o procedimento de reversão, os endpoints de estado de saúde — e a lista escrita do que não está coberto, com números. Para este site, a lista inclui a falta de Brotli e de HTTP/2 no servidor, o custo do catálogo de traduções em cada navegação e o subconjunto de fontes não utilizado. Preferimos que a lista venha de nós.

Patru straturi verificabile din exterior1HTML prerandat servit din cache2imagini AVIF/WebP și fonturi găzduite local3antete de securitate din aplicație și din serverul web4harta de site și adresele canonice generate din date
Patru straturi verificabile din exterior

Os dados

Qué tocamos, dónde están y cuánto se quedan

Las preguntas que hace cualquiera que tenga un delegado de protección de datos — hechas aquí antes de que las haga él.

Os dados do formulário de contacto
Nome, endereço de e-mail, telefone, empresa, serviço escolhido, mensagem, página de origem e prefixo de rede do visitante. São escritos num registo no próprio servidor, com permissões `0700` no diretório e `0600` nos ficheiros, fora do diretório de versão. Prazo: 24 meses, aplicado pelo código a cada escrita, não por um agendador que pode ser esquecido.
O endereço IP, truncado antes de ser escrito
É guardado apenas o prefixo de rede — `/24` no IPv4, `/48` no IPv6 — e lê-se o último salto do cabeçalho, porque o primeiro é enviado pelo cliente e não prova nada. A mesma função é usada também pela limitação de taxa, por isso não existe um segundo lugar para onde o endereço completo possa ir por engano.
Estatísticas de tráfego
A medição passa pelo instrumento de análise configurado e é ativada após o consentimento. Os cookies reais foram verificados empiricamente no site em produção, antes e depois da aceitação, e a política de cookies foi reescrita depois dessa verificação — não o contrário. A política anterior enumerava cookies que não existiam.
Registo de tratamentos, versionado junto ao código
Cada tipo de dados abrangido pelo site tem uma entrada com finalidade, base, categorias e prazo, num documento mantido no mesmo repositório. Quando o código altera um prazo, o documento altera-se no mesmo commit. O que não está definido — por exemplo, a retenção real na conta de análise — é marcado explicitamente como elemento a clarificar, não declarado como facto.
O que não sai do servidor
Os tokens de notificação, as chaves do fornecedor e os identificadores de canal. A sonda de saúde devolve exclusivamente valores lógicos, precisamente para poder ser consultada por um serviço externo sem divulgar nada sobre a configuração.

Un caso

O que mostra a auditoria do próprio site quando o publica por inteiro

A situação

Depois de uma reestruturação, o site próprio parecia estar bem: todas as páginas respondiam 200, o painel estava verde. Fizemos a pergunta que fazemos aos clientes: o que diz uma medição feita do exterior, em todos os endereços ao mesmo tempo, e não na página inicial?

Qué construimos

Percorremos com pedidos diretos cada endereço conhecido — 249 endereços, 23 colunas por endereço, sem seguimento de redirecionamentos, com no máximo seis pedidos em paralelo — e colocámos o resultado num ficheiro tabular versionado. Por cima disso, executámos verificações separadas: a compressão real do HTML, o que é transmitido em cada navegação, o que contêm os pacotes de JavaScript, que fontes são descarregadas, que cabeçalhos de cache e de transporte o servidor oferece. Cada número foi verificado na resposta real, não deduzido da configuração.

Qué salió

244 endereços respondem 200 e 5 redirecionam. 131 páginas não tinham endereço canónico, e 219 de 244 declaravam a página inicial como endereço de partilha — ambos reparados agora com uma linha no arranjo de base, que se aplica a cada rota. O servidor não oferece Brotli nem HTTP/2. O catálogo de traduções, 2.268 chaves, é transmitido em cada navegação e custa aproximadamente 70 KB comprimidos de cada vez. Um pacote de 443 KB contém quatro catálogos de língua, dos quais apenas um é roteável. As fontes trazem também o subconjunto cirílico, embora as páginas verificadas não contenham nenhum caractere cirílico. Todos os números, com os comandos que os reproduzem, estão escritos no repositório.

Qué no dice el caso

São medições de laboratório, feitas do exterior, com pedidos diretos. Não são dados de terreno de visitantes reais e não os apresentamos como tal: as métricas de carregamento percecionado não puderam ser lidas no instrumento utilizado e estão marcadas explicitamente como não medidas. Não executámos a construção da aplicação durante a auditoria, porque várias pessoas estavam a trabalhar no mesmo checkout.

Perguntas

Lo que nos pregunta la gente antes de llamar

Com o que constroem, concretamente?

Next.js 16.2.4 com React 19.1.0 e TypeScript, com Tailwind para estilos e componentes de interface acessíveis com base em primitivas Radix. As páginas são pré-renderizadas na construção e servidas a partir da cache — verifica-se do exterior: os cabeçalhos da resposta contêm `x-nextjs-prerender: 1` e `x-nextjs-cache: HIT`. Não é uma lista de tecnologias que tenhamos lido; é a stack em que corre a página que está a ler agora.

Como verifico sozinho o que dizem sobre segurança?

Com um único comando: `curl -I https://www.megapromoting.com/servicii`. Verá `strict-transport-security: max-age=63072000; includeSubDomains; preload`, `x-content-type-options: nosniff`, `x-frame-options: SAMEORIGIN`, `referrer-policy: strict-origin-when-cross-origin`, uma política de permissões que fecha a câmara e deixa o microfone apenas para a própria origem, além de uma política de segurança de conteúdo com a lista explícita de origens. Os primeiros cinco vêm da configuração da aplicação; o último é enviado pelo servidor web — dois locais diferentes, e escrevemos isso na entrega.

Como sabem que não estragaram nada na última publicação?

De um script de aceitação executado após a publicação. Abre cada página de produto e falha se faltar o código 200, a âncora de perguntas, a âncora de exemplo ou o endereço canónico; verifica depois que o mapa do site contém cada produto e não contém variantes de língua que não se abrem, e que `robots.txt` não bloqueia os recursos de renderização. Cada verificação da lista corresponde a algo que já se estragou antes. O script é entregue com o projeto — também o pode executar.

O vosso site é rápido?

Depende do que você mede, e temos números em ambos os sentidos. Bons: as páginas são pré-renderizadas e servidas a partir da cache, as imagens saem em AVIF e WebP com cache de um ano, as fontes são alojadas localmente. Maus, medidos no próprio site: o servidor não oferece Brotli nem HTTP/2 — um pedido com `Accept-Encoding: br` recebe resposta não comprimida; o catálogo de traduções é transmitido em cada navegação e custa cerca de 70 KB comprimidos sempre; um pacote de 443 KB contém quatro catálogos de idioma, dos quais só um é roteável. Não lhe dou uma pontuação de laboratório; dou-lhe os octetos medidos e a lista de correções que deles resulta.

Quem mantém o mapa do site?

Ninguém, e essa é a resposta correta. É gerado a partir de cinco fontes de dados — endereços fixos, artigos, produtos, serviços e as combinações serviço × domínio — e passa por uma desduplicação final. Saem 147 endereços, o mesmo número no código e no ficheiro servido em produção. Uma nova página entra automaticamente. O que hoje falta, para ser dito: as entradas não têm data da última modificação, e 93 endereços que podem ser indexados ainda não estão no mapa. Estão na lista de correções, não escondidos.

Vocês fazem sites multilingues?

Aqui tenho de ser preciso, porque é a limitação mais clara deste site. A troca de idioma na URL não funciona: a configuração fixa o romeno, por isso o detector nunca lê o parâmetro. Escrevi no repositório porque a solução óbvia é pior — na renderização no servidor não existe nem armazenamento local nem browser, por isso o detector cai no inglês e todas as páginas saem em inglês — e quais são as duas soluções reais: rotas por caminho, com segmento de idioma, ou a resolução do idioma no servidor em cada página. A primeira é recomendada. Para um projeto novo, começamos logo com rotas por caminho; para um existente, é um trabalho, não uma configuração.

O que acontece com os endereços antigos quando refazem um site?

São inventariados e recebem cada um uma decisão: fica, é redirecionado permanentemente ou desaparece. Na limpeza deste site resultaram 43 redirecionamentos na configuração. Existem ainda 11 páginas que redirecionam dentro da aplicação — funcionam, mas constroem a página antes de enviar a resposta de redirecionamento, o que é desperdício; estão na lista de mover para a configuração. Digo-lhe isto para que saiba que tipo de lista recebe na entrega.

Como sei que o formulário realmente entrega?

Pergunta a ele: `GET /api/health/contact` responde 200 se um lead puder chegar a uma pessoa agora e 503 se não, verificando separadamente que o token do canal de notificações é válido e que o registo de pedidos pode ser escrito. A resposta contém apenas valores lógicos, nunca o token. Existe porque foi exatamente aqui que o processo se quebrou uma vez: token revogado, rota devolvendo 500, pedidos perdidos sem rasto. Agora o pedido é registado no diário antes de se tentar a entrega.

O que não fazem?

Não prometemos posições na pesquisa, taxas de conversão ou pontuações de desempenho que não tenhamos medido no seu projeto. Não entregamos um site sem lista de endereços antigos e sem procedimento de retorno. Não assumimos plataformas de terceiros a que não temos acesso. E não apresentamos como pronto algo que tem uma limitação conhecida — se tenho uma limitação, você encontra-a escrita no repositório antes de a encontrar em produção.

Em que se baseiam as afirmações acima (15 fontes)
  1. Producția servește pagini prerandate din cache: `x-nextjs-prerender: 1`, `x-nextjs-cache: HIT`, `cache-control: s-maxage=31536000`, `x-nextjs-stale-time: 300`https://www.megapromoting.com/servicii · 2026-09-06
  2. Antete de securitate în răspunsul real: HSTS `max-age=63072000; includeSubDomains; preload`, `nosniff`, `SAMEORIGIN`, `strict-origin-when-cross-origin`, politică de permisiuni cu `microphone=(self)`; plus o politică de securitate a conținutului completă servită de nginx și ABSENTĂ din `next.config.ts`https://www.megapromoting.com/servicii · 2026-09-06

13 delas são código e ficheiros dos nossos repositórios. Não publicamos o nome nem a linha: juntos, numa única página, descreveriam com demasiada precisão como estão construídos sistemas que não são só nossos. Percorremo-los consigo, no repositório, a pedido — a verificação continua possível, só que se faz numa conversa.

O que gostaria que funcionasse melhor?

Conte-nos o seu processo. Em conjunto decidimos o que vale a pena construir, o que podemos ligar e como verificamos o resultado.

Vamos falar