> ## 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：查看 ChatGPT 搜索保留了页面的多少内容

> 为单个页面打分：人在页面上读到的内容中，ChatGPT 搜索保留了多少、ChatGPT 打开页面时收到多少，并指出其余内容被挡住的原因：robots.txt、被拒绝的爬虫、页面打开后才加载的内容和图片中的文字。

用 GEO Score 检查你希望 ChatGPT 引用的页面。分数是人在该页面上读到的内容（包括图片中的文字）中，ChatGPT 搜索
所持有的该页面副本里包含的比例。`direct` 是像有人给出 URL 时那样，ChatGPT 自己打开页面时收到的比例。ChatGPT
搜索遗漏的每个片段都附有原因，`analysis` 会把原因整理成修复方法。

## 为页面打分

```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" }'
```

任务被接受并进入队列：

```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 }
}
```

用 `GET /v1/async/task/{id}` 读取结果，或在请求中加入 `webhook.url`，在任务完成时接收结果。大多数页面需要 1 到
3 分钟，因此每 10 到 15 秒轮询一次。它与其他[异步任务](/zh/concepts/async-tasks.md)的工作方式相同，结果在 `response` 中。
请求结构见 [API 参考](/zh/api-reference/geo-score.md)。

## 请求字段

| 字段 | 必填 | 说明 |
| - | - | - |
| `url` | 是 | 要打分的页面：公开主机、默认端口上的 `http` 或 `https` URL，最多 2,048 个字符。 |
| `country` | 否 | 读者所在的国家：`US`（默认）或 `KR`。页面从该国家的地址、以该国家的语言和时区渲染。 |
| `idempotencyKey` | 否 | 让重试提交变得安全。见[幂等性](/zh/concepts/idempotency.md)。 |
| `priority` | 否 | 整数 `1`–`10`，默认 `1`。超出范围的值会被截断到范围内。会回显在任务元数据中，但不保证执行顺序。见[异步任务](/zh/concepts/async-tasks.md)。 |
| `webhook.url` | 否 | 任务完成后 POST 到的地址。见 [Webhooks](/zh/concepts/webhooks.md)。 |

其他字段返回 `400 VALIDATION_ERROR`。

## 打分方式

1. **访问。** 分别为 OAI-SearchBot、ChatGPT-User 和 GPTBot 判定 robots.txt。从 ChatGPT-User 抓取页面所用的美国
   地址，以各个代理和浏览器的身份获取页面。
2. **人读到的内容。** `country` 的浏览器渲染页面并滚动到底，逐行读取大图片中的文字。关于页面自身主题的行成为
   片段。菜单、页脚、其他商品、顾客评论、按钮和广告不计入分数。
3. **ChatGPT 搜索保留的内容。** 美国地址的浏览器以 OAI-SearchBot（为 ChatGPT 搜索抓取内容的爬虫）的身份渲染页面，
   不放出任何数据请求。副本是服务器发送的 HTML 的文本，加上页面脚本用这份 HTML 绘制的文本，包括隐藏文本和图片的
   alt 文本。图片中的文字和页面打开后才加载的内容不在 ChatGPT 搜索中，也不在这份副本中。
4. **ChatGPT 打开页面时收到的内容。** 按 ChatGPT 阅读器的方式读取 ChatGPT-User 收到的 HTML：正文文本、隐藏文本和
   图片 alt 文本，不运行脚本。只有 ChatGPT 能打开并读取的图片才计入：HTML 以 `img` src 给出该图片，格式为 JPEG、
   PNG 或 WebP，且尺寸足以看清文字。
5. **ChatGPT 是否打开页面。** 向生产环境的 ChatGPT 请求两次打开页面。不给回答打分，只看它是否打开了页面。
6. **判定每个片段。** 搜索副本中有的片段为 `read`，没有的为 `missing` 并附原因。`direct` 用 ChatGPT 打开页面时
   收到的内容做同样的判定。所有片段都由代码判定，因此没有变化的页面得到相同的分数。

## 读取结果

上面的 OLIVE YOUNG 页面的结果，只保留主要字段如下：

```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`

ChatGPT 搜索保留的片段比例，从 0 到 100。每个片段权重相同。robots.txt 把页面排除在 ChatGPT 搜索之外时，以及网站
拒绝 ChatGPT 搜索的爬虫时，分数为 0。`reading.score` 保留 robots.txt 把分数设为 0 之前的比例。

### `direct`

像有人给出 URL 时那样，ChatGPT 自己打开页面时收到的内容。`direct.score` 是 ChatGPT-User 收到的 HTML 和 ChatGPT
能打开的图片中所含片段的比例，`direct.read` 是其数量。ChatGPT 打不开页面时为 0。页面把文字写在图片里或用脚本
绘制时，两个分数会分开：ChatGPT 搜索不保留图片中的文字，但保留脚本用 HTML 绘制的内容；ChatGPT 的阅读器会打开
能读取的图片，但不运行脚本。一个营养成分标签为原尺寸 JPEG 的食品商品页面，搜索得 56 分，直接打开得 93 分。

