SEO

Meta tags que o Google e as redes sociais entendem

Você publica um artigo, cola o link no WhatsApp e aparece uma prévia sem imagem, com um título que você nunca escreveu. No dia seguinte pesquisa no Google e vê a sua description trocada por um trecho aleatório da página. Nada disso é bug. É a consequência de esquecer que o seu <head> é lido por duas máquinas diferentes: o buscador, que rastreia, indexa, ranqueia e monta o snippet; e o scraper das redes sociais, que busca as tags Open Graph, monta um cartão e o guarda em cache. São pipelines separadas, com caches separados e modos de falha separados, uma description perfeita não conserta um cartão quebrado, e uma imagem linda no Facebook não muda uma linha do seu ranqueamento. Este guia separa o que cada pipeline consome, mostra onde cada uma quebra e termina montando (e auditando) um head completo no [gerador de meta tags](tool:gerador-meta-tags).

J-Kit19 min de leituraIntermediário
  • SEO
  • Meta tags
  • Open Graph
  • Redes sociais
  • Indexação

Resumo rápido

  • A description não é fator de ranqueamento: é fonte de snippet, e o Google gera o snippet do conteúdo da página com frequência, usando a sua description só quando ela descreve melhor.
  • meta keywords é ignorada pelo Google desde 2009; canonical é uma dica forte, não uma ordem, o Google pode escolher outra URL.
  • Uma página bloqueada no robots.txt nunca é lida, então o noindex dela não é visto e ela pode continuar indexada só pela URL, o erro mais caro do head.
  • Open Graph controla o cartão social; o X usa twitter:* com fallback para og:. O scraper cacheia por URL, então re-scrapeie depois de corrigir uma tag.

O lado do buscador: título, description e o que ele ignora

Comece pelo par mais visível na busca: o title e a meta name="description". O título vira o link azul do resultado e o texto da aba do navegador; a description é a sugestão de resumo que aparece embaixo. A palavra "sugestão" carrega toda a nuance. O Google descreve o próprio comportamento sem rodeios: os snippets são criados principalmente a partir do conteúdo da página, e a description só é usada quando ela pode dar ao usuário uma descrição mais exata do que o texto da própria página. Ou seja, o padrão é o Google gerar o snippet sozinho; a sua description entra como candidata, não como texto garantido. Por isso ele reescreve o snippet com frequência, sobretudo quando a description está vazia, duplicada, genérica ou desalinhada da busca digitada.

Aqui mora o mal-entendido nº 1: a description não é fator de ranqueamento. Ela não empurra a página para cima; ela influencia a taxa de clique quando o Google decide usá-la. Escrever uma boa description ainda vale a pena, é a chance de vender o clique com as suas palavras,, mas trate-a como copy de anúncio, não como alavanca de posição. E não perca tempo com a meta name="keywords": o Google anunciou publicamente em 2009 que a ignora no ranqueamento de busca, porque a tag virou terreno de spam. Preenchê-la hoje só entrega a sua lista de palavras-chave para concorrentes lerem no código-fonte.

Um exemplo numérico deixa o truncamento concreto. Suponha uma description de 240 caracteres. Numa SERP de desktop, o Google costuma exibir por volta de 155 a 160 caracteres antes das reticências; os 80 e poucos caracteres finais simplesmente não aparecem. Se a sua chamada de ação estava no fim ("...peça um orçamento grátis hoje"), ela some. Agora inverta: coloque o gancho nos primeiros 120 caracteres e o corte deixa de doer. A conta não muda a description, muda onde você põe o que importa.

