> ## Documentation Index
> Fetch the complete documentation index at: https://docs.querying.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# GEO Score: veja quanto de uma página a busca do ChatGPT guarda

> Pontue uma página pela parte do que uma pessoa lê nela que a busca do ChatGPT guarda e que o ChatGPT recebe ao abrir a página, e veja o que segura o resto: robots.txt, um rastreador recusado, conteúdo carregado depois que a página abre e texto dentro de imagens.

Use o GEO Score para verificar uma página que você quer que o ChatGPT cite. A pontuação é a parte do que uma pessoa lê
na página, incluindo o texto dentro das imagens, que a busca do ChatGPT guarda na cópia que tem da página. `direct` dá a
parte que o ChatGPT recebe quando ele mesmo abre a página, como quando alguém lhe passa a URL. Cada trecho que a busca do
ChatGPT não guarda vem com a causa, e `analysis` transforma as causas em correções.

## Pontuar uma página

```bash theme={"theme":"css-variables"}
curl -X POST https://api.querying.ai/v1/geo-score \
  -H "Authorization: Bearer $QUERYING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://global.oliveyoung.com/product/detail?prdtNo=GA240322874", "country": "US" }'
```

A tarefa é aceita e entra na fila:

```json theme={"theme":"css-variables"}
{
  "success": true,
  "task": {
    "id": "0b6c1f7e-...",
    "taskType": "GEO_SCORE",
    "status": "QUEUED",
    "priority": 1,
    "createdAt": "2026-10-21T09:00:00.000Z"
  },
  "credits": { "creditsToCharge": 0, "creditsCharged": 0 }
}
```

Leia o resultado com `GET /v1/async/task/{id}`, ou adicione `webhook.url` à solicitação e receba-o quando a tarefa
terminar. A maioria das páginas leva de 1 a 3 minutos, então consulte a cada 10 a 15 segundos. A tarefa funciona como
qualquer outra [tarefa assíncrona](/pt/concepts/async-tasks.md), e o resultado fica em `response`. O esquema da
solicitação está na [referência da API](/pt/api-reference/geo-score.md).

## Campos da solicitação

| Campo | Obrigatório | Descrição |
| - | - | - |
| `url` | Sim | A página a pontuar: uma URL `http` ou `https` em um host público e na porta padrão, com até 2.048 caracteres. |
| `country` | Não | Onde está o leitor: `US` (padrão) ou `KR`. A página é renderizada a partir de um endereço nesse país, no idioma e no fuso horário dele. |
| `idempotencyKey` | Não | Torna seguro repetir um envio. Veja [Idempotência](/pt/concepts/idempotency.md). |
| `priority` | Não | Inteiro de `1` a `10`, padrão `1`. Valores fora do intervalo são ajustados ao limite. Ecoado nos metadados da tarefa; não garante a ordem de execução. Veja [Tarefas assíncronas](/pt/concepts/async-tasks.md). |
| `webhook.url` | Não | Para onde enviar por POST a tarefa concluída. Veja [Webhooks](/pt/concepts/webhooks.md). |

Qualquer outro campo retorna `400 VALIDATION_ERROR`.

## Como uma página é pontuada

1. **Acesso.** O robots.txt é avaliado para OAI-SearchBot, ChatGPT-User e GPTBot. A página é obtida como cada um deles e
   como um navegador, a partir de um endereço dos EUA, de onde o ChatGPT-User obtém as páginas.
2. **O que uma pessoa lê.** Um navegador em `country` renderiza a página e a rola até o fim, e o texto das imagens
   grandes é lido linha a linha. As linhas sobre o assunto próprio da página viram trechos. Menus, rodapés, outros
   produtos, avaliações de clientes, botões e anúncios ficam fora da pontuação.
3. **O que a busca do ChatGPT guarda.** Um navegador renderiza a página como OAI-SearchBot, o rastreador que alimenta a
   busca do ChatGPT, a partir de um endereço dos EUA, sem deixar sair nenhuma solicitação de dados. A cópia é o texto do
   HTML que o servidor envia e o texto que os scripts da página desenham a partir dele, incluindo o texto oculto e o
   texto alternativo das imagens. O texto dentro das imagens e o conteúdo que a página carrega depois de abrir não estão
   nela, assim como não estão na busca do ChatGPT.
