technical
Define a etiqueta meta viewport
O MetricSpot procura <meta name=viewport>. Sem ela, os navegadores móveis renderizam a 980 px de largura desktop e fazem zoom out — falhando a verificação de usabilidade móvel do Google.
O que esta verificação faz
Procura uma etiqueta <meta name="viewport"> no <head> da página e confirma que define, no mínimo, width=device-width e um initial-scale. A verificação falha quando a etiqueta está ausente ou quando bloqueia o zoom (user-scalable=no, maximum-scale=1.0 — ambos violações de acessibilidade).
Porque é importante
Sem uma etiqueta viewport, os navegadores móveis assumem que a página é desktop e renderizam-na a 980 px de largura, fazendo depois zoom out para caber no ecrã. O resultado é ilegível: texto a 4 píxeis, imagens enormes, sem breakpoints responsivos a disparar porque a matemática do viewport está errada.
- Indexação mobile-first do Google. Desde 2021, o Google usa principalmente a renderização móvel da tua página para o ranking. Um site que falha a verificação do viewport é tratado como não compatível com dispositivos móveis — uma penalização de ranking na pesquisa móvel.
- Core Web Vitals. LCP, CLS e INP são todos medidos em mobile por defeito. Uma página sem etiqueta viewport dispara a renderização em largura desktop num ecrã de telemóvel, o que inflaciona o CLS e o LCP.
- Experiência do utilizador. O tráfego móvel representa mais de 60% para a maioria dos sites. A etiqueta viewport é o que faz o design responsivo funcionar.
Como corrigir
Coloca isto no <head>, antes de qualquer CSS que dependa da largura do viewport:
<meta name="viewport" content="width=device-width, initial-scale=1">
É a receita canónica — todas as framework, CMS e starter template modernos a incluem. Se o teu site não a tem, o template do <head> está errado.
Predefinições comuns por framework.
- Astro —
<ViewTransitions />não inclui nada implícito. Adiciona a meta tag ao<head>do teu layout base. - Next.js — o App Router exporta uma constante
viewporta partir deapp/layout.tsx:
import type { Viewport } from "next";
export const viewport: Viewport = {
width: "device-width",
initialScale: 1,
};
- WordPress — todos os temas modernos imprimem a etiqueta em
header.php. Se o teu não o faz, o tema é anterior a 2014. - Vue / Nuxt / Svelte — incluída no
index.htmldo starter.
Não quebres a acessibilidade. Dois antipadrões bloqueiam o pinch-to-zoom e violam o WCAG 1.4.4:
<!-- Mau — violação de acessibilidade -->
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
Ambos impedem que utilizadores com baixa visão façam pinch-zoom ao texto. O iOS 13+ ignora user-scalable=no de qualquer forma. Não adiciones nenhum deles.
Webviews de apps nativas. Se estás a incorporar a página numa WKWebView do iOS ou numa WebView do Android com os seus próprios controlos de zoom, podes restringir o viewport ao HTML específico da webview — mas a versão pública da web continua a precisar da etiqueta padrão.
Audita por ti:
curl -s https://teudominio.com/ | grep -o '<meta name="viewport"[^>]*>'
Espera width=device-width, initial-scale=1. Se o grep não retornar nada, a etiqueta está em falta.
Perguntas frequentes
Qual é a diferença entre initial-scale=1 e width=device-width?
width=device-width define a largura do viewport para corresponder à largura em píxeis CSS do dispositivo (375 no iPhone, 360 na maioria dos Android). initial-scale=1 define o nível inicial de zoom em 1.0. Ambos são necessários — define-os em conjunto.
Devo incluir viewport-fit=cover para os notches do iPhone?
Apenas se estás a usar env(safe-area-inset-*) no CSS para empurrar conteúdo para fora do notch / dynamic island. Caso contrário, o valor por defeito serve.
A etiqueta afeta navegadores desktop?
Os navegadores desktop ignoram completamente a etiqueta meta viewport — renderizam sempre na largura real da janela. A etiqueta é exclusivamente móvel.
Fontes
Última atualização 2026-05-11