Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Otimizar imagens no WordPress sem plugin: do upload ao WebP

16 min de leitura  ·  Guia técnico

Otimizar imagens no WordPress sem plugin significa comprimir e converter arquivos diretamente no servidor Linux, usando ferramentas nativas como cwebp, ImageMagick e mozjpeg, sem depender de extensões que consomem memória PHP. Para executar o processo completo, do upload ao WebP, siga estes passos:

  1. Instale as ferramentas de conversão no servidor (webp, imagemagick).
  2. Comprima os JPEGs e PNGs existentes com cwebp ou convert em lote via bash.
  3. Configure o Apache (.htaccess) ou Nginx para servir WebP automaticamente quando o navegador suportar.
  4. Valide a entrega com curl e DevTools do navegador.
  5. Automatize conversões futuras com um script acionado por cron.

Pré-requisitos para otimizar imagens no WordPress sem plugin

  • Acesso SSH ao servidor com permissão de root ou sudo.
  • Sistema operacional: Debian 12, Ubuntu 24.04 LTS, Rocky Linux 9 ou AlmaLinux 9.
  • WordPress instalado e funcional, com uploads em /var/www/html/wp-content/uploads/ (ajuste conforme seu path).
  • Servidor web: Apache 2.4+ com mod_rewrite habilitado, ou Nginx 1.26+.
  • PHP 8.2 ou 8.3 — não é necessário alterar configurações PHP para este guia.
  • Pacotes webp e imagemagick disponíveis via apt (Debian/Ubuntu) ou dnf (Rocky/AlmaLinux).
  • Permissão de escrita no diretório de uploads do WordPress.

Instalando as ferramentas de compressão de imagem no servidor

Antes de otimizar imagens no WordPress sem plugin, você precisa das ferramentas certas instaladas no sistema operacional. No Debian 12 e Ubuntu 24.04, o pacote webp fornece o binário cwebp, enquanto imagemagick oferece o comando convert para operações mais avançadas.

Em sistemas baseados em Debian/Ubuntu, execute:

sudo apt update
sudo apt install -y webp imagemagick jpegoptim optipng

Em Rocky Linux 9 ou AlmaLinux 9, use:

sudo dnf install -y libwebp-tools ImageMagick jpegoptim optipng

Verifique as versões instaladas:

cwebp -version
convert --version
jpegoptim --version
Output esperado (exemplo no Debian 12):
cwebp 1.2.4
Version: ImageMagick 6.9.11-60 Q16 x86_64
jpegoptim v1.5.3

Com as ferramentas instaladas, você já pode comprimir imagens existentes e converter para WebP diretamente no diretório de uploads do WordPress.

Comprimindo imagens JPEG e PNG existentes em lote

A compressão de imagens sem perda perceptível de qualidade é o primeiro passo para reduzir o peso das páginas WordPress. O jpegoptim aplica compressão lossy em JPEGs, e o optipng aplica compressão lossless em PNGs — ambos sem alterar as extensões dos arquivos, o que mantém compatibilidade total com o banco de dados do WordPress.

Defina o diretório de uploads:

UPLOADS="/var/www/html/wp-content/uploads"

Comprima todos os JPEGs com qualidade máxima de 82% (lossy, ideal para fotografias):

find "$UPLOADS" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) \
  -exec jpegoptim --max=82 --strip-all {} \;
Output esperado:
/var/www/html/wp-content/uploads/2024/03/foto-produto.jpg 2400x1600 24bit N [OK] 1.2M --> 387K (67%)

Comprima todos os PNGs com optipng (lossless — sem perda de qualidade, ideal para logotipos e ícones):

find "$UPLOADS" -type f -iname "*.png" \
  -exec optipng -o5 -strip all {} \;
Output esperado:
** Processing: /var/www/html/wp-content/uploads/2024/01/logo.png
Input file size = 45678 bytes
Output file size = 28912 bytes (36% decrease)

O parâmetro --strip-all no jpegoptim remove metadados EXIF desnecessários (GPS, câmera, software), que podem representar até 15% do tamanho do arquivo. Para imagens onde os metadados são importantes (fotografia profissional), omita esse parâmetro.

Convertendo imagens para WebP com cwebp em lote

A conversão para WebP é a etapa que gera maior redução de tamanho — tipicamente 25% a 35% menor que JPEG equivalente com qualidade visual similar. O comando cwebp processa um arquivo por vez, mas um loop bash resolve a conversão em massa de todo o diretório de uploads.