sem limiteoficial em caracteres (o Google trunca por pixel)
≤ 60caracteres no título (convenção prática)
50–160faixa que o gerador usa para a description
2009ano em que o Google confirmou ignorar meta keywords
  1. 2009O Google abandona meta keywords

    Em 21 de setembro de 2009, o blog oficial do Google confirma que não usa a tag keywords no ranqueamento de busca, por causa do abuso.

  2. 2010Facebook lança o Open Graph

    Na conferência f8, em abril de 2010, o Facebook publica o protocolo Open Graph, criando as tags og: que hoje viram cartão em quase toda rede.

  3. 2011Google introduz o hreflang

    Em dezembro de 2011, o Google adota rel="alternate" hreflang para relacionar versões de uma página em idiomas e regiões diferentes.

  4. 2012Twitter lança os Cards

    Em junho de 2012, o Twitter (hoje X) apresenta as tags twitter:, com fallback para o Open Graph quando elas faltam.

  5. anos 2010JSON-LD vira o preferido

    Ao longo da década, o Google passa a recomendar JSON-LD como formato de dados estruturados, por ser o mais fácil de manter em escala.

O lado social: Open Graph e o cache do scraper

Agora troque de pipeline. Quando você cola um link no WhatsApp, no LinkedIn, no Slack ou no Discord, nenhum deles consulta o ranqueamento do Google nem lê a sua description. Um scraper visita a página e procura as propriedades Open Graph, o protocolo que o Facebook criou em 2010 e que virou padrão de fato. A especificação (ogp.me) define quatro propriedades obrigatórias, e o resto é reforço. Se essas quatro estiverem certas, você já tem um cartão decente em quase todo lugar.

As quatro propriedades Open Graph obrigatórias (ogp.me) e os reforços mais úteis.
PropriedadeObrigatória?Para que serve
og:titleSimTítulo do cartão (pode diferir do title da busca).
og:typeSimNatureza do conteúdo: website, article, product, video.other…
og:imageSimImagem da prévia. Use URL absoluta em HTTPS.
og:urlSimURL canônica do conteúdo, o identificador permanente do objeto.
og:descriptionNãoTexto de apoio do cartão. Sem ela, algumas redes deixam o cartão sem legenda.
og:site_name / og:localeNãoNome do site e idioma (pt_BR). Refinam a exibição.

A imagem é onde mais gente tropeça. A spec do Open Graph não fixa dimensões, mas as próprias plataformas recomendam uma prévia grande em torno de 1200×630 px (proporção ~1,91:1), que preenche o cartão sem cortes no Facebook e no LinkedIn. Duas regras práticas evitam a maioria dos cartões quebrados: sirva a imagem por uma URL absoluta em HTTPS (muitos scrapers ignoram og:image relativa ou insegura) e acrescente og:image:alt para acessibilidade. Se você está escolhendo o formato do arquivo, o guia de formatos de imagem para a web ajuda a decidir entre JPEG, PNG, WebP e AVIF, para cartão social, JPEG ou PNG bem comprimidos são a aposta mais compatível.

Twitter/X cards: o mínimo viável e o fallback

O X (ex-Twitter) tem o seu próprio conjunto, prefixado por twitter:. A tag central é a twitter:card, que escolhe o formato do cartão e é a única realmente obrigatória. O truque que economiza trabalho: quando faltam as tags twitter:title, twitter:description e twitter:image, o X recorre às equivalentes de Open Graph. Então o mínimo viável é ter um Open Graph completo e declarar apenas o twitter:card. Você não precisa duplicar tudo, precisa apenas dizer ao X qual formato usar.

summary

  • Cartão compacto, imagem pequena e quadrada (~1:1).
  • Bom quando o texto é o protagonista.

summary_large_image

  • Imagem grande no topo, proporção 2:1 (mín. 300×157, máx. 5 MB).
  • Padrão para artigos e páginas com boa capa.

As tags twitter:site e twitter:creator recebem @perfis, o do site e o do autor. Um erro silencioso comum é esquecer o "@"; o gerador de meta tags avisa quando o handle está sem ele. Sobre imagem: o summary_large_image pede proporção 2:1, enquanto o og:image "seguro" de 1200×630 é ~1,91:1. Na prática, uma boa imagem 1200×630 serve os dois, o X recorta um fio nas laterais, sem drama. Como o cartão do X reaproveita a og:image quando você não define twitter:image, você raramente precisa de uma segunda imagem só para ele.

