# Referência de regras (/pt-br/docs/rules)

> Cada regra que a Loomaly verifica, com gravidade, dimensão da pontuação, ID, o que significa e como corrigir.

{/* Generated by scripts/gen-rules-docs.ts — edit the script, not this file. */}

Todo problema que a Loomaly informa vem de uma das 81 regras desta página, e cada regra é emitida por exatamente uma parte da varredura. As explicações e os prompts de correção vêm de templates fixos, então o mesmo problema recebe o mesmo ID de regra e o mesmo texto em toda varredura. É assim que a Loomaly sabe se um problema é novo, ainda está presente ou já foi corrigido. Para trabalhar os problemas, veja [Problemas](/docs/issues).

## Como as regras afetam a sua pontuação de saúde [#health-score]

Cada regra tem uma **gravidade** (**Erro**, **Alerta** ou **Aviso**) e uma **dimensão**: a parte da saúde na busca que ela mede. Em uma página, um erro zera a dimensão, um alerta custa 25 pontos e um aviso custa 5 (no máximo 10 somados dos avisos). A pontuação do site é uma média ponderada das cinco dimensões. [Como funciona a pontuação de saúde](/docs/scoring) traz os detalhes e um exemplo calculado.

## Como as regras são verificadas [#checked-by]

A última coluna de cada tabela diz qual parte de uma varredura pode informar a regra. Veja [Como uma varredura funciona](/docs/how-scans-work) para saber quando cada parte roda.

| Verificado por | O que significa | Grupo do achado |
| --- | --- | --- |
| Verificação de regras | O código verifica o HTML da página, sempre do mesmo jeito, em cada página que a Loomaly encontra. | **Estrutural** |
| Julgamento de IA | Um modelo de IA responde a uma pergunta fixa sobre a página (por exemplo, se ela oferece um próximo passo claro), em cada página. Só as respostas em que ele confia viram problemas, e o código decide quais perguntas valem para cada tipo de página. | **Semântica** |
| Teste de desempenho | Medido com o Google PageSpeed Insights no celular, com dados reais de usuários do Chrome quando existem, nas páginas representativas de cada template. | **Desempenho** |
| Julgamento de página | A IA julga as páginas que o código marcou como suspeitas (quase duplicadas, páginas que parecem vazias ou removidas) depois de uma varredura do site. | **Julgamentos de página** |
| Verificação do site | O código verifica `robots.txt` e o sitemap uma vez por varredura e compara o sitemap com o que as páginas declaram. Aparece como um problema do site inteiro e conta uma vez, não por página. | **Estrutural** |

Quando uma página está com `noindex`, só o próprio noindex é informado, e páginas que redirecionam para outro site não são verificadas.