Script de conversão em lote para JPEG e PNG:

#!/bin/bash
UPLOADS="/var/www/html/wp-content/uploads"
QUALITY=80

find "$UPLOADS" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read -r FILE; do
  WEBP="${FILE%.*}.webp"
  if [ ! -f "$WEBP" ]; then
    cwebp -q "$QUALITY" "$FILE" -o "$WEBP"
    echo "Convertido: $FILE -> $WEBP"
  else
    echo "Já existe: $WEBP (pulando)"
  fi
done

Salve o script como /usr/local/bin/convert-to-webp.sh e torne-o executável:

sudo chmod +x /usr/local/bin/convert-to-webp.sh
sudo /usr/local/bin/convert-to-webp.sh
Output esperado:
Convertido: /var/www/html/wp-content/uploads/2024/03/foto-produto.jpg -> /var/www/html/wp-content/uploads/2024/03/foto-produto.webp
Já existe: /var/www/html/wp-content/uploads/2024/01/logo.webp (pulando)

O parâmetro -q 80 define qualidade 80 (escala de 0 a 100). Para fotografias de produto, valores entre 75 e 85 oferecem o melhor equilíbrio entre tamanho e fidelidade visual. Para imagens com texto ou gráficos, use -lossless no lugar de -q.

Para converter usando ImageMagick (alternativa útil quando cwebp não está disponível):

find "$UPLOADS" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) | while read -r FILE; do
  WEBP="${FILE%.*}.webp"
  convert "$FILE" -quality 80 "$WEBP"
done

Configurando o Apache para servir WebP automaticamente via .htaccess

Ter os arquivos WebP no disco não é suficiente — o servidor web precisa detectar o suporte do navegador via cabeçalho HTTP Accept e redirecionar a requisição para o arquivo .webp correspondente. Esta configuração no .htaccess faz isso de forma transparente, sem alterar as URLs no banco de dados do WordPress.

Atenção: editar o .htaccess incorretamente pode derrubar o site. Faça backup antes de qualquer alteração:

cp /var/www/html/.htaccess /var/www/html/.htaccess.bak

Adicione o bloco abaixo antes do bloco # BEGIN WordPress no .htaccess:

<IfModule mod_rewrite.c>
  RewriteEngine On

  # Serve WebP se o navegador suportar e o arquivo existir
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{REQUEST_FILENAME} \.(jpe?g|png)$
  RewriteCond %{REQUEST_FILENAME}\.webp -f
  RewriteRule ^(.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1,L]

  <IfModule mod_headers.c>
    Header append Vary Accept env=REDIRECT_accept
  </IfModule>
</IfModule>

<IfModule mod_mime.c>
  AddType image/webp .webp
</IfModule>

Recarregue o Apache para aplicar:

sudo systemctl reload apache2   # Debian/Ubuntu
# ou
sudo systemctl reload httpd     # Rocky Linux / AlmaLinux

O cabeçalho Vary: Accept é essencial para que CDNs e proxies (como Cloudflare) armazenem versões separadas para navegadores com e sem suporte a WebP, evitando que usuários recebam o formato errado.

Configurando o Nginx para entrega de WebP sem plugin

Se o seu servidor usa Nginx 1.26, a lógica de detecção e entrega de WebP é implementada no bloco de configuração do site, geralmente em /etc/nginx/sites-available/seudominio.conf. A abordagem usa map para verificar o suporte do navegador e try_files para servir o arquivo WebP quando disponível.

Adicione o bloco map fora do bloco server (no contexto http):

map $http_accept $webp_suffix {
  default   "";
  "~*image/webp" ".webp";
}

Dentro do bloco server, adicione a diretiva para imagens:

location ~* \.(jpe?g|png)$ {
  add_header Vary Accept;
  try_files $uri$webp_suffix $uri =404;
  expires 30d;
  add_header Cache-Control "public, immutable";
}

Teste a configuração e recarregue:

sudo nginx -t
sudo systemctl reload nginx
Output esperado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A diretiva expires 30d adiciona cache de 30 dias para imagens, reduzindo requisições repetidas. Combine com o cabeçalho Cache-Control: public, immutable para máxima eficiência em CDNs.

Automatizando conversões futuras com cron

Novos uploads no WordPress precisam ser convertidos automaticamente. Um job cron que roda diariamente garante que imagens recém-enviadas também existam em formato WebP no disco, sem intervenção manual.