4. **O que o ChatGPT recebe ao abrir a página.** O HTML que o ChatGPT-User recebe é lido como o leitor do ChatGPT o lê: o
   texto, o texto oculto e o texto alternativo das imagens, sem scripts. Uma imagem conta quando o ChatGPT consegue
   abri-la e lê-la: o HTML dá a imagem como `src` de um `img`, em JPEG, PNG ou WebP, num tamanho em que o texto continua
   legível.
5. **Se o ChatGPT abre a página.** O ChatGPT de produção é solicitado duas vezes a abrir a página. As respostas não são
   pontuadas: mostram apenas se ele abriu a página.
6. **Posição de cada trecho.** Um trecho é `read` quando a cópia da busca o contém, e `missing` com a causa caso
   contrário. `direct` o posiciona da mesma forma no que o ChatGPT recebe ao abrir a página. O código decide cada
   trecho, então uma página que não mudou recebe a mesma pontuação.

## Ler o resultado

A página da OLIVE YOUNG acima dá este resultado, reduzido aos campos principais:

```json theme={"theme":"css-variables"}
{
  "level": "url",
  "url": "https://global.oliveyoung.com/product/detail?prdtNo=GA240322874",
  "finalUrl": "https://global.oliveyoung.com/product/detail?prdtNo=GA240322874",
  "score": 29,
  "direct": { "score": 29, "read": 16 },
  "pageType": "product",
  "access": {
    "verdict": "open",
    "chatgpt": { "opened": true, "inSearch": false, "lines": 819, "searchedFor": [], "observedAt": "2026-10-21T17:35:37.050Z" },
    "search": { "refused": false, "lines": 1343 },
    "robots": {
      "OAI-SearchBot": { "allowed": true, "named": false },
      "ChatGPT-User": { "allowed": true, "named": false },
      "GPTBot": { "allowed": true, "named": false }
    },
    "noindex": { "noindex": false },
    "probes": [
      { "agent": "ChatGPT-User", "status": 200, "blocked": false },
      { "agent": "OAI-SearchBot", "status": 200, "blocked": false },
      { "agent": "browser", "status": 200, "blocked": false }
    ]
  },
  "reading": {
    "score": 29,
    "facts": 55,
    "read": 16,
    "locations": { "html": 16, "rendered_only": 13, "image": 26 },
    "items": [
      {
        "label": "COSRX Vitamin E Vitalizing Sunscreen SPF 50+",
        "value": "COSRX Vitamin E Vitalizing Sunscreen SPF 50+",
        "where": "html",
        "line": 1,
        "status": "read",
        "direct": { "status": "read" }
      },
      {
        "label": "US$24.00",
        "value": "US$24.00",
        "where": "rendered_only",
        "status": "missing",
        "reason": "javascript_only",
        "direct": { "status": "missing", "reason": "javascript_only" }
      },
      {
        "label": "Strong and effective sun protection",
        "value": "Strong and effective sun protection",
        "where": "image",
        "status": "missing",
        "reason": "image_only",
        "direct": { "status": "missing", "reason": "image_only" },
        "foundIn": "image https://cdn-image.oliveyoung.com/slicedImg/editor/1157/f9e08334-....jpg (no alt text): the HTML ChatGPT receives has no img with this picture as its src"
      }
    ]
  },
  "causes": [
    { "reason": "javascript_only", "labels": ["4.6", "21 review", "30%", "US$24.00", "US$16.80", "..."] },
    { "reason": "image_only", "labels": ["Strong and effective sun protection", "Key Ingredients", "..."] }
  ],
  "analysis": {
    "summary": "ChatGPT search keeps 16 of 55 facts of the page. The biggest issue: 26 facts are written only inside an image, among them Strong and effective sun protection; Key Ingredients; Tocopherol (Vitamin E) (47 points). Fixing the confirmed issues could raise the score to about 100.",
    "potential": 100,
    "direct": "When ChatGPT opens the page itself, as when a person gives it the URL, it receives 16 of 55 facts (score 29).",
    "issues": [
      {
        "code": "image_only",
        "basis": "confirmed",
        "points": 47,
        "title": "26 facts are written only inside an image",
        "detail": "People read these values in the page's image, but the HTML has no text for them. ChatGPT search keeps a page's text and its images' alt text, not the text inside its images.",
        "fix": "Write this content as text in the page's HTML, next to the image or in place of it (a size chart as a table, rules and notes as sentences), or at least in the image's alt text.",
        "facts": [{ "label": "Key Ingredients", "value": "Key Ingredients", "foundIn": "image https://cdn-image.oliveyoung.com/... (no alt text): the HTML ChatGPT receives has no img with this picture as its src" }],
        "evidence": ["image https://cdn-image.oliveyoung.com/... (no alt text): the HTML ChatGPT receives has no img with this picture as its src"]
      },
      { "code": "javascript_only", "basis": "confirmed", "points": 24, "title": "13 facts are loaded only after the page opens", "...": "..." }
    ]
  },
  "reference": "rendered"
}
```