### `access`

| `verdict` | 含义 |
| - | - |
| `open` | ChatGPT 打开了页面。`chatgpt.lines` 是它的阅读器从页面得到的行数。 |
| `search_only` | ChatGPT 打不开页面，只在搜索结果中找到了它。`direct.score` 为 0。 |
| `blocked` | ChatGPT 打不开页面，也没在搜索中找到它。`direct.score` 为 0，`blockedBy` 指出拒绝的一方。 |
| `search_opt_out` | robots.txt 把页面排除在 ChatGPT 搜索之外，因此分数为 0。 |

网站拒绝 ChatGPT 搜索的爬虫时，`search.refused` 为 `true`，分数为 0。`search.lines` 是搜索副本的行数。
`blockedBy` 在网站从任何地址都拒绝 ChatGPT-User 代理时为 `user_agent`，接受来自我们地址的该代理但拒绝 OpenAI
地址时为 `openai_addresses`，连浏览器也拒绝时为 `site`。`robots` 给出为每个 OpenAI 代理作出判定的 robots.txt
行，`noindex` 报告 noindex 指令及其设置位置，`probes` 列出每次请求收到的状态。

### `reading.items[]`

每个片段一项：

| 字段 | 说明 |
| - | - |
| `label`, `value` | 页面上显示的片段原文。 |
| `where` | 片段在页面中的位置：`html`、`structured_data`、`script`、`rendered_only`、`frame` 或 `image`。`rendered_only` 只在渲染后的页面上，不在 ChatGPT 收到的任何 HTML 中。 |
| `status` | ChatGPT 搜索保留时为 `read`，否则为 `missing`。 |
| `reason` | ChatGPT 搜索遗漏它的原因（见下）。 |
| `direct` | ChatGPT 打开页面时是否收到它的 `status` 和 `reason`。 |
| `rendering` | 在面向 AI 代理的副本中的 `status`：副本文本包含该片段时为 `read`。 |
| `foundIn` | 遗漏的片段在页面中的位置，例如 HTML 的某一行，或图片 URL 以及 ChatGPT 读不了该图片的原因。 |

`reading.locations` 按 `where` 统计片段，显示 ChatGPT 能打开页面之后仍需修复的问题。`causes[]` 按原因归组遗漏的片段。

| `reason` | 含义 | 修复方法 |
| - | - | - |
| `blocked` | 网站拒绝 ChatGPT 搜索的爬虫。在 `direct` 中：片段在 HTML 或 ChatGPT 能读取的图片中，但 ChatGPT 打不开页面。 | 按用户代理和 OpenAI 公布的地址放行 OAI-SearchBot 和 ChatGPT-User。 |
| `javascript_only` | 页面打开后才加载的片段。在 `direct` 中：只有脚本运行后才显示的片段。 | 在服务器端或构建时渲染，放进服务器发送的 HTML。 |
| `structured_data_only` | 只在 JSON-LD 或 meta 标签中。 | 也在页面正文中显示。 |
| `image_only` | 只以文字形式写在图片里，而 ChatGPT 搜索不保留图片中的文字。在 `direct` 中：ChatGPT 读不了该图片，因为 HTML 没有以 `img` src 给出该图片、src 是更小的文件，或以 AVIF 格式提供。 | 写成 HTML 文本或图片的 alt 文本。 |

### `analysis`

`summary` 说明分数、最大的问题，以及修复已确认问题后的分数（`potential`）。`direct` 说明 ChatGPT 自己打开页面时
收到什么，或者打不开时是谁阻止了它以及修复方法。`issues[]` 的每一项包含原因（`detail`）、修复方法（`fix`）、因此
遗漏的片段（`facts`）、证据，以及它扣掉的分数。把分数卡在 0 的访问问题排在前面，其余按扣分多少排列。`basis` 为
`confirmed`，表示问题由我们自己读取页面（HTML、渲染、图片、robots.txt、HTTP 响应）确认。`analysis` 的文字是英文。

### `markdown`

人看到的页面整理成的 Markdown，图片中的文字放在图片所在的位置。分数检查的页面自身内容放在其标题和标签之下。
菜单、评论等内容周围的部分每段折叠成一行。ChatGPT 搜索遗漏的每个片段都在原位用 `_(missing: …)_` 标注原因，开头
还写出 ChatGPT 打开页面时收到的片段数。开头和标注使用页面的语言：英语、韩语、日语、中文、西班牙语、法语、德语或
葡萄牙语，其他语言用英语。中文页面写作 `_(缺失: …)_`。以下是英文 OLIVE YOUNG 页面的一段：