Abra o crontab do usuário www-data (ou o usuário que executa o PHP):

sudo crontab -u www-data -e

Adicione a linha para execução diária às 2h da manhã:

0 2 * * * /usr/local/bin/convert-to-webp.sh >> /var/log/webp-convert.log 2>&1

O redirecionamento para /var/log/webp-convert.log permite auditar conversões e identificar erros. Verifique o log após o primeiro ciclo:

tail -50 /var/log/webp-convert.log

Para sites com alto volume de uploads (e-commerce, portfólios), considere usar inotifywait para conversão em tempo real ao invés de cron, acionando a conversão imediatamente após cada upload. Isso exige o pacote inotify-tools instalado no servidor.

Se você usa cPanel para gerenciar o servidor, pode acessar o agendador de tarefas diretamente pelo painel. Para dúvidas sobre acesso ao painel, consulte como acessar o painel de gerenciamento dos meus serviços.

Verificando se o servidor está entregando WebP corretamente

Após configurar o Apache ou Nginx, valide a entrega de WebP antes de considerar o processo concluído. A verificação via curl simula um navegador compatível com WebP e inspeciona os cabeçalhos de resposta.

Execute o teste com uma imagem real do seu site:

curl -I -H "Accept: image/webp,image/*,*/*;q=0.8" \
  https://seudominio.com.br/wp-content/uploads/2024/03/foto-produto.jpg
Output esperado (entrega WebP funcionando):
HTTP/2 200
content-type: image/webp
vary: Accept
cache-control: public, immutable
expires: Thu, 01 May 2025 02:00:00 GMT

Se content-type retornar image/jpeg mesmo com o cabeçalho Accept: image/webp, verifique:

  • Se o arquivo .webp existe no disco no mesmo diretório da imagem original.
  • Se o mod_rewrite está habilitado no Apache (sudo a2enmod rewrite).
  • Se o .htaccess está sendo lido (diretiva AllowOverride All no VirtualHost).

No navegador, abra o DevTools (F12), vá à aba Network, filtre por Img e recarregue a página. A coluna Type deve exibir webp para as imagens convertidas.

Problemas comuns e como resolver

Sintoma: Apache serve JPEG mesmo com arquivo WebP existente

Causa: O módulo mod_rewrite não está habilitado, ou a diretiva AllowOverride no VirtualHost está definida como None, impedindo que o .htaccess seja processado.
Solução: Habilite o módulo e ajuste o VirtualHost:

sudo a2enmod rewrite headers mime
sudo systemctl reload apache2

No arquivo de configuração do VirtualHost, certifique-se de que existe AllowOverride All dentro do bloco <Directory> correspondente ao diretório raiz do WordPress.

Sintoma: Erro "cwebp: command not found" ao rodar o script

Causa: O pacote webp não foi instalado, ou o binário não está no PATH do usuário que executa o cron.
Solução: Reinstale o pacote e use o caminho absoluto no script:

sudo apt install -y webp
which cwebp
Output esperado: /usr/bin/cwebp

No script bash, substitua cwebp por /usr/bin/cwebp para garantir que o cron encontre o binário independentemente do PATH configurado.

Sintoma: Imagens WebP aparecem corrompidas ou em branco no navegador

Causa: O arquivo WebP foi gerado com qualidade 0 por erro no script, ou o ImageMagick não tem suporte a WebP compilado na versão instalada.
Solução: Verifique o suporte WebP no ImageMagick:

convert -list format | grep -i webp
Output esperado:
WEBP* rw-   WebP Image Format (libwebp 1.2.4)

Se o output estiver vazio, o ImageMagick foi compilado sem suporte a WebP. Nesse caso, use exclusivamente o cwebp do pacote webp. Também verifique o tamanho dos arquivos gerados — arquivos com 0 bytes indicam erro de permissão no diretório de destino.

Sintoma: CDN (Cloudflare) serve JPEG para usuários mesmo após configuração

Causa: O CDN está servindo uma versão em cache da imagem capturada antes da configuração WebP, sem o cabeçalho Vary: Accept.
Solução: Limpe o cache do CDN após configurar o servidor. No Cloudflare, acesse Caching > Configuration > Purge Everything. Confirme que o cabeçalho Vary: Accept está presente na resposta do servidor de origem antes de purgar o cache — sem ele, o CDN não diferenciará requisições com e sem suporte a WebP.

Perguntas frequentes sobre otimizar imagens no WordPress sem plugin