### `score`

A parte dos trechos que a busca do ChatGPT guarda, de 0 a 100. Todos os trechos têm o mesmo peso. A pontuação é 0 quando
o robots.txt deixa a página fora da busca do ChatGPT e quando o site recusa o rastreador da busca do ChatGPT.
`reading.score` mantém a parte de antes de o robots.txt levar a pontuação a 0.

### `direct`

O que o ChatGPT recebe quando ele mesmo abre a página, como quando alguém lhe passa a URL. `direct.score` é a parte dos
trechos que estão no HTML que o ChatGPT-User recebe e nas imagens que o ChatGPT consegue abrir, e `direct.read` os conta.
É 0 quando o ChatGPT não conseguiu abrir a página. As duas pontuações se separam onde a página escreve texto em imagens
ou o desenha com scripts: a busca do ChatGPT não guarda texto dentro de imagens e guarda o que os scripts desenham a
partir do HTML, enquanto o leitor do ChatGPT abre as imagens que consegue ler e não executa scripts. Uma página de
produto de supermercado cuja tabela nutricional é um JPEG em tamanho original teve 56 na busca e 93 ao ser aberta
diretamente.

### `access`

| `verdict` | Significado |
| - | - |
| `open` | O ChatGPT abriu a página. `chatgpt.lines` é o número de linhas que o leitor dele obteve. |
| `search_only` | O ChatGPT não conseguiu abrir a página e só a encontrou nos resultados de busca. `direct.score` é 0. |
| `blocked` | O ChatGPT não conseguiu abrir a página nem a encontrou na busca. `direct.score` é 0, e `blockedBy` indica quem recusou. |
| `search_opt_out` | O robots.txt deixa a página fora da busca do ChatGPT, então a pontuação é 0. |

`search.refused` é `true` quando o site recusa o rastreador da busca do ChatGPT, o que prende a pontuação em 0, e
`search.lines` conta as linhas da cópia da busca. `blockedBy` é `user_agent` quando o site recusa o agente ChatGPT-User
de qualquer endereço, `openai_addresses` quando atende esse agente a partir do nosso endereço e recusa os da OpenAI, e
`site` quando recusa também um navegador. `robots` traz a linha do robots.txt que decide para cada agente da OpenAI,
`noindex` informa uma diretiva noindex e onde ela foi definida, e `probes` lista o status que cada requisição recebeu.

### `reading.items[]`

Uma entrada por trecho:

| Campo | Descrição |
| - | - |
| `label`, `value` | O trecho como a página o mostra. |
| `where` | Onde a página o tem: `html`, `structured_data`, `script`, `rendered_only`, `frame` ou `image`. `rendered_only` está na página renderizada e em nenhum HTML que o ChatGPT recebe. |
| `status` | `read` quando a busca do ChatGPT o guarda, ou `missing`. |
| `reason` | Por que a busca do ChatGPT não o guarda (abaixo). |
| `direct` | `status` e `reason` para o que o ChatGPT recebe ao abrir a página. |
| `rendering` | `status` na cópia da página para agentes de IA: `read` quando a cópia tem o trecho no seu texto. |
| `foundIn` | Onde a página tem um trecho ausente, como uma linha do HTML, ou a URL de uma imagem e o motivo de o ChatGPT não conseguir lê-la. |

`reading.locations` conta os trechos por `where` e mostra o que falta corrigir depois que o ChatGPT consegue abrir a
página. `causes[]` agrupa os trechos ausentes por causa.