## Meta tags [#category-meta]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Tag `<title>` ausente](#missing-title) | Erro | Fundamentos da página | Verificação de regras |
| [O título é curto demais](#title-too-short) | Alerta | Fundamentos da página | Verificação de regras |
| [O título é longo demais](#title-too-long) | Alerta | Fundamentos da página | Verificação de regras |
| [Meta description ausente](#missing-meta-description) | Alerta | Fundamentos da página | Verificação de regras |
| [Título compartilhado com outras páginas](#duplicate-title) | Alerta | Fundamentos da página | Julgamento de página |
| [Meta description compartilhada com outras páginas](#duplicate-meta-description) | Aviso | Fundamentos da página | Julgamento de página |
| [A meta description é curta demais](#meta-description-too-short) | Aviso | Fundamentos da página | Verificação de regras |
| [A meta description é longa demais](#meta-description-too-long) | Aviso | Fundamentos da página | Verificação de regras |
| [Link canonical ausente](#missing-canonical) | Aviso | Indexabilidade | Verificação de regras |
| [O canonical aponta para uma URL diferente](#canonical-mismatch) | Alerta | Indexabilidade | Verificação de regras |
| [Meta viewport ausente](#missing-viewport) | Alerta | Fundamentos da página | Verificação de regras |
| [Página de login ou do app pode ser indexada](#indexable-app-page) | Alerta | Indexabilidade | Verificação de regras |
| [A página está definida como noindex](#robots-noindex) | Erro | Indexabilidade | Verificação de regras |
| [A página está definida como nofollow](#robots-nofollow) | Alerta | Indexabilidade | Verificação de regras |
| [O título não corresponde à página](#title-content-mismatch) | Alerta | Conteúdo e legibilidade para IA | Julgamento de IA |
| [Tags Open Graph ausentes](#missing-og-tags) | Aviso | Fundamentos da página | Verificação de regras |
| [Imagem Open Graph ausente](#missing-og-image) | Aviso | Fundamentos da página | Verificação de regras |

### Tag `<title>` ausente [#missing-title]

**Gravidade:** Erro · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-title` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A página não tem `<title>`, ou está vazio. O título é a manchete que os mecanismos de busca mostram no seu resultado e a pista mais forte na página sobre o que ela cobre.

**Como corrigir:** Adicione um `<title>` único e descritivo no `<head>` da página: o assunto da página primeiro, a sua marca por último, de 20 a 70 caracteres.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### O título é curto demais [#title-too-short]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `title-too-short` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** O título tem menos de 20 caracteres, curto demais para dizer a quem busca o que a página oferece. Um caractere chinês, japonês ou coreano conta como dois, porque ocupa o dobro da largura.

**Como corrigir:** Amplie com o assunto ou produto principal da página mais um detalhe que a diferencie. Mire de 20 a 70 caracteres.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### O título é longo demais [#title-too-long]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `title-too-long` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** O título tem mais de 70 caracteres, então os resultados de busca o cortam. Um caractere chinês, japonês ou coreano conta como dois, porque ocupa o dobro da largura.

**Como corrigir:** Coloque as palavras mais importantes primeiro e corte enchimento ou nomes de marca repetidos até caber em 70 caracteres.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### Meta description ausente [#missing-meta-description]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-meta-description` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A página não tem meta description, ou ela está vazia. Os mecanismos de busca então escrevem o próprio snippet a partir do texto da página, e você perde o controle do que quem busca lê antes de clicar.

**Como corrigir:** Adicione `<meta name="description" content="...">` com um resumo de 70 a 160 caracteres que diga o que o visitante ganha e por que clicar.

**Orientação oficial:** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### Título compartilhado com outras páginas [#duplicate-title]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `duplicate-title` · **Verificado por:** Julgamento de página · **Esforço:** médio

**O que significa:** Outras páginas do site usam exatamente o mesmo `<title>`; o problema diz quantas e cita uma. Os mecanismos de busca precisam escolher uma página para a consulta, e quem busca não distingue os resultados.

**Como corrigir:** Dê a cada página um título que diga do que ela trata: o produto, o assunto do artigo ou o nome da categoria primeiro, a marca por último. Se as páginas forem de fato a mesma, mantenha uma e aponte as outras para ela com um canonical ou um redirecionamento.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### Meta description compartilhada com outras páginas [#duplicate-meta-description]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `duplicate-meta-description` · **Verificado por:** Julgamento de página · **Esforço:** médio

**O que significa:** Outras páginas do site usam a mesma meta description, então os snippets de busca ficam iguais.

**Como corrigir:** Escreva uma descrição para cada página a partir do conteúdo dela, ou deixe vazia nas páginas em que você não tem nada específico a dizer: o Google escreve uma a partir da página.

**Orientação oficial:** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### A meta description é curta demais [#meta-description-too-short]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `meta-description-too-short` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A meta description tem menos de 70 caracteres, o que deixa a maior parte do espaço do snippet sem uso. Um caractere chinês, japonês ou coreano conta como dois, porque ocupa o dobro da largura.

**Como corrigir:** Amplie para 70 a 160 caracteres com um benefício concreto, um detalhe ou uma chamada para ação.

**Orientação oficial:** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### A meta description é longa demais [#meta-description-too-long]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `meta-description-too-long` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A meta description tem mais de 160 caracteres, então os resultados de busca a cortam. Um caractere chinês, japonês ou coreano conta como dois, porque ocupa o dobro da largura.

**Como corrigir:** Mantenha a mensagem principal nos primeiros 160 caracteres e descarte o resto.

**Orientação oficial:** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### Link canonical ausente [#missing-canonical]

**Gravidade:** Aviso · **Dimensão:** Indexabilidade · **ID da regra:** `missing-canonical` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A página não declara um `<link rel="canonical">`. Os mecanismos de busca então decidem sozinhos qual variante da URL (com parâmetros, com ou sem barra no final) é a principal.

**Como corrigir:** Adicione um link canonical que aponte para a URL preferida da própria página. A maioria dos frameworks e plugins de SEO consegue gerar um canonical autorreferente em cada página.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### O canonical aponta para uma URL diferente [#canonical-mismatch]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `canonical-mismatch` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** O link canonical aponta para uma URL diferente da própria página (comparado depois dos redirecionamentos; uma barra no final ou um host em maiúsculas não conta como diferente). Os mecanismos de busca podem indexar essa outra URL em vez desta.

**Como corrigir:** Se esta página deve ranquear por conta própria, aponte o canonical para a URL dela. Se for uma duplicata proposital que deve passar os sinais para outra página, deixe assim e ignore o problema com um motivo.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### Meta viewport ausente [#missing-viewport]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-viewport` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A página não tem `<meta name="viewport">`, então os celulares a renderizam como uma página de desktop reduzida. O Google indexa a versão para celular do seu site.

**Como corrigir:** Adicione `<meta name="viewport" content="width=device-width, initial-scale=1">` ao `<head>`.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing](https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing)

### Página de login ou do app pode ser indexada [#indexable-app-page]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `indexable-app-page` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** Este endereço parece login, conta ou aplicativo e responde 200 sem noindex. A busca pode listar uma tela de entrada.

**Como corrigir:** Adicione noindex na meta robots ou no cabeçalho X-Robots-Tag. Não escreva título nem descrição para essas páginas.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/robots-meta-tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)

### A página está definida como noindex [#robots-noindex]

**Gravidade:** Erro · **Dimensão:** Indexabilidade · **ID da regra:** `robots-noindex` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A página diz aos mecanismos de busca para não indexá-la, então ela não aparece nos resultados de busca. O Loomaly não reporta isso em páginas que em geral ficam de fora da busca de propósito, como login, conta, carrinho, checkout e páginas legais.

**Como corrigir:** Se a página deve aparecer na busca, remova `noindex` da meta tag robots (e de qualquer cabeçalho `X-Robots-Tag`). Se for intencional, ignore o problema com um motivo.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/block-indexing](https://developers.google.com/search/docs/crawling-indexing/block-indexing)

### A página está definida como nofollow [#robots-nofollow]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `robots-nofollow` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A configuração robots da página diz `nofollow`, então os mecanismos de busca não seguem nenhum link da página. As páginas para as quais ela aponta não recebem descoberta nem crédito a partir dela.

**Como corrigir:** Remova `nofollow` da meta tag robots da página. Para impedir que links individuais passem crédito, coloque `rel="nofollow"` nesses links.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/robots-meta-tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)

### O título não corresponde à página [#title-content-mismatch]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `title-content-mismatch` · **Verificado por:** Julgamento de IA · **Esforço:** pequeno

**O que significa:** O `<title>` promete algo que os headings e o texto da página não entregam. Quem busca e clica sai rápido, e o Google pode reescrever o título nos resultados.

**Como corrigir:** Reescreva o título para descrever o que a página de fato oferece, usando as palavras do heading principal, ou mude a página para ela entregar o que o título promete.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### Tags Open Graph ausentes [#missing-og-tags]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-og-tags` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página não tem `og:title`, `og:description` nem `og:image`. Redes sociais, apps de chat e assistentes de IA usam estas tags Open Graph para montar a prévia quando alguém compartilha o link.

**Como corrigir:** Adicione pelo menos `og:title`, `og:description` e `og:image` (e, de preferência, `og:url`) ao `<head>`. A maioria dos plugins de SEO e frameworks consegue gerá-las a partir do título e da descrição da página.

**Orientação oficial:** [ogp.me](https://ogp.me/)

### Imagem Open Graph ausente [#missing-og-image]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-og-image` · **Verificado por:** Verificação de regras · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página tem tags Open Graph, mas não tem `og:image`, então links compartilhados aparecem sem imagem de prévia ou com uma imagem aleatória.

**Como corrigir:** Adicione `og:image` com uma URL absoluta de uma imagem representativa. 1200 x 630 pixels é o tamanho comum.

**Orientação oficial:** [ogp.me](https://ogp.me/)

## Cabeçalhos [#category-headings]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [H1 ausente](#missing-h1) | Alerta | Fundamentos da página | Verificação de regras |
| [Várias tags H1](#multiple-h1) | Alerta | Fundamentos da página | Verificação de regras |
| [Níveis de heading pulados](#heading-skip-level) | Aviso | Fundamentos da página | Verificação de regras |

### H1 ausente [#missing-h1]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-h1` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página não tem `<h1>`. O H1 é o heading visível principal da página e um sinal forte do assunto dela.

**Como corrigir:** Adicione exatamente um H1 que diga o assunto principal da página. Ele pode coincidir com o título ou ecoá-lo de perto.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### Várias tags H1 [#multiple-h1]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `multiple-h1` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página tem mais de um `<h1>`, o que embaralha qual assunto é o principal. Uma causa comum é um tema que marca o logo ou os títulos de seção como H1.

**Como corrigir:** Mantenha um H1 para o assunto principal da página e mude os outros para H2 ou H3.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### Níveis de heading pulados [#heading-skip-level]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `heading-skip-level` · **Verificado por:** Verificação de regras · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** Os níveis de heading pulam, por exemplo de H1 direto para H3. Leitores de tela e rastreadores usam os headings como o sumário da página, e as lacunas dificultam acompanhar.

**Como corrigir:** Use os níveis de heading em ordem (H1, depois H2, depois H3) conforme a estrutura, e defina o tamanho com CSS em vez de escolher outro nível.

**Orientação oficial:** [developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements)

## Conteúdo [#category-content]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Compete com outra página pela mesma busca](#duplicate-intent) | Alerta | Conteúdo e legibilidade para IA | Julgamento de página |
| [Item indisponível ainda indexável](#unavailable-item) | Alerta | Conteúdo e legibilidade para IA | Julgamento de página |
| [Página provisória sem conteúdo real](#placeholder-page) | Alerta | Conteúdo e legibilidade para IA | Julgamento de página |
| [Nenhum próximo passo claro para o visitante](#missing-next-step) | Alerta | Conteúdo e legibilidade para IA | Julgamento de IA |
| [Conteúdo fino](#thin-content) | Alerta | Conteúdo e legibilidade para IA | Julgamento de IA |
| [Poucas palavras](#low-word-count) | Aviso | Conteúdo e legibilidade para IA | Verificação de regras |
| [Possível enchimento de palavras-chave](#keyword-stuffing) | Alerta | Conteúdo e legibilidade para IA | Julgamento de IA |
| [Frase-alvo ausente no título](#keyword-missing-title) | Alerta | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [Frase-alvo ausente no H1](#keyword-missing-h1) | Aviso | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [Frase-alvo ausente na meta description](#keyword-missing-description) | Aviso | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [Frase-alvo ausente na abertura](#keyword-missing-intro) | Aviso | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [Uma frase buscada está ausente no título](#gsc-query-title-gap) | Alerta | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [A frase-alvo não está no início do título](#keyword-not-title-start) | Aviso | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [O site não tem llms.txt](#llms-txt-missing) | Aviso | Conteúdo e legibilidade para IA | Verificação do site |
| [llms.txt não é um mapa de páginas utilizável](#llms-txt-invalid) | Aviso | Conteúdo e legibilidade para IA | Verificação do site |
| [llms.txt aponta para páginas que falham](#llms-txt-broken-links) | Alerta | Conteúdo e legibilidade para IA | Verificação do site |
| [Página não otimizada para citação por IA](#page-not-citable-by-llm) | Aviso | Conteúdo e legibilidade para IA | Julgamento de IA |
| [Assinatura do autor ausente](#missing-author-byline) | Aviso | Conteúdo e legibilidade para IA | Julgamento de IA |
| [Data de publicação ausente](#missing-publish-date) | Aviso | Conteúdo e legibilidade para IA | Julgamento de IA |

### Compete com outra página pela mesma busca [#duplicate-intent]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `duplicate-intent` · **Verificado por:** Julgamento de página · **Esforço:** grande

**O que significa:** Outra página do seu site atende à mesma busca, e o problema a nomeia. Os mecanismos de busca em geral escolhem uma das duas e a outra perde. Páginas que já se declaram como canonical ou como versões de idioma não são sinalizadas.

**Como corrigir:** Una as duas em uma página e redirecione a URL mais fraca, aponte uma para a outra com um canonical, ou deixe-as claramente diferentes (público, produto ou pergunta diferentes).

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### Item indisponível ainda indexável [#unavailable-item]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `unavailable-item` · **Verificado por:** Julgamento de página · **Esforço:** médio

**O que significa:** A página é de algo que não está mais disponível (esgotado, descontinuado, um evento que acabou), mas ainda pode ser encontrada na busca.

**Como corrigir:** Mantenha só se ela ajudar o visitante a seguir, por exemplo com alternativas ou uma data de reposição. Caso contrário, redirecione para a alternativa mais próxima ou marque como `noindex`.

**Orientação oficial:** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

### Página provisória sem conteúdo real [#placeholder-page]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `placeholder-page` · **Verificado por:** Julgamento de página · **Esforço:** grande

**O que significa:** A página é uma casca de modelo ou um rascunho sem nada para o visitante, como texto provisório, uma categoria vazia ou uma página de em breve.

**Como corrigir:** Preencha com conteúdo real, ou mantenha fora da busca (`noindex`, ou despublique) até ter algum.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### Nenhum próximo passo claro para o visitante [#missing-next-step]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `missing-next-step` · **Verificado por:** Julgamento de IA · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** Uma página inicial, de landing ou de produto não dá ao visitante um próximo passo claro: cadastrar, comprar, reservar, falar com você ou continuar lendo. A página pode ranquear e ainda perder os visitantes que conquista. O julgamento de IA vê os botões e os links de chamada para ação da página, e isso só é verificado nas páginas em que o Loomaly os registrou.

**Como corrigir:** Adicione uma chamada para ação principal perto do topo e de novo depois do conteúdo principal, com um verbo que diga o que acontece ("Começar teste grátis", "Agendar uma conversa"). Deixe os links secundários visualmente mais discretos.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### Conteúdo fino [#thin-content]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `thin-content` · **Verificado por:** Julgamento de IA · **Esforço:** grande

**O que significa:** Para o que a página se propõe (um produto, um artigo, uma landing page), ela não dá substância suficiente ao visitante: pouco além de um heading e algumas linhas. Os mecanismos de busca tratam páginas assim como de baixo valor.

**Como corrigir:** Adicione conteúdo que responda ao que um visitante desta página de fato precisa. Se a página não tem propósito próprio, una a uma página relacionada ou mantenha fora da busca.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### Poucas palavras [#low-word-count]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `low-word-count` · **Verificado por:** Verificação de regras · **Esforço:** grande

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página tem menos texto do que o assunto em geral precisa para ranquear.

**Como corrigir:** Amplie com detalhe útil, como especificações, respostas a perguntas comuns ou exemplos, não enchimento.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### Possível enchimento de palavras-chave [#keyword-stuffing]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-stuffing` · **Verificado por:** Julgamento de IA · **Esforço:** médio

**O que significa:** O texto não parece uma pessoa escrevendo para outras pessoas: termos de busca se repetem bem mais do que uma escrita natural faria. A leitura fica ruim e há risco de penalidade de busca.

**Como corrigir:** Reescreva os trechos afetados de forma natural, use sinônimos e corte a repetição em headings, texto alt e rodapés.

**Orientação oficial:** [developers.google.com/search/docs/essentials/spam-policies#keyword-stuffing](https://developers.google.com/search/docs/essentials/spam-policies#keyword-stuffing)

### Frase-alvo ausente no título [#keyword-missing-title]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-missing-title` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

**O que significa:** A frase pela qual esta página deveria ranquear não está na parte do `<title>` que o Google mostra. Uma correspondência só na segunda metade do título é cortada nos resultados de busca.

**Como corrigir:** Coloque essa frase na primeira metade do `<title>`, antes do nome da marca.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### Frase-alvo ausente no H1 [#keyword-missing-h1]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-missing-h1` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A frase pela qual esta página deveria ranquear não está em nenhum H1, então o heading que o visitante vê primeiro não diz para que a página serve.

**Como corrigir:** Use a frase no H1 da página, com as palavras que quem busca usaria.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### Frase-alvo ausente na meta description [#keyword-missing-description]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-missing-description` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A frase pela qual esta página deveria ranquear não está na meta description, então o snippet abaixo do resultado não a menciona.

**Como corrigir:** Inclua a frase uma vez na meta description, em uma frase sobre o que o visitante ganha.

**Orientação oficial:** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### Frase-alvo ausente na abertura [#keyword-missing-intro]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-missing-intro` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A frase pela qual esta página deveria ranquear não aparece na abertura da página, então a primeira tela não confirma que o visitante está no lugar certo.

**Como corrigir:** Use a frase no primeiro parágrafo, ou na primeira linha de uma página escrita em chinês, japonês, coreano ou tailandês.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### Uma frase buscada está ausente no título [#gsc-query-title-gap]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `gsc-query-title-gap` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

**O que significa:** O Google já mostra esta página para uma consulta com demanda real, e essa consulta não está no título nem no H1. O título ignora uma busca que a página já conquista.

**Como corrigir:** Inclua a consulta no título ou no H1, se a página de fato a responde. Deixe de fora quando a página for sobre outra coisa.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### A frase-alvo não está no início do título [#keyword-not-title-start]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-not-title-start` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

**O que significa:** A frase pela qual esta página deveria ranquear está no título, mas não no início (o primeiro terço da largura, ou as primeiras palavras). Quem pesquisa vê primeiro o começo do título.

**Como corrigir:** Mova essa frase para o início do título, antes do nome da marca.

**Orientação oficial:** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### O site não tem llms.txt [#llms-txt-missing]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `llms-txt-missing` · **Verificado por:** Verificação do site · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** `/llms.txt` não existe, ou esse endereço responde com uma página web. Uma página HTML genérica conta como ausência. Alguns produtos leem esse arquivo para achar páginas, e ele precisa ser texto puro.

**Como corrigir:** Publique `/llms.txt` na raiz do domínio como `text/plain`: um título `#`, um resumo opcional de uma linha e links Markdown para páginas reais. Next.js: `public/llms.txt` ou `app/llms.txt/route.ts`. Astro e TanStack Start: `public/llms.txt`. Fumadocs: gere a partir da fonte da documentação. Docusaurus e outros sites estáticos: `static/llms.txt` ou a pasta pública do host.

**Orientação oficial:** [llmstxt.org](https://llmstxt.org/)

### llms.txt não é um mapa de páginas utilizável [#llms-txt-invalid]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `llms-txt-invalid` · **Verificado por:** Verificação do site · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** `/llms.txt` é publicado como texto puro, mas não é um mapa utilizável: precisa de um título (`# …`) e de pelo menos um link Markdown para uma página. Alguns produtos leem esse arquivo para achar páginas. Um arquivo ausente, ou uma página HTML nesse endereço, é outra verificação.

**Como corrigir:** Dê a `/llms.txt` um título `#`, um resumo opcional e uma lista de links Markdown para as páginas que você quer que sejam lidas, por exemplo `- [Preços](https://example.com/pricing): planos e preços`. Sirva como `text/plain`. Next.js pode usar `public/llms.txt` ou `app/llms.txt/route.ts`; Astro e TanStack Start usam `public/llms.txt`; Fumadocs pode gerar a partir da documentação; Docusaurus e outros sites estáticos usam `static/llms.txt`.

**Orientação oficial:** [llmstxt.org](https://llmstxt.org/)

### llms.txt aponta para páginas que falham [#llms-txt-broken-links]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `llms-txt-broken-links` · **Verificado por:** Verificação do site · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** `/llms.txt` aponta para páginas deste site que respondem com erro. O problema lista as que foram verificadas. Quem segue o arquivo cai numa página que não abre.

**Como corrigir:** Aponte cada link para uma página que responda 200, ou remova a linha. O aviso lista os primeiros que falham. O arquivo costuma ser `public/llms.txt` ou a rota que o serve.

**Orientação oficial:** [llmstxt.org](https://llmstxt.org/)

### Página não otimizada para citação por IA [#page-not-citable-by-llm]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `page-not-citable-by-llm` · **Verificado por:** Julgamento de IA · **Esforço:** grande

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** As seções da página não abrem com uma resposta direta, ou não se entendem sozinhas. Respostas de IA e featured snippets citam trechos que dizem o ponto logo no início; não há atalho de marcação para isso.

**Como corrigir:** Comece cada seção com uma frase que responda ao heading diretamente e depois acrescente o detalhe. Use headings que combinem com o jeito que as pessoas perguntam e declare fatos e números específicos.

**Orientação oficial:** [developers.google.com/search/docs/appearance/ai-features](https://developers.google.com/search/docs/appearance/ai-features)

### Assinatura do autor ausente [#missing-author-byline]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `missing-author-byline` · **Verificado por:** Julgamento de IA · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** O artigo não diz quem escreveu, na página nem nos dados estruturados. Um autor identificado ajuda leitores a julgar o conteúdo e faz parte do que as diretrizes de qualidade do Google procuram.

**Como corrigir:** Mostre o nome do autor com um link para uma bio curta ou página de autor, e adicione o autor ao JSON-LD Article da página.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### Data de publicação ausente [#missing-publish-date]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `missing-publish-date` · **Verificado por:** Julgamento de IA · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** O artigo não mostra quando foi publicado ou atualizado, na página nem nos dados estruturados, então os leitores não sabem se está atual.

**Como corrigir:** Mostre a data de publicação (e de atualização) na página e adicione `datePublished` e `dateModified` ao JSON-LD da página.

**Orientação oficial:** [developers.google.com/search/docs/appearance/publication-dates](https://developers.google.com/search/docs/appearance/publication-dates)

## Imagens [#category-images]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Imagens sem texto alt](#image-missing-alt) | Alerta | Fundamentos da página | Verificação de regras |
| [Imagens sem lazy loading](#image-no-lazy-loading) | Aviso | Desempenho | Verificação de regras |

### Imagens sem texto alt [#image-missing-alt]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `image-missing-alt` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** Um ou mais elementos `<img>` não têm o atributo `alt`, e o problema diz quantas imagens da página são afetadas. Leitores de tela não conseguem descrevê-las e o Google Images tem menos com o que trabalhar.

**Como corrigir:** Dê a cada imagem com significado um `alt` curto que a descreva. Imagens só decorativas devem receber um `alt=""` vazio.

**Orientação oficial:** [developers.google.com/search/docs/appearance/google-images](https://developers.google.com/search/docs/appearance/google-images)

### Imagens sem lazy loading [#image-no-lazy-loading]

**Gravidade:** Aviso · **Dimensão:** Desempenho · **ID da regra:** `image-no-lazy-loading` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** Imagens mais abaixo na página carregam junto com ela e disputam banda com o que o visitante vê primeiro.

**Como corrigir:** Adicione `loading="lazy"` às imagens abaixo da dobra. Não faça lazy load da imagem principal no topo da página, porque isso atrasa o Largest Contentful Paint.

**Orientação oficial:** [web.dev/articles/browser-level-image-lazy-loading](https://web.dev/articles/browser-level-image-lazy-loading)

## Links [#category-links]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Nenhum link interno](#no-internal-links) | Alerta | Fundamentos da página | Verificação de regras |
| [Poucos links internos](#too-few-internal-links) | Aviso | Fundamentos da página | Verificação de regras |
| [Links externos em excesso](#excessive-external-links) | Aviso | Fundamentos da página | Verificação de regras |
| [Nenhum link interno usa a frase-alvo](#keyword-anchor-missing) | Aviso | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [A página de foco tem poucos links internos](#focus-page-few-inlinks) | Alerta | Conteúdo e legibilidade para IA | Verificação de palavras-chave |
| [Links internos para páginas que respondem com erro](#internal-links-to-errors) | Alerta | Fundamentos da página | Verificação do site |
| [Páginas do sitemap para as quais nenhuma outra página aponta](#orphan-pages) | Alerta | Fundamentos da página | Verificação do site |

### Nenhum link interno [#no-internal-links]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `no-internal-links` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** A página não aponta para nenhuma outra página do seu site. Ela não passa valor para o resto do site, e os rastreadores descobrem menos a partir dela.

**Como corrigir:** Adicione links para páginas relacionadas no conteúdo, além de navegação ou breadcrumbs. Garanta que os links sejam elementos `<a href>` de verdade, não handlers de clique.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### Poucos links internos [#too-few-internal-links]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `too-few-internal-links` · **Verificado por:** Verificação de regras · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página tem bem poucos links para outras páginas do seu site, então pode ser subvalorizada e pouco ajuda o visitante a seguir.

**Como corrigir:** Aponte para produtos, artigos ou categorias relacionados onde isso ajudar o leitor.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### Links externos em excesso [#excessive-external-links]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `excessive-external-links` · **Verificado por:** Verificação de regras · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página aponta para muitos domínios externos. Cada link de saída deveria estar ali pelo leitor.

**Como corrigir:** Remova links sem justificativa editorial. Marque links pagos ou de afiliado com `rel="sponsored"` e links enviados por usuários com `rel="ugc"`.

**Orientação oficial:** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### Nenhum link interno usa a frase-alvo [#keyword-anchor-missing]

**Gravidade:** Aviso · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `keyword-anchor-missing` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** Outras páginas do site apontam para cá, e nenhum desses links usa a frase pela qual esta página deveria ranquear. O texto âncora é a pista que esses links passam adiante.

**Como corrigir:** Em pelo menos um link interno para esta página, use a frase como o texto visível do link.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### A página de foco tem poucos links internos [#focus-page-few-inlinks]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `focus-page-few-inlinks` · **Verificado por:** Verificação de palavras-chave · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** Menos de cinco páginas apontam para a página de foco, ou esses links usam menos de cinco textos âncora diferentes. A página recebe pouca atenção interna do site.

**Como corrigir:** Adicione links internos a partir de páginas relacionadas. Em um assistente, chame link_suggestions e aprove os que fizerem sentido.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### Links internos para páginas que respondem com erro [#internal-links-to-errors]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `internal-links-to-errors` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** Páginas do seu site apontam para outras páginas do seu site que respondem com erro (4xx ou 5xx). O problema diz quantas páginas apontam para quantas mortas, com exemplos. Visitantes que seguem esses links caem em um beco sem saída, e os rastreadores gastam a visita neles.

**Como corrigir:** Aponte cada link para o endereço atual da página, ou remova. Se a página mudou de lugar, redirecione o endereço antigo para o novo para os links de fora também continuarem funcionando.

**Orientação oficial:** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

### Páginas do sitemap para as quais nenhuma outra página aponta [#orphan-pages]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `orphan-pages` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** O seu sitemap lista páginas para as quais nenhuma página do seu site aponta. O problema diz quantas e dá exemplos; cada uma foi verificada e carrega. Visitantes só chegam a elas de fora, e os mecanismos de busca dão pouco peso a páginas para as quais ninguém aponta. Às vezes são páginas que não deveriam estar no sitemap (um modelo, um arquivo de verificação, uma campanha antiga).

**Como corrigir:** Aponte para cada página que importa a partir de uma página relacionada, um hub ou a navegação. Tire do sitemap as que não deveriam ser públicas.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

## Dados estruturados [#category-structured-data]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Sem dados estruturados JSON-LD](#missing-structured-data) | Aviso | Dados estruturados | Verificação de regras |
| [Página de produto sem dados estruturados Product](#missing-product-schema) | Alerta | Dados estruturados | Verificação de regras |
| [Dados estruturados inválidos](#invalid-structured-data) | Alerta | Dados estruturados | Verificação de regras |
| [Schema Organization ausente](#missing-organization-schema) | Aviso | Dados estruturados | Verificação de regras |
| [Schema de breadcrumb ausente](#missing-breadcrumb-schema) | Aviso | Dados estruturados | Verificação de regras |

### Sem dados estruturados JSON-LD [#missing-structured-data]

**Gravidade:** Aviso · **Dimensão:** Dados estruturados · **ID da regra:** `missing-structured-data` · **Verificado por:** Verificação de regras · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página não tem bloco JSON-LD. Dados estruturados descrevem a página (um produto, um artigo, o seu negócio) de um jeito que os mecanismos de busca leem direto, e muitos resultados avançados exigem isso.

**Como corrigir:** Adicione um bloco `<script type="application/ld+json">` do tipo Schema.org correspondente. Peça ao assistente (`problem`) um bloco pronto para colar, escolhido para o tipo do seu site; troque os placeholders antes de publicar.

**Orientação oficial:** [developers.google.com/search/docs/appearance/structured-data/intro-structured-data](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data)

### Página de produto sem dados estruturados Product [#missing-product-schema]

**Gravidade:** Alerta · **Dimensão:** Dados estruturados · **ID da regra:** `missing-product-schema` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** Esta é uma página de produto, mas não tem dados estruturados `Product`. O Google Shopping, os resultados avançados e os assistentes de IA leem nome, preço, moeda e disponibilidade do produto nessa marcação; sem ela, precisam adivinhar pela página, se é que conseguem vê-la.

**Como corrigir:** Adicione um bloco JSON-LD `Product` com `name`, `image`, `description` e um objeto `offers` (`price`, `priceCurrency`, `availability`, `url`), gerado a partir dos mesmos dados que a página mostra. Em um site que renderiza no navegador, isso precisa estar no HTML que o servidor envia.

**Orientação oficial:** [developers.google.com/search/docs/appearance/structured-data/product-snippet](https://developers.google.com/search/docs/appearance/structured-data/product-snippet)

### Dados estruturados inválidos [#invalid-structured-data]

**Gravidade:** Alerta · **Dimensão:** Dados estruturados · **ID da regra:** `invalid-structured-data` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** O JSON-LD da página tem erros em relação às regras do Schema.org. O Loomaly verifica isso com o próprio validador, não com IA, e o problema mostra o caminho do primeiro erro e quantos mais existem. Só erros são reportados, não avisos.

**Como corrigir:** Corrija a propriedade no caminho reportado. Peça ao assistente (`problem`) uma cópia reparada da sua marcação, o que mudou e o que ainda precisa de um fato só você tem. Depois teste a página no Teste de resultados rich do Google.

**Orientação oficial:** [developers.google.com/search/docs/appearance/structured-data/sd-policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)

### Schema Organization ausente [#missing-organization-schema]

**Gravidade:** Aviso · **Dimensão:** Dados estruturados · **ID da regra:** `missing-organization-schema` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página inicial não tem JSON-LD Organization (ou LocalBusiness), que diz aos mecanismos de busca o seu nome, logo e perfis e torna você elegível a um painel de conhecimento.

**Como corrigir:** Adicione JSON-LD Organization à página inicial com `name`, `url`, `logo` e links `sameAs` para os seus perfis. Negócios locais devem usar LocalBusiness com endereço e horário. Peça ao assistente (`problem`) um modelo para preencher.

**Orientação oficial:** [developers.google.com/search/docs/appearance/structured-data/organization](https://developers.google.com/search/docs/appearance/structured-data/organization)

### Schema de breadcrumb ausente [#missing-breadcrumb-schema]

**Gravidade:** Aviso · **Dimensão:** Dados estruturados · **ID da regra:** `missing-breadcrumb-schema` · **Verificado por:** Verificação de regras · **Esforço:** médio

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A página não tem JSON-LD BreadcrumbList, que permite ao Google mostrar o lugar da página no seu site em vez de uma URL crua.

**Como corrigir:** Adicione JSON-LD BreadcrumbList que combine com a posição da página na sua navegação. A maioria das plataformas e plugins de SEO consegue gerar a partir das migalhas. Peça ao assistente (`problem`) um modelo.

**Orientação oficial:** [developers.google.com/search/docs/appearance/structured-data/breadcrumb](https://developers.google.com/search/docs/appearance/structured-data/breadcrumb)

## Técnico [#category-technical]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Página de erro servida como página normal](#soft-404) | Erro | Indexabilidade | Julgamento de página |
| [Rastreadores que não executam JavaScript veem uma página vazia](#client-rendered-without-ssr) | Erro | Indexabilidade | Verificação de regras |
| [Só os mecanismos de busca recebem a página renderizada; os rastreadores de IA a veem vazia](#prerendered-for-search-engines-only) | Alerta | Conteúdo e legibilidade para IA | Verificação de regras |
| [Página servida por HTTP](#non-https) | Erro | Indexabilidade | Verificação de regras |
| [O robots.txt não é um arquivo robots válido](#robots-txt-invalid) | Alerta | Indexabilidade | Verificação do site |
| [O robots.txt não aponta para um sitemap](#robots-txt-no-sitemap) | Aviso | Indexabilidade | Verificação do site |
| [robots.txt só tem comentários](#robots-only-comments) | Aviso | Indexabilidade | Verificação do site |
| [O robots.txt bloqueia os rastreadores por trás das respostas de busca com IA](#ai-search-crawlers-blocked) | Alerta | Conteúdo e legibilidade para IA | Verificação do site |
| [robots.txt bloqueia rastreadores de IA](#ai-crawler-blocked) | Alerta | Conteúdo e legibilidade para IA | Verificação do site |
| [O site pede aos mecanismos de resposta de IA para não usarem as páginas](#content-signal-blocks-ai-answers) | Alerta | Conteúdo e legibilidade para IA | Verificação do site |
| [Sitemap não encontrado](#sitemap-missing) | Alerta | Indexabilidade | Verificação do site |
| [O sitemap deixa de fora páginas indexáveis](#sitemap-stale) | Alerta | Indexabilidade | Verificação do site |
| [O sitemap não é XML válido](#sitemap-invalid) | Alerta | Indexabilidade | Verificação do site |
| [O sitemap lista páginas que não são a versão a indexar](#sitemap-lists-non-canonical) | Alerta | Indexabilidade | Verificação do site |
| [Canonicals apontam para endereços que redirecionam ou falham](#canonical-target-broken) | Alerta | Indexabilidade | Verificação do site |
| [Site mobile separado sem rel="alternate"](#mobile-site-not-annotated) | Alerta | Indexabilidade | Verificação do site |
| [Outras versões do endereço não redirecionam de forma permanente](#host-variants-not-redirected) | Alerta | Indexabilidade | Verificação do site |
| [Favicon ausente](#missing-favicon) | Aviso | Fundamentos da página | Verificação de regras |
| [A página retornou status diferente de 200](#non-200-status) | Erro | Indexabilidade | Verificação de regras |

### Página de erro servida como página normal [#soft-404]

**Gravidade:** Erro · **Dimensão:** Indexabilidade · **ID da regra:** `soft-404` · **Verificado por:** Julgamento de página · **Esforço:** médio

**O que significa:** A página diz que não foi encontrada ou que está quebrada, mas responde com HTTP 200, então os mecanismos de busca a mantêm indexada como página real.

**Como corrigir:** Retorne um status 404 ou 410 de verdade para páginas que não existem mais, ou redirecione (301) para a página certa.

**Orientação oficial:** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

### Rastreadores que não executam JavaScript veem uma página vazia [#client-rendered-without-ssr]

**Gravidade:** Erro · **Dimensão:** Indexabilidade · **ID da regra:** `client-rendered-without-ssr` · **Verificado por:** Verificação de regras · **Esforço:** grande

**O que significa:** Buscada sem executar JavaScript, a página é um documento grande (20 KB de HTML ou mais) com menos de 150 caracteres de texto: o conteúdo só aparece depois que o JavaScript roda. É isso que veem os rastreadores que não executam JavaScript, inclusive a maioria dos rastreadores de IA (ChatGPT, Perplexity, Claude) e as prévias de link. Alguns sites enviam uma página renderizada só ao Googlebot; o Google então vê o conteúdo e os rastreadores de IA continuam sem ver. Páginas assim estão vazias demais para julgar, então recebem este problema em vez do julgamento de IA.

**Como corrigir:** Renderize a página no servidor ou pré-renderize na hora do build, para o HTML já conter o conteúdo. A maioria dos frameworks oferece renderização no servidor ou geração estática.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)

### Só os mecanismos de busca recebem a página renderizada; os rastreadores de IA a veem vazia [#prerendered-for-search-engines-only]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `prerendered-for-search-engines-only` · **Verificado por:** Verificação de regras · **Esforço:** grande

**O que significa:** Buscada como um visitante normal, a página é uma casca vazia que o JavaScript preenche depois; buscada como Googlebot, ela chega totalmente renderizada. O site pré-renderiza páginas só para mecanismos de busca. Google e Bing portanto veem o conteúdo e podem ranqueá-lo, mas os rastreadores de IA (ChatGPT, Perplexity, Claude e outros) não executam JavaScript e não estão na lista de pré-renderização, então veem a página vazia e não conseguem citar preços, estoque ou detalhes nas respostas.

**Como corrigir:** Adicione os principais rastreadores de IA (GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot e similares) à lista de pré-renderização, o que em geral é uma mudança de uma linha no serviço de pré-renderização ou na regra da CDN. No longo prazo, renderize o conteúdo no servidor para todo mundo.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering](https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering)

### Página servida por HTTP [#non-https]

**Gravidade:** Erro · **Dimensão:** Indexabilidade · **ID da regra:** `non-https` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** A página é servida em HTTP puro. HTTPS é um fator de ranqueamento confirmado do Google, e os navegadores marcam páginas HTTP como não seguras.

**Como corrigir:** Instale um certificado TLS, redirecione cada URL HTTP para a versão HTTPS com um 301 e atualize links internos e canonicals para HTTPS.

**Orientação oficial:** [developers.google.com/search/docs/appearance/page-experience](https://developers.google.com/search/docs/appearance/page-experience)

### O robots.txt não é um arquivo robots válido [#robots-txt-invalid]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `robots-txt-invalid` · **Verificado por:** Verificação do site · **Esforço:** pequeno

**O que significa:** `/robots.txt` na raiz do seu domínio responde com uma página web ou um erro de servidor em vez de regras em texto puro. Os rastreadores não encontram regras nem sitemap nele, e um erro de servidor ali faz o Google pausar o rastreamento do site.

**Como corrigir:** Sirva `/robots.txt` como `text/plain` a partir da raiz do domínio, com as suas regras `User-agent` e uma linha `Sitemap:`. Garanta que a rota catch-all do app ou um redirecionamento para a página inicial não responda por ele.

**Orientação oficial:** [developers.google.com/crawling/docs/robots-txt/create-robots-txt](https://developers.google.com/crawling/docs/robots-txt/create-robots-txt)

### O robots.txt não aponta para um sitemap [#robots-txt-no-sitemap]

**Gravidade:** Aviso · **Dimensão:** Indexabilidade · **ID da regra:** `robots-txt-no-sitemap` · **Verificado por:** Verificação do site · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** `robots.txt` não tem linha `Sitemap:`, ou o site não tem robots.txt. Os mecanismos de busca para os quais você enviou o sitemap ainda o têm; Bing, rastreadores de IA e outros precisam encontrá-lo sozinhos.

**Como corrigir:** Adicione `Sitemap: https://your-domain/sitemap.xml` (a URL completa de cada sitemap) ao `/robots.txt`. Se o site não tem robots.txt (a evidência diz `no robots.txt`), crie um: essa linha sozinha é um arquivo válido e não bloqueia nada.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap)

### robots.txt só tem comentários [#robots-only-comments]

**Gravidade:** Aviso · **Dimensão:** Indexabilidade · **ID da regra:** `robots-only-comments` · **Verificado por:** Verificação do site · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** robots.txt não tem regras nem uma linha Sitemap, só comentários. Um host como a Cloudflare publica um arquivo assim e o gerencia, então a cópia no projeto pode não ser a que os rastreadores leem.

**Como corrigir:** Adicione uma linha Sitemap nas configurações de robots.txt do host. Se você controla o arquivo, troque os comentários por regras reais e uma linha Sitemap.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap)

### O robots.txt bloqueia os rastreadores por trás das respostas de busca com IA [#ai-search-crawlers-blocked]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `ai-search-crawlers-blocked` · **Verificado por:** Verificação do site · **Esforço:** pequeno

**O que significa:** `robots.txt` bloqueia um ou mais dos rastreadores que buscam páginas para respostas de IA com busca: OAI-SearchBot (busca do ChatGPT), Claude-SearchBot (Claude) e PerplexityBot (Perplexity). O problema diz quais. Esses produtos não conseguem ler o site, então não podem citá-lo nem apontar para ele. Isso é diferente dos rastreadores de treino (GPTBot, ClaudeBot, Google-Extended): bloquear esses só deixa as suas páginas fora do treino futuro de modelos, e muitos sites bloqueiam os dois grupos de uma vez sem querer. Bloqueios feitos na CDN, como um interruptor de bloqueio de bots, não estão no robots.txt e não são verificados aqui.

**Como corrigir:** Se você quer aparecer nas respostas de IA, remova as linhas `Disallow` dos rastreadores citados, ou dê a cada um o próprio grupo com `Allow: /`, por exemplo `User-agent: OAI-SearchBot` seguido de `Allow: /`. Você pode continuar bloqueando GPTBot, ClaudeBot e Google-Extended se não quiser o conteúdo usado em treino. Se o bloqueio for de propósito, ignore este problema.

**Orientação oficial:** [developers.openai.com/api/docs/bots](https://developers.openai.com/api/docs/bots)

### robots.txt bloqueia rastreadores de IA [#ai-crawler-blocked]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `ai-crawler-blocked` · **Verificado por:** Verificação do site · **Esforço:** pequeno

**O que significa:** `robots.txt` impede que um ou mais rastreadores de IA leiam a página inicial. Os de busca e resposta (OAI-SearchBot, Claude-SearchBot, PerplexityBot) são um aviso importante: esses produtos não conseguem ler o site. Os de treinamento (GPTBot, ClaudeBot, Google-Extended e similares, como Applebot-Extended e CCBot) são só um aviso: bloqueá-los deixa as páginas fora do treinamento futuro e, sozinho, não tira o site das respostas de IA. O aviso diz quais. Uma recusa por Content-Signal é outra verificação. Bloqueios no CDN não estão no robots.txt e não são verificados aqui.

**Como corrigir:** Se você quer o site nas respostas de IA, remova o `Disallow` dos rastreadores de busca que o aviso cita, ou dê a cada um um grupo com `Allow: /`. Você pode continuar bloqueando os de treinamento; isso continua um aviso. Se o bloqueio é de propósito, ignore este aviso.

**Orientação oficial:** [developers.openai.com/api/docs/bots](https://developers.openai.com/api/docs/bots)

### O site pede aos mecanismos de resposta de IA para não usarem as páginas [#content-signal-blocks-ai-answers]

**Gravidade:** Alerta · **Dimensão:** Conteúdo e legibilidade para IA · **ID da regra:** `content-signal-blocks-ai-answers` · **Verificado por:** Verificação do site · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** `robots.txt` define `Content-Signal` de modo que o uso para busca ou como entrada de IA está desligado (`search=no` ou `ai-input=no`) para os rastreadores que buscam páginas para respostas de IA: OAI-SearchBot, Claude-SearchBot e PerplexityBot. Esses produtos são orientados a não usar as páginas nas respostas. Bloquear só o treinamento (`ai-train=no`) não gera este problema.

**Como corrigir:** Na linha `Content-Signal` que vale para `*` ou para esses rastreadores, defina `ai-input=yes` e `search=yes` se quiser permitir o uso das páginas. Você pode manter `ai-train=no`. Se a recusa for de propósito, ignore este problema.

**Orientação oficial:** [contentsignals.org](https://contentsignals.org/)

### Sitemap não encontrado [#sitemap-missing]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `sitemap-missing` · **Verificado por:** Verificação do site · **Esforço:** pequeno

**O que significa:** sitemap.xml não responde e o robots.txt não indica um. Com tantas páginas, os rastreadores precisam achar cada URL pelos links.

**Como corrigir:** Gere um sitemap XML a partir das rotas ou do conteúdo e acrescente uma linha Sitemap ao robots.txt. Depois envie pelo Loomaly. Você não precisa abrir o Search Console.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### O sitemap deixa de fora páginas indexáveis [#sitemap-stale]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `sitemap-stale` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** O site tem sitemap e páginas indexáveis encontradas no rastreio não estão nele. Barra final, www ou query não são outra página.

**Como corrigir:** Gere o sitemap da mesma fonte das rotas ou do conteúdo para as páginas novas entrarem sozinhas. Não acrescente URLs à mão. Deixe de fora login e app.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### O sitemap não é XML válido [#sitemap-invalid]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `sitemap-invalid` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** Um endereço de sitemap responde com algo que não é um sitemap: em geral a própria página do site, servida por uma rota catch-all, ou um 404 onde o robots.txt diz que há um sitemap. Os rastreadores não recebem uma lista de URLs.

**Como corrigir:** Sirva o sitemap como XML (`<urlset>` ou `<sitemapindex>`) com tipo de conteúdo XML, e aponte o robots.txt só para URLs de sitemap que existem.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### O sitemap lista páginas que não são a versão a indexar [#sitemap-lists-non-canonical]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `sitemap-lists-non-canonical` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** O sitemap lista URLs que não são a versão que o Google deve indexar: elas declaram outra URL como canonical, redirecionam para outra página ou respondem com erro. O problema diz quantas, com exemplos (um redirecionamento mostra para onde vai). O Google confia menos em um sitemap quando ele discorda das páginas.

**Como corrigir:** Gere o sitemap a partir da mesma fonte das tags canonical, liste só URLs que respondem 200 sem redirecionar e apontam o canonical para si mesmas, e substitua caminhos antigos pelos endereços para os quais redirecionam.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### Canonicals apontam para endereços que redirecionam ou falham [#canonical-target-broken]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `canonical-target-broken` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** Algumas páginas nomeiam uma URL canonical (a versão que os mecanismos de busca devem indexar) que ela mesma redireciona ou responde com erro. O problema lista cada endereço assim e o que ele respondeu, e quantas páginas o nomeiam. Os mecanismos de busca são enviados a um desvio ou a um beco sem saída, e podem ignorar o canonical ou descartar a página.

**Como corrigir:** Aponte cada canonical para o endereço final que responde 200: em geral a própria página, ou o lugar para o qual o endereço antigo agora redireciona. Canonicals em geral são definidos em um modelo compartilhado ou na configuração de um plugin de SEO.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### Site mobile separado sem rel="alternate" [#mobile-site-not-annotated]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `mobile-site-not-annotated` · **Verificado por:** Verificação do site · **Esforço:** médio

**O que significa:** Celulares, inclusive o rastreador de smartphone do Googlebot, são redirecionados para um site mobile separado em outro host (o problema o nomeia). O Google pede que o par seja declarado nos dois sentidos: o canonical da página mobile aponta para a página desktop, e a página desktop tem um link `rel="alternate"` com um atributo `media` apontando para a página mobile. A página desktop não tem esse link.

**Como corrigir:** Em cada página desktop, adicione `<link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.your-site/...">` para a URL mobile dela, e mantenha o canonical da página mobile apontando de volta. Ou sirva um único site responsivo em um endereço.

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing](https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing)

### Outras versões do endereço não redirecionam de forma permanente [#host-variants-not-redirected]

**Gravidade:** Alerta · **Dimensão:** Indexabilidade · **ID da regra:** `host-variants-not-redirected` · **Verificado por:** Verificação do site · **Esforço:** pequeno

**O que significa:** O seu site responde em mais de um endereço: a versão `http://`, ou a versão com ou sem `www.`, ou mostra o próprio site ou encaminha os visitantes com um redirecionamento temporário (302 ou 307). O problema lista cada endereço e o que ele respondeu. Os mecanismos de busca então podem tratá-los como sites separados e dividir links e sinais entre eles.

**Como corrigir:** Faça cada outra versão responder com um redirecionamento permanente (301 ou 308) direto para o seu endereço principal, por exemplo nas configurações de domínio do host ou da CDN (na Cloudflare: **Always Use HTTPS** e uma regra de redirecionamento para o outro host).

**Orientação oficial:** [developers.google.com/search/docs/crawling-indexing/301-redirects](https://developers.google.com/search/docs/crawling-indexing/301-redirects)

### Favicon ausente [#missing-favicon]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-favicon` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** A página não declara um favicon. O Google o mostra ao lado do seu resultado, e os navegadores o mostram em abas e favoritos.

**Como corrigir:** Adicione `<link rel="icon" href="/favicon.ico">` (ou um ícone PNG ou SVG) ao `<head>`.

**Orientação oficial:** [developers.google.com/search/docs/appearance/favicon-in-search](https://developers.google.com/search/docs/appearance/favicon-in-search)

### A página retornou status diferente de 200 [#non-200-status]

**Gravidade:** Erro · **Dimensão:** Indexabilidade · **ID da regra:** `non-200-status` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** A página responde com um status de erro (depois de seguir quaisquer redirecionamentos), o que a tira da indexação normal. O problema mostra o código de status.

**Como corrigir:** Se a página deve existir, corrija o erro de servidor ou restaure a página. Se foi removida de propósito, redirecione para uma substituta, ou remova os links para ela e tire-a do sitemap.

**Orientação oficial:** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

## Desempenho [#category-performance]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Largest Contentful Paint acima de 2.5s](#cwv-lcp-poor) | Alerta | Desempenho | Teste de desempenho |
| [Interaction to Next Paint acima de 200ms](#cwv-inp-poor) | Alerta | Desempenho | Teste de desempenho |
| [Cumulative Layout Shift acima de 0.1](#cwv-cls-poor) | Alerta | Desempenho | Teste de desempenho |
| [Time to First Byte acima de 800ms](#cwv-ttfb-slow) | Alerta | Desempenho | Teste de desempenho |
| [Pontuação de Performance do Lighthouse abaixo de 50](#lighthouse-perf-low) | Alerta | Desempenho | Teste de desempenho |
| [Imagem do LCP sem carregamento prioritário](#lcp-image-no-fetchpriority) | Alerta | Desempenho | Teste de desempenho |

### Largest Contentful Paint acima de 2.5s [#cwv-lcp-poor]

**Gravidade:** Alerta · **Dimensão:** Desempenho · **ID da regra:** `cwv-lcp-poor` · **Verificado por:** Teste de desempenho · **Esforço:** grande

**O que significa:** O Largest Contentful Paint, o tempo até o conteúdo principal ficar visível, passa de 2.5 segundos no celular. O Loomaly usa dados reais de usuários do Chrome quando a página tem tráfego suficiente e, caso contrário, uma medição de laboratório.

**Como corrigir:** Encontre o elemento que o Lighthouse mede como LCP e para onde o tempo vai. Para texto, remova CSS e JavaScript que bloqueiam a renderização, faça preload da fonte web e use `font-display`, e renderize no servidor. Para uma imagem, faça ela carregar primeiro (`fetchpriority="high"`, sem lazy loading, no HTML inicial) e sirva em um formato moderno no tamanho certo. Uma resposta lenta do servidor atrasa os dois.

**Orientação oficial:** [web.dev/articles/lcp](https://web.dev/articles/lcp)

### Interaction to Next Paint acima de 200ms [#cwv-inp-poor]

**Gravidade:** Alerta · **Dimensão:** Desempenho · **ID da regra:** `cwv-inp-poor` · **Verificado por:** Teste de desempenho · **Esforço:** grande

**O que significa:** O Interaction to Next Paint, a rapidez com que a página reage a toques e cliques, passa de 200 ms no celular. Isso só é reportado a partir de dados de usuários reais, então aparece em páginas com tráfego suficiente no Chrome.

**Como corrigir:** Quebre tarefas longas de JavaScript, adie scripts que não são necessários na hora e reduza ou atrase scripts de terceiros.

**Orientação oficial:** [web.dev/articles/inp](https://web.dev/articles/inp)

### Cumulative Layout Shift acima de 0.1 [#cwv-cls-poor]

**Gravidade:** Alerta · **Dimensão:** Desempenho · **ID da regra:** `cwv-cls-poor` · **Verificado por:** Teste de desempenho · **Esforço:** médio

**O que significa:** O Cumulative Layout Shift, o quanto a página pula enquanto carrega, passa de 0.1 no celular.

**Como corrigir:** Defina `width` e `height` em imagens e embeds, reserve espaço para anúncios e banners e evite inserir conteúdo acima do que já está na tela.

**Orientação oficial:** [web.dev/articles/cls](https://web.dev/articles/cls)

### Time to First Byte acima de 800ms [#cwv-ttfb-slow]

**Gravidade:** Alerta · **Dimensão:** Desempenho · **ID da regra:** `cwv-ttfb-slow` · **Verificado por:** Teste de desempenho · **Esforço:** grande

**O que significa:** O Time to First Byte, o tempo que o servidor leva para começar a responder, passa de 800 ms. Todo o resto da página espera por ele.

**Como corrigir:** Coloque as páginas em cache na borda com uma CDN, acelere o servidor ou a hospedagem, ative compressão e evite redirecionamentos antes da página.

**Orientação oficial:** [web.dev/articles/ttfb](https://web.dev/articles/ttfb)

### Pontuação de Performance do Lighthouse abaixo de 50 [#lighthouse-perf-low]

**Gravidade:** Alerta · **Dimensão:** Desempenho · **ID da regra:** `lighthouse-perf-low` · **Verificado por:** Teste de desempenho · **Esforço:** grande

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** A pontuação de performance do Lighthouse no celular, do Google PageSpeed Insights, está abaixo de 50. Isso em geral significa vários gargalos ao mesmo tempo.

**Como corrigir:** Resolva primeiro os problemas de performance específicos reportados para a mesma página; o relatório do PageSpeed Insights da URL lista mais oportunidades.

**Orientação oficial:** [developer.chrome.com/docs/lighthouse/performance/performance-scoring](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring)

### Imagem do LCP sem carregamento prioritário [#lcp-image-no-fetchpriority]

**Gravidade:** Alerta · **Dimensão:** Desempenho · **ID da regra:** `lcp-image-no-fetchpriority` · **Verificado por:** Teste de desempenho · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** O PageSpeed Insights encontrou que o maior elemento da página é uma imagem que o navegador não busca primeiro. Em um `<img>`, isso significa ausência de `fetchpriority="high"`, lazy loading, ou uma imagem que só aparece depois que um script roda. Em um fundo CSS o elemento não é um `<img>`, então `fetchpriority` nele não faz nada. Corrigir a requisição muitas vezes tira de 200 a 500 ms do LCP.

**Como corrigir:** Se o elemento for um `<img>`, dê a ele `fetchpriority="high"`, remova `loading="lazy"` e coloque-o no HTML que o servidor envia. Se for um fundo CSS em outro elemento, não adicione `fetchpriority` a esse elemento: faça preload da imagem com `<link rel="preload" as="image" fetchpriority="high">`, ou renderize como um `<img>`.

**Orientação oficial:** [web.dev/articles/fetch-priority](https://web.dev/articles/fetch-priority)

## Internacional [#category-international]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Hreflang sem autorreferência](#hreflang-self-referential-missing) | Alerta | Fundamentos da página | Verificação de regras |
| [hreflang x-default ausente](#hreflang-x-default-missing) | Aviso | Fundamentos da página | Verificação de regras |

### Hreflang sem autorreferência [#hreflang-self-referential-missing]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `hreflang-self-referential-missing` · **Verificado por:** Verificação de regras · **Esforço:** médio

**O que significa:** A página lista as outras versões de idioma em hreflang, mas não a si mesma. Cada conjunto de hreflang precisa incluir a URL da própria página.

**Como corrigir:** Adicione uma entrada hreflang para o idioma da própria página que aponte para a URL dela.

**Orientação oficial:** [developers.google.com/search/docs/specialty/international/localized-versions](https://developers.google.com/search/docs/specialty/international/localized-versions)

### hreflang x-default ausente [#hreflang-x-default-missing]

**Gravidade:** Aviso · **Dimensão:** Fundamentos da página · **ID da regra:** `hreflang-x-default-missing` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

**O que significa:** O conjunto de hreflang não tem `x-default`, a versão de reserva para visitantes cujo idioma você não oferece.

**Como corrigir:** Adicione `hreflang="x-default"` apontando para o seletor de idioma ou a versão padrão.

**Orientação oficial:** [developers.google.com/search/docs/specialty/international/localized-versions](https://developers.google.com/search/docs/specialty/international/localized-versions)

## Acessibilidade [#category-accessibility]

| Regra | Gravidade | Dimensão | Verificado por |
| --- | --- | --- | --- |
| [Atributo lang ausente em `<html>`](#missing-html-lang) | Alerta | Fundamentos da página | Verificação de regras |

### Atributo lang ausente em `<html>` [#missing-html-lang]

**Gravidade:** Alerta · **Dimensão:** Fundamentos da página · **ID da regra:** `missing-html-lang` · **Verificado por:** Verificação de regras · **Esforço:** pequeno

> Boa prática, não uma exigência do Google: sozinha, ela não decide o posicionamento.

**O que significa:** O elemento `<html>` não tem o atributo `lang`, então leitores de tela e ferramentas de tradução não sabem em que idioma a página está.

**Como corrigir:** Defina o código de idioma da página, por exemplo `<html lang="en">`, `lang="de"` ou `lang="zh-CN"`.

**Orientação oficial:** [developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/lang](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/lang)