É possível otimizar imagens no WordPress sem instalar plugin?

Sim. É possível comprimir e converter imagens para WebP diretamente no servidor usando ferramentas como cwebp, ImageMagick ou mozjpeg via linha de comando. Após a conversão, o WordPress pode ser configurado para servir os arquivos WebP via regras no .htaccess ou no Nginx, sem necessidade de plugin. Essa abordagem elimina overhead de PHP e reduz o consumo de memória em cada requisição.

Como converter imagens existentes para WebP no servidor Linux?

Instale o pacote webp no servidor (disponível via apt no Debian/Ubuntu ou dnf no Rocky Linux) e execute o comando cwebp para converter arquivos JPEG e PNG individualmente ou em lote com um loop bash. O comando básico é: cwebp -q 80 imagem.jpg -o imagem.webp. Para conversão em lote, use find combinado com um loop while read no bash, conforme demonstrado nas seções anteriores deste guia.

O WordPress serve automaticamente imagens WebP para todos os navegadores?

Não automaticamente. É necessário configurar o servidor web (Apache ou Nginx) para detectar o suporte do navegador via cabeçalho Accept e redirecionar a requisição para o arquivo .webp correspondente quando ele existir. Sem essa configuração, o WordPress continuará servindo o formato original mesmo que o arquivo WebP exista no disco. Navegadores que não suportam WebP (como IE 11) continuarão recebendo JPEG ou PNG normalmente.

Qual a diferença entre compressão lossy e lossless para imagens no WordPress?

Compressão lossy descarta dados de imagem para reduzir o tamanho do arquivo, resultando em leve perda de qualidade visual — ideal para fotografias onde a diferença é imperceptível. Compressão lossless reduz o tamanho sem perda de qualidade, sendo indicada para logotipos, ícones e imagens com texto. Para WordPress, fotografias de conteúdo geralmente se beneficiam de lossy com qualidade entre 75 e 85, enquanto elementos de interface devem usar lossless para preservar nitidez.

Como verificar se o servidor está entregando WebP corretamente?

Execute curl -I -H "Accept: image/webp" https://seudominio.com/wp-content/uploads/imagem.jpg e verifique se o cabeçalho Content-Type retorna image/webp. Alternativamente, abra o DevTools do navegador na aba Network, filtre por imagens e confira a coluna Type — arquivos servidos como WebP aparecerão com esse tipo. A presença do cabeçalho Vary: Accept na resposta confirma que a configuração está correta para CDNs.

Conclusão

  • Instale e execute agora: rode sudo apt install -y webp imagemagick jpegoptim optipng e execute o script de conversão em lote para converter todo o diretório de uploads existente para WebP.
  • Configure o servidor web: adicione as regras de detecção de WebP no .htaccess (Apache) ou no bloco server (Nginx) e valide com curl antes de considerar a tarefa concluída.
  • Automatize com cron: agende o script de conversão para rodar diariamente às 2h, garantindo que novos uploads também sejam convertidos sem intervenção manual.

Leia também

Precisa de ajuda com hospedagem otimizada para WordPress?

Uma hospedagem bem configurada faz diferença real no desempenho do WordPress — especialmente quando você implementa otimizações de imagem no nível do servidor. Os planos de hospedagem da AviraHost incluem suporte técnico para configurações de servidor web, .htaccess e entrega de assets estáticos.

Conheça os planos de hospedagem WordPress da AviraHost

  • 0 Os usuários acharam isso útil
  • WordPress, WebP, otimização, performance, AviraHost
Esta resposta foi útil?

Artigos Relacionados

Tutorial: Passo a passo para instalar o WordPress na AviraHost usando o WP Toolkit do cPanel

O WP Toolkit é uma ferramenta poderosa e fácil de usar no cPanel, ideal para instalar,...

Dicas de Otimização para Hospedagem WordPress

Dicas de Otimização para Hospedagem WordPress O WordPress é uma das plataformas de gerenciamento...

Otimizar a Segurança do WordPress em Hospedagem Linux: Passos Práticos e Rápidos

Otimizar a segurança do WordPress em hospedagem Linux é fundamental para proteger seu site contra...

Guia para resolver erro de memória no WordPress: diagnóstico e ampliação

WordPress atingindo limite de memória ocorre quando o PHP não tem recursos suficientes para...

Migrar WordPress entre hospedagens sem downtime: procedimento completo

Migrar WordPress entre hospedagens sem downtime é um processo técnico que permite transferir um...