Otimizar Imagens para Site: Formatos, Compressão, Lazy Loading e CDN
Imagens representam em média 50% do peso de uma página web. Otimizá-las corretamente pode reduzir o tempo de carregamento pela metade, melhorar Core Web Vitals e aumentar conversões. Aqui está tudo que você precisa saber.
Por que otimizar imagens é tão importante?
Uma página média brasileira pesa cerca de 2,5MB, e imagens respondem por 1,2-1,5MB desse total. Sites de e-commerce são piores: páginas de produto com múltiplas fotos podem chegar a 5-8MB facilmente.
O impacto vai além da velocidade:
- LCP (Largest Contentful Paint) — em 70% dos sites, o elemento LCP é uma imagem. Se ela está pesada, seu LCP será ruim
- CLS (Cumulative Layout Shift) — imagens sem dimensões definidas causam layout shifts quando carregam
- Custo de banda — para sites com alto tráfego, imagens não otimizadas significam custos de CDN/hospedagem desnecessariamente altos
- Experiência mobile — em conexões 4G/3G brasileiras, cada MB extra pode significar segundos adicionais de espera
Formatos de imagem: qual usar quando
JPEG (JPG)
O formato clássico para fotografias. Boa compressão com perdas (lossy), amplamente suportado. Ideal para fotos de produtos, banners e imagens com muitas cores e gradientes.
Quando usar: quando você precisa de compatibilidade máxima com navegadores antigos ou como fallback.
Quando evitar: para imagens com transparência (não suporta), logos com fundo transparente, ícones simples.
PNG
Formato sem perdas (lossless) que suporta transparência. Excelente para logos, ícones, screenshots e imagens com texto. O problema: arquivos são significativamente maiores que JPEG para fotos.
Quando usar: logos, ícones, capturas de tela, imagens com texto legível, qualquer coisa que precise de transparência e você não pode usar WebP.
Quando evitar: fotos e imagens com muitas cores — um PNG de 2MB poderia ser um JPEG de 200KB.
WebP
O formato moderno do Google que combina o melhor dos dois mundos: compressão lossy melhor que JPEG (25-35% menor com mesma qualidade) E suporte a transparência como PNG. O suporte é universal em navegadores modernos (97%+ global).
Quando usar: como formato padrão para praticamente tudo. Fotos, banners, thumbnails, ícones.
Comparação prática:
- Foto de produto: JPEG 450KB → WebP 290KB (35% menor)
- Banner hero: JPEG 850KB → WebP 540KB (36% menor)
- Ícone com transparência: PNG 45KB → WebP 18KB (60% menor)
AVIF
O formato mais moderno, baseado no codec AV1. Oferece compressão até 50% melhor que JPEG e 20% melhor que WebP. O suporte ainda está crescendo: Chrome, Firefox e Opera suportam; Safari adicionou suporte recentemente.
Quando usar: como primeira opção com fallback para WebP. Ideal para sites com muito tráfego onde cada KB economizado importa.
Limitação: a codificação é mais lenta que WebP, então não é ideal para imagens geradas em tempo real. Pré-processe offline.
SVG
Formato vetorial (não é bitmap). Escala para qualquer tamanho sem perda de qualidade e geralmente é menor que PNG para gráficos simples.
Quando usar: logos, ícones, ilustrações simples, gráficos com poucos elementos. Ideal para elementos que precisam ser nítidos em qualquer resolução (incluindo telas Retina).
Quando evitar: fotos e imagens complexas. Um SVG de uma foto seria enorme e não faz sentido.
Implementando fallbacks com <picture>
Use o elemento <picture> para servir o formato ideal com fallback automático:
<picture>
<source srcset="produto.avif" type="image/avif">
<source srcset="produto.webp" type="image/webp">
<img src="produto.jpg" alt="Descrição do produto"
width="800" height="600" loading="lazy">
</picture>
O navegador escolhe o primeiro formato que suporta. Se suporta AVIF, usa AVIF. Se não, tenta WebP. Se nenhum, usa o JPEG do <img>.
Compressão: ferramentas e técnicas
Ferramentas online (gratuitas)
- Squoosh (
squoosh.app) — ferramenta do Google. A melhor interface para comparar formatos e níveis de compressão lado a lado. Suporta WebP, AVIF, JPEG, PNG - TinyPNG/TinyJPG (
tinypng.com) — compressão automática inteligente. Até 20 imagens grátis por vez. Excelente para batch processing rápido - Compressor.io — suporta JPEG, PNG, SVG e GIF com preview de qualidade
Ferramentas CLI (para automação)
# ImageMagick - converter para WebP
convert input.jpg -quality 82 output.webp
# cwebp (Google) - ferramenta dedicada WebP
cwebp -q 80 input.jpg -o output.webp
# avifenc - converter para AVIF
avifenc --min 20 --max 35 input.jpg output.avif
# Sharp (Node.js) - popular em pipelines de build
sharp input.jpg --webp --quality 80 -o output.webp
Nível de compressão ideal
Não existe um número mágico, mas na prática:
- JPEG: qualidade 80-85% é o sweet spot (redução de 60-70% com diferença visual imperceptível)
- WebP: qualidade 75-82% (a compressão é mais eficiente, então um número menor já é bom)
- AVIF: qualidade 60-70% (compressão muito mais eficiente — qualidade 65 em AVIF é comparável a qualidade 85 em JPEG)
Dica prática: use o Squoosh para ajustar a qualidade visualmente. Diminua até notar artefatos, depois suba 5-10 pontos. Esse é o seu nível ideal.
Lazy Loading: carregue apenas o necessário
Lazy loading adia o carregamento de imagens que não estão visíveis na tela. Quando o usuário rola para baixo, as imagens são carregadas sob demanda.
Implementação nativa (recomendada)
<img src="produto.webp" alt="Produto X"
width="400" height="300"
loading="lazy"
decoding="async">
O atributo loading="lazy" é suportado por 95%+ dos navegadores e não requer JavaScript. Adicione decoding="async" para melhorar o INP ao permitir que o navegador decodifique a imagem fora da thread principal.
Quando NÃO usar lazy loading
- Imagem hero/banner — é o elemento LCP na maioria dos sites. Lazy loading atrasaria sua exibição
- Logo no header — sempre visível, deve carregar imediatamente
- Imagens above the fold — qualquer imagem visível sem scroll deve carregar normalmente
Para imagens LCP, faça o oposto do lazy loading — priorize o carregamento:
<!-- Preload da imagem LCP -->
<link rel="preload" as="image" href="/hero.webp"
fetchpriority="high">
<!-- Na tag img, use fetchpriority -->
<img src="/hero.webp" alt="Banner principal"
width="1200" height="600"
fetchpriority="high">
Placeholder techniques
Lazy loading sem placeholder causa layout shift (CLS ruim). Soluções:
- Dimensões explícitas — sempre defina
widtheheightpara reservar o espaço - Blur-up placeholder — mostre uma versão ultra-comprimida (1-2KB) e blur enquanto a versão real carrega
- Cor dominante — preencha o espaço com a cor predominante da imagem enquanto ela carrega
- Aspect ratio CSS — use
aspect-ratio: 4/3no CSS para reservar espaço sem saber dimensões exatas
Responsive Images: tamanho certo para cada tela
Servir uma imagem de 2000px de largura para um celular com tela de 375px é desperdício puro. Responsive images resolvem isso servindo tamanhos diferentes baseados na tela do dispositivo.
srcset e sizes
<img src="produto-800.webp"
srcset="produto-400.webp 400w,
produto-800.webp 800w,
produto-1200.webp 1200w,
produto-1600.webp 1600w"
sizes="(max-width: 768px) 100vw,
(max-width: 1200px) 50vw,
33vw"
alt="Produto X"
width="800" height="600"
loading="lazy">
Como funciona:
srcsetlista as versões disponíveis com suas larguras reais (em pixels)sizesdiz ao navegador qual largura a imagem ocupa na tela em diferentes viewports- O navegador combina as duas informações para escolher a versão ideal
Quantas versões gerar: para a maioria dos sites, 3-4 tamanhos são suficientes (400, 800, 1200, 1600). Sites com imagens full-width podem precisar de 2000px também.
Automação com ferramentas de build
Gerar múltiplas versões manualmente não escala. Use automação:
- Sharp (Node.js) — a biblioteca mais popular para processamento de imagens em JavaScript
- Cloudinary/imgix — CDNs de imagem que geram versões sob demanda via URL. Excelente para e-commerce com milhares de produtos
- WordPress: gera tamanhos automaticamente ao upload (thumbnail, medium, large). Plugins como Imagify ou ShortPixel otimizam automaticamente
CDN para imagens
Uma CDN de imagens vai além de uma CDN tradicional. Além de distribuir geograficamente, pode:
- Converter formatos automaticamente (servir WebP para Chrome, JPEG para navegadores antigos)
- Redimensionar sob demanda via parâmetros de URL
- Comprimir automaticamente
- Aplicar lazy loading via tag de script
Serviços populares:
- Cloudflare Polish + Image Resizing — para quem já usa Cloudflare. Polish otimiza automaticamente (plano Pro, $20/mês). Image Resizing permite redimensionar via URL
- Cloudinary — plano gratuito com 25.000 transformações/mês. Excelente para e-commerce. URL-based:
cloudinary.com/.../w_400,f_auto/produto.jpg - Bunny Optimizer — parte do Bunny CDN. $9.50/mês com otimização automática de imagens
- imgix — CDN de imagens enterprise. Poderoso mas mais caro
Otimização de imagens em WordPress
WordPress é o CMS mais usado no Brasil. Plugins específicos facilitam a otimização:
- ShortPixel — comprime automaticamente ao upload, converte para WebP, serve com fallback. 100 imagens/mês grátis
- Imagify — do mesmo criador do WP Rocket. Três níveis de compressão (Normal, Aggressive, Ultra). 20MB/mês grátis
- EWWW Image Optimizer — pode processar localmente (sem enviar para servidor externo). Bom para sites que não podem enviar imagens para terceiros
- Smush — popular mas com limitações na versão gratuita (sem WebP, sem compressão avançada)
Recomendação prática: ShortPixel ou Imagify + Cloudflare. O plugin otimiza no upload, o Cloudflare distribui via CDN.
Auditando imagens do seu site
Como saber se suas imagens estão otimizadas? Faça esta auditoria:
- PageSpeed Insights — abra sua página e procure por "Serve images in next-gen formats", "Properly size images" e "Efficiently encode images"
- Chrome DevTools > Network — filtre por "Img" e ordene por tamanho. Qualquer imagem acima de 200KB merece atenção
- Lighthouse — gere um relatório e veja a seção "Opportunities" para estimativas de economia
- Screaming Frog — audite todo o site para encontrar imagens sem alt text, dimensões ausentes e tamanhos excessivos
Impacto real: antes e depois
Um e-commerce brasileiro de moda fez as seguintes otimizações em suas imagens de produto:
- Converteu 2.400 imagens de JPEG para WebP (economia média de 35%)
- Implementou lazy loading em tudo abaixo do fold
- Adicionou responsive images com 4 tamanhos
- Ativou Cloudflare Polish para otimização automática
Resultados:
- Peso médio da página de produto: de 3,8MB para 1,2MB (-68%)
- LCP mobile: de 4,2s para 1,8s
- Taxa de rejeição mobile: de 62% para 41%
- Conversão mobile: aumento de 23%
Essas melhorias também se refletem nos dados comportamentais. No Microsoft Clarity, o site viu redução de 40% em rage clicks e aumento de 25% na profundidade de scroll — sinais claros de que os usuários estavam tendo uma experiência melhor.
Quer relatórios automáticos do Clarity?
ClarityInsights analisa seus dados e envia um relatório AI com recomendações UX.
Obtenha seu relatório grátis