Indexação: canonical, robots e a armadilha do robots.txt

De volta ao buscador, três controles decidem se, e como, a página entra no índice. Eles são invisíveis ao usuário e decisivos para o SEO, e cada um esconde uma sutileza que derruba sites inteiros quando mal compreendida.

link rel="canonical"
Aponta a versão preferida de uma página que existe em várias URLs. É um sinal forte, não uma diretiva: o Google costuma respeitá-lo, mas pode escolher outra URL como canônica se os sinais discordarem.
meta name="robots"
No HTML da página: index/noindex decide se ela pode aparecer na busca; follow/nofollow decide se os links passam sinal. Só vale se o crawler conseguir ler a página.
X-Robots-Tag
O mesmo controle, mas entregue no cabeçalho HTTP da resposta. Serve para arquivos sem HTML (PDF, imagem) e para aplicar noindex no servidor sem tocar no corpo da página.
robots.txt (Disallow)
Um arquivo na raiz que pede ao crawler para NÃO rastrear certos caminhos. Controla rastreio, não indexação, e essa diferença é a armadilha abaixo.

O canonical guarda a sua própria pegadinha, o mal-entendido nº 3. Ele é uma dica, não um comando. O Google o trata como um sinal forte de qual versão você prefere, mas reserva a palavra final: se a sua página aponta um canonical para outra URL que, por sua vez, aponta de volta a lugar nenhum, se o conteúdo das duas difere muito, se há redirects ou hreflang conflitantes, o Google pode ignorar a sua escolha e canonizar a URL que ele julga melhor. Um canonical apontando para a home por engano, clássico em templates mal configurados, pode desindexar páginas boas. Antes de suspeitar do canonical, confirme que o servidor responde 200 na URL certa: uma página que devolve 404 ou entra num 301 não será indexada como você espera. Cheque o status no http status checker; o guia de códigos de status HTTP essenciais detalha as nuances de 301, 302 e 404.

A armadilha robots.txt × noindex, em detalhe

O robots.txt e o noindex resolvem problemas diferentes: um controla rastreio, o outro controla indexação. Especificar noindex dentro do próprio robots.txt não é suportado pelo Google. Se você quer tirar uma URL da busca, o caminho é permitir o rastreio e servir noindex via meta robots ou X-Robots-Tag; para casos urgentes, some a Ferramenta de Remoções do Search Console para uma supressão temporária enquanto o noindex propaga.

Por que o cartão social continua velho depois de você corrigir

O scraper das redes cacheia o resultado pela URL. Editar a og:image e recompartilhar não basta: enquanto a URL for a mesma, a rede devolve a versão em cache. Force a releitura no depurador oficial da plataforma (Sharing Debugger no Facebook, validadores equivalentes nas demais) ou, em último caso, publique sob uma URL nova. É uma falha de pipeline social, não de SEO, o Google nem participa dela.

Quando o Google ignora o seu canonical

O canonical é um voto, não uma lei. O Google pode preferir outra URL quando o conteúdo das versões diverge, quando há cadeias de redirect, quando o hreflang aponta para uma versão diferente, quando a URL declarada é bloqueada ou responde erro, ou quando a maioria dos links internos aponta para outra. Verifique o canonical que o Google de fato escolheu na Inspeção de URL do Search Console, ele nem sempre é o seu.

meta keywords: por que ainda a encontramos em templates

Ela sobrevive por inércia: CMSs antigos e plugins de SEO ainda geram o campo, e alguns buscadores menores um dia a usaram. Para o Google, porém, ela é inerte desde 2009. Não faz mal manter, mas não faz bem nenhum, e expõe a sua pesquisa de palavras-chave no código-fonte. Gaste esse esforço num title e numa description honestos, que é onde o clique se decide.

Idiomas e dados estruturados: hreflang e JSON-LD