| `reason` | Significado | Correção |
| - | - | - |
| `blocked` | O site recusa o rastreador da busca do ChatGPT. Em `direct`, o trecho está no HTML ou numa imagem que o ChatGPT consegue ler, e o ChatGPT não conseguiu abrir a página. | Libere o OAI-SearchBot e o ChatGPT-User, pelo user agent e pelos endereços publicados pela OpenAI. |
| `javascript_only` | A página carrega o trecho depois de abrir. Em `direct`, o trecho só aparece depois que os scripts rodam. | Coloque-o no HTML que o servidor envia, renderizado no servidor ou no build. |
| `structured_data_only` | Só está em JSON-LD ou em tags meta. | Mostre-o também no texto da página. |
| `image_only` | O trecho só está escrito dentro de uma imagem, e a busca do ChatGPT não guarda texto dentro de imagens. Em `direct`, o ChatGPT não consegue ler a imagem: o HTML não dá a imagem como `src` de um `img`, o `src` é um arquivo menor, ou ela chega em AVIF. | Escreva-o como texto no HTML ou no texto alternativo da imagem. |

### `analysis`

`summary` informa a pontuação, o maior problema e a pontuação com os problemas confirmados corrigidos (`potential`).
`direct` diz o que o ChatGPT recebe quando ele mesmo abre a página, ou quem o impede de abri-la e a correção. Cada
entrada de `issues[]` traz a causa (`detail`), a correção (`fix`), os trechos que ela custa (`facts`), as evidências e
os pontos que tira da pontuação. Os problemas de acesso que prendem a pontuação em 0 vêm primeiro, e o resto segue por
pontos. `basis` é `confirmed`: a nossa própria leitura da página (o HTML, as renderizações, as imagens, o robots.txt, as
respostas HTTP) mostra o problema. O texto de `analysis` está em inglês.

### `markdown`

A página como uma pessoa a vê, em Markdown, com o texto das imagens no lugar das imagens. O conteúdo próprio da página,
que a pontuação verifica, aparece sob os seus títulos e rótulos. Os menus, as avaliações e as outras partes ao redor
ficam recolhidos numa linha cada. Cada trecho que a busca do ChatGPT não guarda é marcado no seu lugar com
`_(missing: …)_` e o motivo, e o cabeçalho informa quantos trechos o ChatGPT recebe ao abrir a página. O cabeçalho e as
marcas ficam na língua da página: inglês, coreano, japonês, chinês, espanhol, francês, alemão ou português, e inglês
para qualquer outra. Uma página em português mostra `_(ausente: …)_`. Um trecho da página da OLIVE YOUNG, que está em
inglês:

```markdown theme={"theme":"css-variables"}
4.6 _(missing: loaded after the page opens)_
21 review _(missing: loaded after the page opens)_
US$16.80 _(missing: loaded after the page opens)_

> **Text in image** f9e08334-9760-45c5-89bb-…66eb1752.jpg · 52 lines · ChatGPT search keeps 10 of its 37 pieces
>
> Strong and effective sun protection _(missing)_
> Key Ingredients _(missing)_
> Tocopherol (Vitamin E) _(missing)_

_Other items (112 lines), reviews and questions (90), site menus and notices (57), buttons and tabs (46): Most Helpful · filter · Best …_
```

### `screenshot`

As quatro primeiras telas da página como uma pessoa a vê, em JPEG: uma janela de 1366×900, capturada no topo depois
de rolar a página até o fim. `url` é a sua própria chave de acesso e abre o arquivo até `expiresAt`, 30 dias após
a tarefa. Uma página cuja imagem não pôde ser capturada vem sem `screenshot`, e uma imagem que não pôde ser salva
tem `status: "failed"`.

### `rendering`

A página renderizada para agentes de IA. A cópia é o HTML que o navegador de uma pessoa desenhou, sem scripts, com o
texto de cada imagem acrescentado ao seu texto alternativo, a alternativa em texto que a WCAG pede para uma imagem de
texto. `rendering.score` é a parcela dos trechos que a cópia tem no seu texto: o que recebe um agente de IA a quem a
cópia é servida, sem abrir nenhuma imagem. `rendering.read` os conta e `reading.items[].rendering` marca cada trecho;
a cópia em si não faz parte do resultado. A página da OLIVE YOUNG acima tem os seus 55 trechos na cópia,
uma pontuação de 100: o texto das imagens de ingredientes e de perguntas frequentes como texto alternativo, e os preços
e avaliações que os scripts carregam.

```json theme={"theme":"css-variables"}
{
  "screenshot": { "status": "ok", "url": "https://api.querying.ai/v1/evidence/1792627200-0f1e….jpg", "expiresAt": "2026-11-21T04:05:43.048Z" },
  "rendering": {
    "score": 100,
    "read": 55
  }
}
```

`rendering` não aparece quando nenhum navegador conseguiu mostrar a página ou o HTML desenhado é grande demais.