```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`

人看到的页面前四屏的 JPEG。在 1366×900 的窗口中把页面滚动到底后，回到顶部截取。`url` 本身就是访问密钥，在 `expiresAt`
（任务后 30 天）之前可以打开。无法截图的页面不含 `screenshot`，无法保存的截图为 `status: "failed"`。

### `rendering`

为 AI 代理渲染的页面。副本是人的浏览器绘制的 HTML，去掉脚本，并把每张图片里的文字加入其 alt，即 WCAG 对文字图片要求的替代文本。
`rendering.score` 是副本文本包含的片段比例，即收到副本的 AI 代理无需打开图片就能收到的内容。`rendering.read` 是这些片段的数量，
`reading.items[].rendering` 是每个片段的判定。副本本身不在结果中。上面的 OLIVE YOUNG 页面在副本中包含全部
55 个片段，得分 100：成分和 FAQ 图片中的文字进入 alt，脚本加载的价格和评分进入正文。

```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
  }
}
```

浏览器无法显示页面，或绘制的 HTML 过大时，没有 `rendering`。

## 正确解读分数

* ChatGPT 搜索依据其爬虫制作的页面副本工作：副本包含 HTML 的文本和脚本用这份 HTML 绘制的内容，不含图片中的文字
  和页面打开后才加载的内容。副本来自最近一次抓取，因此对页面的修改要在爬虫重新抓取页面之后才进入 ChatGPT 搜索。
* ChatGPT 自己打开页面时，读取服务器发送的 HTML。它不运行脚本，读取图片的 alt 文本，并且只通过该 HTML 给出的
  `img` src 打开图片。OpenAI 会把打开过的页面重复使用约 30 分钟。
* 只有页面或其渲染方式改变时，分数才会变化。15 个页面各打分三次，其中 10 个的差距在 3 分以内。每次访问绘制不同
  部分的页面变化更大。
* GEO Score 衡量 ChatGPT 拥有单个页面的多少内容。ChatGPT 搜索针对某个问题会选哪些页面，由
  [GEO 监控](/zh/monitors.md)追踪。

## 错误与计费

完成的任务按页面收取 10 积分，每读取一张图片中的文字再收 5 积分，最多 12 张（结果中的 `images.read`）。主机拒绝或无法读取的图片（`images.unread`）不收费。账户在 90 天内读取过同一图片时会复用该结果（`images.reused`），每张收 2 积分。提交时预留一个页面的上限 70 积分，任务完成时只扣除实际用量。失败的任务不扣费。见[积分与限制](/zh/concepts/credits-and-limits.md)。

### 提交时被拒绝

| 状态 | 代码 | 原因 |
| - | - | - |
| `400` | `VALIDATION_ERROR` | 请求体不是 JSON 对象，含有上面以外的字段，或 `idempotencyKey`、`priority`、`webhook` 的类型错误。 |
| `400` | `USE_DEDICATED_ENDPOINT` | 将 `GEO_SCORE` 发送到了 `/v1/async/task`。 |
| `402` | `INSUFFICIENT_CREDITS` | 余额少于一个页面的上限 70 积分。 |
| `409` | `RESOURCE_ALREADY_EXISTS` | 已存在使用该 `idempotencyKey` 的任务。 |
| `422` | `VALIDATION_ERROR` | `url` 缺失、不是 `http` 或 `https`，或指向私有主机或端口。`details` 会指出字段。 |
| `422` | `REGION_UNSUPPORTED` | `country` 不是 `US` 或 `KR`。 |

认证、并发和速率错误与其他任务相同。见[错误](/zh/concepts/errors.md)。

### 失败的任务

失败的任务为 `status: "FAILED"`，`error` 字符串以代码开头：

```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)"
}
```

| 代码 | 含义 | 处理方法 |
| - | - | - |
| `PAGE_UNAVAILABLE` | 没有浏览器能显示人看到的页面或 ChatGPT 搜索爬虫的副本：机器人检查、错误状态或页面不存在。消息中给出原因。 | 确认该 URL 能在浏览器中打开。同一 URL 会以同样的原因再次失败。 |
| `CHATGPT_UNAVAILABLE` | ChatGPT 未能按时回答任何打开页面的请求。 | 重新发送任务。 |
| `NO_IP_AVAILABLE` | 未能按时获得可用容量。 | 稍后重试。 |
| 其他代码 | 无法为页面打分。 | 重试。 |

## 下一步

> **[Citation Analysis](/zh/research/citation-analysis.md)**
>
> 查看哪些来源塑造了一条回答。

> **[GEO 监控](/zh/monitors.md)**
>
> 按计划在各 AI 引擎上追踪你的品牌。


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