Se o seu site existe em mais de um idioma, como este, em pt-BR e en-US,, o hreflang diz ao Google qual versão mostrar para cada usuário. A regra que mais gera erro é a reciprocidade: as anotações precisam ser bidirecionais. O Google é direto: se duas páginas não apontam uma para a outra, as tags são ignoradas. Isso existe para impedir que um site alheio se declare "versão alternativa" da sua página. Então a página pt-BR precisa listar a en-US como alternativa, e a en-US precisa listar a pt-BR de volta, cada uma listando também a si mesma.

Duas exigências fecham a configuração. Primeiro, use o valor reservado x-default para a página de fallback, a que atende quem não casa com nenhum dos seus idiomas. Segundo, as URLs do hreflang têm de ser absolutas, com protocolo: https://exemplo.com/foo, nunca //exemplo.com/foo nem /foo. Você pode entregar o hreflang de três formas equivalentes: tags link no head, cabeçalhos HTTP (para PDFs e afins) ou anotações no sitemap XML. Escolha uma e seja consistente, misturar sinais contraditórios é receita para o Google descartar tudo.

Fecha o head técnico a camada de dados estruturados, que descreve o conteúdo em linguagem de máquina (schema.org) e habilita resultados enriquecidos. Existem três sintaxes, JSON-LD, microdados e RDFa, e para o Google as três valem, desde que corretas. Mas há uma preferência declarada: o Google recomenda usar JSON-LD, por ser o mais fácil de implementar e manter em escala e o menos sujeito a erro. A vantagem prática é que o JSON-LD vive num único bloco script no head, separado do HTML visível, em vez de entrelaçar atributos nos elementos como fazem os microdados. Se você vai investir em dados estruturados, comece por JSON-LD.

De modo geral, o Google recomenda usar JSON-LD para dados estruturados, se a configuração do seu site permitir, por ser a solução mais fácil de implementar e manter em escala.

Google Search Central, Introdução aos dados estruturados

Quem lê o quê, montando e auditando o head

Junte as duas pipelines numa tabela só e a confusão evapora. Repare como quase nenhuma tag é lida pelos dois lados: Open Graph não move o ranqueamento, e title/description não montam o cartão social.

Cada tag, a pipeline que a consome e o efeito real.
TagPara quem serveObrigatória?Efeito real
titleBuscadorSimLink do resultado e aba; o Google pode reescrever.
meta descriptionBuscadorNãoCandidata a snippet, não fator de ranking; reescrita com frequência.
meta keywordsNinguém (no Google)NãoIgnorada desde 2009. Pode omitir.
link canonicalBuscadorNãoDica de URL preferida; o Google pode escolher outra.
meta robotsBuscadorNãoindex/noindex e follow/nofollow, só se a página for rastreável.
link hreflangBuscadorNãoVersão por idioma; exige reciprocidade e x-default.
og:title / og:image / og:url / og:typeRedes sociaisSim (para o cartão)Montam o cartão; não afetam ranking.
twitter:cardX (redes)Sim (no X)Formato do cartão; o resto cai no og:.
viewport / charsetNavegadorSimRenderização e mobile-friendly (indireto no SEO).

Agora o exemplo trabalhado nº 1: um head real, cheio de erros comuns. Cada linha problemática está comentada.

<!-- HEAD COM PROBLEMAS / PROBLEM HEAD -->
<title>Home</title>                                  <!-- generico: sem palavra-chave, o Google reescreve -->
<meta name="description" content="" />               <!-- vazia: o Google gera o snippet do conteudo -->
<meta name="keywords" content="tenis, comprar, barato, promocao" /> <!-- ignorada desde 2009 -->
<meta name="robots" content="noindex" />             <!-- e a pagina esta com Disallow no robots.txt (!) -->
<link rel="canonical" href="/produtos/123" />        <!-- URL relativa: fragil -->
<meta property="og:image" content="/img/capa.jpg" /> <!-- relativa, sem og:title/og:type/og:url -->
Exemplo 1, um head com os erros clássicos das duas pipelines.