## Ler a pontuação corretamente

* A busca do ChatGPT trabalha com uma cópia da página feita pelo seu rastreador: o texto do HTML e o que os scripts
  desenham a partir dele, sem o texto dentro das imagens nem o que a página carrega depois de abrir. A cópia é do último
  rastreamento, então uma mudança só chega à busca do ChatGPT depois que o rastreador visita a página de novo.
* Quando o ChatGPT abre uma página por conta própria, ele lê o HTML que o servidor envia. Ele não executa scripts, lê o
  texto alternativo das imagens e só abre uma imagem pelo `src` do `img` que esse HTML dá. A OpenAI reutiliza por cerca
  de 30 minutos uma página que já abriu.
* A pontuação só muda quando a página ou a forma como ela é renderizada muda. De quinze páginas pontuadas três vezes
  cada, dez variaram 3 pontos ou menos. Uma página que mostra partes diferentes a cada visita varia mais.
* O GEO Score cobre o que o ChatGPT tem de uma página. Quais páginas a busca do ChatGPT escolhe para cada pergunta é o
  que os [monitores GEO](/pt/monitors.md) acompanham.

## Erros e cobrança

Uma tarefa concluída custa 10 créditos pela página e 5 por imagem cujo texto é lido, até 12 imagens: `images.read` no
resultado. Uma imagem que o host recusa ou que não pôde ser lida (`images.unread`) é gratuita. Se sua conta leu a mesma imagem nos últimos 90 dias, essa leitura é reutilizada (`images.reused`) por 2 créditos. O envio reserva 70
créditos, o máximo de uma página, e a conclusão cobra o que a tarefa usou. Uma tarefa que falha não é cobrada. Veja
[Créditos e limites](/pt/concepts/credits-and-limits.md).

### Recusas no envio

| Status | Código | Causa |
| - | - | - |
| `400` | `VALIDATION_ERROR` | O corpo não é um objeto JSON, tem um campo diferente dos acima, ou `idempotencyKey`, `priority` ou `webhook` tem o tipo errado. |
| `400` | `USE_DEDICATED_ENDPOINT` | `GEO_SCORE` foi enviado para `/v1/async/task`. |
| `402` | `INSUFFICIENT_CREDITS` | O saldo é menor que 70 créditos, o máximo de uma página. |
| `409` | `RESOURCE_ALREADY_EXISTS` | Já existe uma tarefa com este `idempotencyKey`. |
| `422` | `VALIDATION_ERROR` | `url` está ausente, não é `http` nem `https`, ou aponta para um host ou porta privados. `details` indica o campo. |
| `422` | `REGION_UNSUPPORTED` | `country` não é `US` nem `KR`. |

Os erros de autenticação, concorrência e taxa são os mesmos de qualquer tarefa. Veja [Erros](/pt/concepts/errors.md).

### Tarefas com falha

Uma tarefa com falha tem `status: "FAILED"` e uma string `error` que começa pelo código:

```json theme={"theme":"css-variables"}
{
  "success": true,
  "task": { "id": "0b6c1f7e-...", "taskType": "GEO_SCORE", "status": "FAILED", "...": "..." },
  "credits": { "creditsToCharge": 0, "creditsCharged": 0 },
  "error": "PAGE_UNAVAILABLE: No browser could show the page (bot wall)"
}
```

| Código | Significado | O que fazer |
| - | - | - |
| `PAGE_UNAVAILABLE` | Um navegador não conseguiu mostrar a página como uma pessoa a vê ou como o rastreador da busca do ChatGPT a recebe: uma verificação antibot, um status de erro ou uma página que não existe. A mensagem traz o motivo. | Verifique se a URL abre em um navegador. A mesma URL falha de novo do mesmo jeito. |
| `CHATGPT_UNAVAILABLE` | O ChatGPT não respondeu a tempo nenhum dos pedidos para abrir a página. | Envie a tarefa de novo. |
| `NO_IP_AVAILABLE` | Não havia capacidade disponível a tempo. | Tente de novo mais tarde. |
| Qualquer outro código | Não foi possível pontuar a página. | Tente de novo. |

## Próximos passos

> **[Citation Analysis](/pt/research/citation-analysis.md)**
>
> Veja quais fontes moldaram uma resposta.

> **[Monitores GEO](/pt/monitors.md)**
>
> Acompanhe sua marca nos motores de IA em uma programação.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.