O que cada erro causa: o title "Home" não diz nada, então o Google monta o próprio; a description vazia joga o snippet nas mãos do algoritmo; a meta keywords é peso morto; o par noindex + Disallow no robots.txt é o pior de todos, como o crawler não pode rastrear, ele nunca lê o noindex, e a página fica indexada só pela URL, sem descrição; o canonical relativo é frágil e pode ser mal interpretado; e a og:image relativa, sem og:title, og:type nem og:url, produz um cartão social sem imagem e sem título. Agora o exemplo trabalhado nº 2: o mesmo head, corrigido e comentado, cobrindo SEO, Open Graph, X, canonical e hreflang.

<!-- ===== Documento (navegador, nao o Google) ===== -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />

<!-- ===== Busca: o buscador le isto ===== -->
<title>Contraste de cor na WCAG 2.2: como medir AA e AAA</title>
<meta name="description" content="Como calcular a razao de contraste e passar nos limiares AA e AAA da WCAG 2.2, com exemplos e formula." />
<link rel="canonical" href="https://exemplo.com/guias/contraste" />
<meta name="robots" content="index, follow, max-image-preview:large" />

<!-- ===== Versoes por idioma: reciprocas, absolutas, com x-default ===== -->
<link rel="alternate" hreflang="pt-BR" href="https://exemplo.com/pt/guias/contraste" />
<link rel="alternate" hreflang="en-US" href="https://exemplo.com/en/guides/contrast" />
<link rel="alternate" hreflang="x-default" href="https://exemplo.com/en/guides/contrast" />

<!-- ===== Open Graph: WhatsApp, Facebook, LinkedIn, Slack, Discord ===== -->
<meta property="og:title" content="Contraste de cor na WCAG 2.2" />
<meta property="og:description" content="Limiares AA/AAA e como medir a razao de contraste." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://exemplo.com/guias/contraste" />
<meta property="og:image" content="https://exemplo.com/og/contraste.png" /> <!-- absoluta, HTTPS, ~1200x630 -->
<meta property="og:image:alt" content="Texto sobre fundo com a razao de contraste destacada" />
<meta property="og:site_name" content="Exemplo" />
<meta property="og:locale" content="pt_BR" />

<!-- ===== X (Twitter) Card: so o card e os handles; o resto cai no og: ===== -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@exemplo" />
<meta name="twitter:creator" content="@autora" />

<!-- ===== Dados estruturados: JSON-LD, o formato que o Google recomenda ===== -->
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "Article",
  "headline": "Contraste de cor na WCAG 2.2",
  "inLanguage": "pt-BR" }
</script>
Exemplo 2, o head corrigido e completo: busca, idiomas, Open Graph, X e dados estruturados.

Uma ressalva honesta: o gerador de meta tags produz o bloco de busca (title, description, canonical, robots), o Open Graph e o X, o miolo que muda a cada página. O charset, o viewport, o hreflang e o JSON-LD do exemplo acima você acrescenta à mão (ou o seu framework injeta), porque dependem da estrutura do site inteiro, não de uma página só. Gere o núcleo aqui e cole no seu head:

Preencha os campos e copie o bloco de busca + Open Graph + X, com avisos de tamanho e de og:image insegura.Abrir a ferramenta em página inteira
  • title único e descritivo, com o essencial nos primeiros ~60 caracteres.
  • description honesta com o gancho no começo, sabendo que o Google pode reescrevê-la.
  • canonical absoluto apontando para a URL que responde 200.
  • Para remover da busca: liberar o rastreio e servir noindex (nunca só Disallow no robots.txt).
  • Open Graph com as quatro obrigatórias (og:title, og:type, og:image, og:url) e og:image absoluta em HTTPS.
  • twitter:card declarado; handles com "@".
  • hreflang recíproco, absoluto e com x-default, se o site é multilíngue.
  • Depois de publicar: re-scrapear a URL no depurador da rede para limpar o cache do cartão.

Perguntas frequentes

Por que o Google mudou meu título e minha description?
Porque ele os trata como sugestões. O Google monta o snippet principalmente a partir do conteúdo da página e usa a sua description só quando ela descreve melhor a página do que o próprio texto. Ele reescreve com frequência, sobretudo quando a description está vazia, duplicada, genérica ou desalinhada da busca. Boas tags reduzem a chance de reescrita, mas não a eliminam, e a description nunca foi fator de ranqueamento.
A meta keywords ainda serve para SEO?
Não para o Google. Ele anunciou oficialmente em 2009 que ignora a tag keywords no ranqueamento de busca, porque ela virou terreno de spam. Preenchê-la hoje não ajuda em nada e ainda expõe a sua pesquisa de palavras-chave a concorrentes que leem o código-fonte. Pode omitir sem medo.
Bloqueei a página no robots.txt e ela continua no Google. Por quê?
Porque o robots.txt controla rastreio, não indexação. Se a URL está bloqueada, o crawler não baixa o HTML e nunca vê um eventual noindex, e, se outros sites linkam para ela, o Google indexa a URL mesmo sem conteúdo. Para remover de verdade, faça o oposto: libere o rastreio e sirva noindex via meta robots ou X-Robots-Tag, para o crawler poder ler a ordem de saída.
O canonical é uma ordem para o Google?
Não, é uma dica forte. O Google costuma respeitar o rel="canonical", mas mantém a palavra final e pode escolher outra URL como canônica quando os sinais discordam, conteúdo divergente entre versões, redirects, hreflang conflitante, ou a URL declarada bloqueada ou com erro. Confira o canonical que o Google de fato escolheu na Inspeção de URL do Search Console.
Preciso das tags og: e twitter: ao mesmo tempo?
Nem sempre. O X recorre ao Open Graph quando faltam twitter:title, twitter:description e twitter:image, então o mínimo é ter um Open Graph completo e declarar o twitter:card (por exemplo, summary_large_image) para liberar a prévia grande. Uma boa imagem 1200×630 serve tanto ao og:image quanto ao cartão do X.
Compartilhei o link e a imagem não aparece ou está velha. Como resolver?
Duas causas. Se a imagem nunca aparece, verifique se a og:image é uma URL absoluta em HTTPS e se as quatro tags obrigatórias (og:title, og:type, og:image, og:url) estão presentes. Se ela aparece velha depois de você corrigir, é o cache do scraper: a rede guarda o resultado pela URL. Force uma releitura no depurador oficial da plataforma (Sharing Debugger no Facebook) para atualizar a prévia.
Qual o tamanho ideal de título e description em caracteres?
Não há tamanho oficial. O Google diz que não existe limite de caracteres na description e que trunca o snippet conforme a largura do dispositivo, o corte é por pixel, não por caractere. Como convenção prática, mantenha o título em ~60 caracteres e a description em torno de 50–160, com o essencial no começo. O gerador de meta tags usa exatamente essas faixas como aviso.

Pense por pipeline. O buscador lê title, description, canonical, robots e hreflang, reescreve o snippet com frequência, trata a description como fonte (não fator de ranking), ignora keywords desde 2009 e trata o canonical como dica. As redes leem Open Graph, e o X usa twitter:* com fallback para og:, cacheando o cartão por URL. As duas maiores ciladas: bloquear no robots.txt não remove do índice (libere o rastreio e use noindex), e corrigir uma og: não atualiza o cartão sem re-scrapear. Monte o núcleo no gerador de meta tags e acrescente charset, viewport, hreflang e JSON-LD à mão.

Fontes e referências

  1. The Open Graph protocol (ogp.me)
  2. Google Search Central, Como escrever meta descriptions e snippets
  3. Google Search Central Blog, Google não usa a meta tag keywords (2009)
  4. Google Search Central, Bloquear indexação com noindex (robots.txt × noindex)
  5. Google Search Central, Consolidar URLs duplicadas (rel=canonical)
  6. Google Search Central, Versões localizadas (hreflang, x-default)
  7. X, Cards markup (summary / summary_large_image)