跳到正文
Moz Blog· Zach Chahalis·· 14 天前精选AI 评分78

如何通过分析服务器日志优化 AI 搜索可访问性

How To Analyze Server Logs for AI Search

AI 导读

文章提出了面向 AI 搜索的服务器日志分析六步框架,指导团队排查 AI 智能体抓取超时、防火墙拦截与客户端渲染空壳等技术问题。指南强调通过 IP 和签名验证真实 Bot 身份,并重点监控代表客户端主动断开连接的 499 状态码与未命中缓存请求。相关数据分析显示,OpenAI 抓取经常超时的页面所获得的 AI 引用量比正常页面低 18 倍。

推荐理由

原文提供了排查 AI 爬虫抓取超时的日志分析框架,读者可据此诊断核心页面未被 AI 搜索引用的底层网络与渲染障碍。

正文 · AI 翻译

过去两三年里,大多数团队都在向 AI 搜索倾注大量时间和预算。但许多人并没有确认过:AI 爬虫到底能不能访问到自己的重点页面,还是在页面加载完之前就直接放弃了?

我从事 SEO 已经超过 15 年,却依然看到很多人不够重视服务器日志文件——而这些问题的答案恰恰就藏在日志里。

在本文中,我将带你了解如何获取服务器日志、识别经过验证的爬虫,并排查阻碍 AI 爬虫抓取内容的各种问题。

日志文件里都包含什么?

日志文件里记录的每次请求各占一行。每当有真实用户、网络爬虫或抓取程序向你的服务器发起请求时,服务器都会将其记录下来。

来看一个示例:

203.0.113.42 [12/Aug/2026:14:28:19] "GET /guides/pricing" 200 48213 "ChatGPT-User/1.0"

从左到右,这行日志依次说明了:

  • 谁发起的请求:访问者的 IP 地址——203.0.113.42
  • 何时访问的:精确到秒的访问日期和时间——12/Aug/2026:14:28:19
  • 他们想要什么:请求的具体页面和请求方式——GET /guides/pricing
  • 请求结果如何:响应状态码——200
  • 服务器返回了多少数据:响应大小(字节),有助于排查页面返回内容是否少于预期——48213
  • 他们声称自己是谁:声明的 User-Agent——ChatGPT-User/1.0

A single server log line from ChatGPT-User requesting /guides/pricing, labeled with the IP address, timestamp, requested page, response code and bytes sent

日志文件会以这种格式不断重复记录,有时还会包含更多字段,记录量往往高达数百万行:每次被日志系统捕获的真实请求都会占上一行。

提示词追踪能显示出助手在用户提出特定问题时的回答;分析工具里的引流数据能显示人类用户何时点击了链接。但这两者都无法告诉你:助手一开始到底有没有成功访问到你的页面?唯有服务器日志能给你答案。

六次请求,五种截然不同的情况

Six log rows for the same site: two clean bot requests, a ChatGPT-User 499 after 31 seconds, a human visit referred from chatgpt.com, a GPTBot 200 of only 3,104 bytes and a Claude-User 403

注意:末尾的 rt 和 cache 字段并非所有配置中的标准字段,后续步骤 2 会详细说明。

前两行一切正常:

Googlebot 和 OAI-SearchBot 都请求了价格页面,收到了 200 OK 状态码,并在不到半秒的时间内从缓存中获取了完整的 48,213 字节。这正是最理想的状态。

第 3 行放弃了等待:

ChatGPT-User 是根据用户指令去抓取实时网页的智能体。它请求了与第 1、2 行相同的页面,但因为缓存未命中,等待了超过 31 秒后主动断开了连接。

服务器记录下了 499 状态码,实际发送字节数为 0。

既然日志已配置记录缓存状态,建议顺便排查其他未命中缓存的请求,看看它们是否也同样缓慢。

第 4 行是人类访问:

请求针对的是同一个页面,但 User-Agent 表明这是一个普通浏览器,来源网址(Referrer)指向了 ChatGPT。建议将这类引流来的人类访问与爬虫请求分开统计。

第 5 行虽返回 200 OK,但实际上只是个空壳:

GPTBot 得到了成功的响应,但收到的字节数远低于预期。如果页面依赖客户端渲染,爬虫拿到的可能只是一个没有实际内容的空模板。排查方法是在禁用 JavaScript 的情况下抓取该 URL,看看返回的具体内容。

第 6 行表明防火墙拦截了访问:

Claude-User 请求了圣迭戈分店页面,但在短短 6 毫秒内就收到了 403 Forbidden 响应。响应速度如此之快,很可能是安全规则在请求抵达应用程序之前就将其拦截了。建议检查 Web 应用防火墙(WAF)或防爬虫规则加以确认。

需要注意的一点:

日志文件只记录特定时间段内、在抓取层级捕获到的请求。如果你的 CDN 直接从缓存响应了绝大多数请求,而你只盯着源站服务器日志,就会漏掉大批流量。此外,若采样时漏掉了记录在其他位置的主机名或子域名,也会导致数据缺失。

面向 AI 搜索的日志分析六步法

第 1 步:获取合适的日志,先取少量样本测试

具体从哪里提取这些日志,取决于公司的组织架构和技术栈。建议从以下三个方向入手:

  • 公司现有的付费工具:很多团队其实早就采购了接入日志数据的平台,这种情况非常普遍。
  • CDN(内容分发网络):如果想溯源最全的数据,CDN 日志就是黄金标准。可以联系 DevOps 或运维团队开通权限。
  • Web 服务器:这同样是一个数据来源,但别忘了,一旦页面被边缘节点缓存,请求就会由 CDN 直接响应,根本不会到达源站。因此,源站日志统计到的缓存页面请求往往偏少。

Table comparing three log sources (CDN, web server and existing SEO tools) by what each captures, who to ask and typical turnaround

为了避免给彼此添麻烦,有个实用技巧:先要一份样本数据。几百行就足够验证文件能否正常打开、分析工具是否支持该格式,以及是否包含所需字段。千万别等别人花了一整周导出 40GB 数据后,才发现根本没法用。

第 2 步:明确索取需要的数据字段

如果直接跟 DevOps 团队说“给我日志文件”,拿到的可能只有寥寥几个字段,反而漏掉关键信息。

明确指明所需字段名:

  • 请求方 IP 地址
  • 请求页面及请求方法(如 GET 或 POST)
  • 请求日期与时间
  • User-Agent(访客客户端标识)
  • HTTP 响应状态码
  • 发送字节数(实际传输的数据量)

还有两项取决于具体架构,但也值得争取:

  • 响应时间:服务器处理并响应所耗费的时长。nginx 默认日志格式通常不带该项,但 CDN 或负载均衡器可能已经记录。
  • 缓存状态:记录请求是由缓存直接响应,还是回到了源站。排查慢请求时这往往是第一线索,能帮你快速定位延迟是否由缓存未命中导致。

你可以参考这封邮件模板:

主题:申请导出用于 SEO 分析的日志文件

[姓名],你好:

我目前正在分析搜索引擎与各类 AI 爬虫对网站的访问情况,需要调取访问日志。能否先帮忙导出一小段样本(几百行即可)?我确认格式匹配后,再导出完整数据,避免返工。

数据来源:优先 [CDN — 如 Cloudflare、Akamai、Fastly 等],若无则取 [Web 服务器 — 如 nginx、Apache]
域名:[example.com 及相关子域名]

必需字段:

  • 客户端 IP 地址
  • 请求 URL 及请求方法(GET、POST 等)
  • 请求日期与时间
  • User-Agent
  • HTTP 响应状态码
  • 发送字节数

如有请提供:

  • 响应时间(服务器处理响应耗时)
  • 缓存状态(HIT、MISS 等)

样本确认无误后,我需要大约 [两周] 的完整数据进行深度分析。导出格式以你们方便为主(CSV 或原始日志文件均可);另外,如果有抽样或过滤规则,也请同步告知一下。

非常感谢!
[你的姓名]

需要多少数据?

这没有标准答案,不过一旦确定输出的数据符合要求,不妨参考以下切入点:

  • 1 到 2 周的数据有助于排查具体问题
  • 1 到 2 个月可以看出大体的抓取行为
  • 如果你关注的是访问频次较低的模型训练爬虫,更长的时间跨度(90 天或更久)会更有参考价值

步骤三:打开文件并进行评估

上手并不需要数据仓库,可以试试以下两种方案:

  • 利用公司现有的付费工具:Profound 等平台可以帮你处理和评估日志文件。
  • 从 Screaming Frog 的 Log File Analyser 入手:这是独立于其 SEO Spider 的一款工具,支持导入日志并能识别 AI 爬虫的 User Agent。

重要提示:

导入日志时务必开启爬虫验证。在 Screaming Frog 的 Log File Analyser 中,勾选“Verify Bots When Importing Logs”,确保受支持的爬虫身份属实。下一步我会解释为什么这一点至关重要。

如果你已经有现成的日志传输管线,直接用就行,尤其是能和抓取数据打通的情况。对于动辄数百万行日志的大型网站,BigQuery 和 SQL 确实好用,但刚起步时完全用不上这些。

步骤四:看看是谁在敲门

打开日志文件后,第一步是弄清楚到底是哪些爬虫在访问。很多人也是在这里踩坑的——AI 爬虫其实分为四类,各自的用途和访问频次各不相同。

  • 第一层级 训练(Training):收集文本用于模型训练
  • 第二层级 索引(Indexing):建立索引库,供 AI 助手搜索并引用相关内容
  • 第三层级 实时抓取(Live fetching):响应用户提问时实时抓取你的页面
  • 第四层级 操作(Acting):智能体代表用户在你的网站上执行操作

Four tiers of AI bots: training (months), indexing (weeks), live fetching (seconds) and acting (seconds)

理解第三和第四层级的一个简单思路是:第三层级是在“读”你的页面,而第四层级是在“用”你的网站。目前,智能体大多停留在评估阶段,最终操作仍需交回给人工。Google 目前是个罕见的例外,符合条件的商家可以让智能体在获得客户确认后直接完成购买。

以下是截至 2026 年 10 月各分类中常见的爬虫示例。随着新模型推出和新玩家入局,这些名称可能会发生变化,此外还有不少小型爬虫未在此列出:

Reference table of AI bot user agents by tier, including GPTBot, ClaudeBot, OAI-SearchBot, PerplexityBot, ChatGPT-User, Claude-User and Google-Agent

实用小技巧:名称中带有“-User”通常意味着实时抓取,但这只是一种命名惯例,而非绝对规则。Google-Agent 同样是在响应用户请求,且会在 User Agent 字符串中表明身份。而 OpenAI 的浏览器智能体则使用签名请求头来进行验证。

这就引出了一个更关键的问题:如何核实爬虫的身份是否属实。

多数网站容易犯的两个错误

陷阱一:封禁了不该封的爬虫

以 OpenAI 为例,封禁 GPTBot 是明确告知 OpenAI 不要用你的内容做模型训练,这属于合理的商业决策。但如果封禁了 OAI-SearchBot,你的内容就无法出现在 ChatGPT 的搜索回答中。一旦采取一刀切的“封禁 AI 爬虫”策略,两者都会被拒之门外。

建议检查你的 robots.txt 和 CDN 规则,弄清楚到底屏蔽了哪些爬虫。如果有人告诉你他们屏蔽了 AI 爬虫,你的第一反应应该是反问一句:“封了哪些?”

陷阱二:轻信爬虫自报的家门

User-agent(用户代理)只是请求方自报的名称。任何人都能在浏览器或爬虫工具里修改它,只需在请求头里加上“GPTBot”即可。这样一来,恶意抓取程序会虚增你的访问数据,而原本用来拦截虚假爬虫的安全规则,也可能误伤真正的机器人。

爬虫验证机制能在统计请求前筛出这些冒牌货。不同运营方的验证方式有所不同,通常包括核对官方公布的 IP 地址段、验证 DNS 记录,或校验带有签名的请求头。

第五步:应该关注哪些指标?

本文重点讨论 AI 爬虫,但日志分析同样有助于评估抓取预算的使用情况,并找出传统搜索引擎抓取效率低下的问题。千万别忽视日志文件,尤其对于抓取预算优化更为关键的大型网站来说更是如此。

打开日志并筛选出经过验证的爬虫后,重点关注以下三个问题:

  • 它们能正常访问吗?AI 爬虫都抓取了哪些页面?
  • 它们抓到了什么?拿到的是正常页面还是错误响应?
  • 它们愿意等吗?还是说服务器响应太慢,导致连接超时?

它们能正常访问吗?

这里主要评估两个维度:

  • 没有任何 AI 爬虫访问过的页面:这类页面在 Google 上的排名再高,对 AI 搜索也是隐形的。如果核心转化页面出现在这份名单里,就必须彻查爬虫为何找不到或无法抓取它们。
  • 只有爬虫才知道的页面:这些通常是多年前被别人链接过的陈旧 URL,但至今仍有爬虫在请求。既然外部仍有流量在访问,就该检查一下:这里是该展示真实页面,还是重定向到相关的新页面。

整理这两份清单并没有听起来那么复杂。用 Moz Site Crawl 跑一次常规抓取,将“所有已抓取页面”报告导出为 CSV,然后在表格或日志分析工具里与日志文件中的 URL 做个比对即可。

Moz Pro Site Crawl All Crawled Pages report, with an arrow pointing to the Export CSV button

这两类问题的解决方法都属于技术性 SEO 的范畴:做好合理的内链策略和 XML 网站地图。

它们抓到了什么?

接下来,看看每个爬虫收到的 HTTP 状态码:

  • 200 OK:爬虫成功收到了响应,但仍需检查发送的字节数,确认它是否拿到了完整页面。
  • 301/302 重定向:检查是否存在多次重定向跳转或重定向死循环。
  • 403 Forbidden:请求被服务器拒之门外。请检查防火墙或防爬规则设置。
  • 404 Not Found/410 Gone:页面已不存在,但爬虫仍在尝试请求。如果有合适的新内容,建议配置重定向。
  • 499 Client Closed Request:服务端还没传输完毕,客户端就主动关闭了连接。稍后我们会详细讲这一点。
  • 500 Server Error:服务器无法处理该请求,AI 爬虫未能成功重试。

What HTTP status codes 200, 301, 403, 404/410, 499 and 500 mean when an AI bot receives them

排查时,应按爬虫单独统计错误率,而非看全站的总体数据。哪怕只有极低的错误率,也可能让你白白流失来自 ChatGPT 等 AI 助手的宝贵实时流量。

排查时建议先从 403 错误入手;防火墙或防爬系统的一条误设规则,就可能把正常的抓取请求挡在门外。

它们愿意等吗?

这是很多审计工作都会忽略的问题。建议按爬虫种类和目录结构分别查看平均响应时间,重点排查两种异常模式:

  • 某个爬虫的响应时间明显慢于其他爬虫
  • 网站某个板块的响应速度明显慢于全站平均水平

这一点至关重要。搜索引擎爬虫或许愿意等慢页面加载,或者稍后再来;但 AI 助手在回答用户提问时,屏幕前可是有人在等着的,服务器要是迟迟交不出内容,它可能就直接放弃了。

前面的问题关注的是爬虫能否访问到你的页面,而这一步要看的是:它会不会停留足够长的时间来读取内容?这就涉及到 499 状态码了。

第六步:排查 499 状态码

让我们回到前面日志示例中的第三行:

23.102.140.7  [12/Aug/2026:14:32:07 +0000] "GET /guides/pricing HTTP/1.1" 499 0 "-" "…ChatGPT-User/1.0" rt=31.412 cache=MISS

499 状态码代表“客户端关闭了请求”(client closed request),也就是说,还没等服务器发送完内容,发起请求的一方就已经挂断了。

这并不是一个官方的 HTTP 状态码,而是由 nginx 自创的,后来被许多 CDN 和负载均衡器广泛采用(有些系统在日志中会使用其他标签记录)。

在这个例子中,ChatGPT-User 在未命中缓存的情况下等待了超过 31 秒后断开连接,服务器没有发送任何字节。虽然仅凭这个状态码无法得知请求方为何断开,但响应时间显然值得深入排查。

这正是我认为 499 是日志中最有趣的状态码之一的原因:它记录了别人主动对你做出的放弃决定。

然而,它也很容易被忽视。如果监控重点全放在 500 开头的服务器错误上,往往会漏掉 499。乍一看,它像是访问者自己的问题,团队很容易不以为意。但如果频繁遇到这种情况的是 ChatGPT-User 或 Claude-User,AI 助手在回答用户时,可能就只能放弃引用你的内容了。

如何排查反复出现的 499

单次出现的 499 说明不了太多问题。用户可能会关掉浏览器标签页,爬虫也可能触发限流或重启。和其他状态码一样,关键是要寻找规律。

排查反复出现的 499 时,可以重点对比以下维度:

  • 响应时间:查看客户端挂断前请求持续了多久。坚持了五六秒才出现的 499,与 200 毫秒就断开的 499,背后反映的情况完全不同。
  • 缓存状态:观察 499 是否扎堆出现在未命中缓存的请求中。如果同一 URL 在命中缓存时响应很快,而未命中时频繁超时,问题很可能就出在这里。
  • 受影响的 URL:检查失败请求是否集中在某种模板、特定目录或内容较重的页面类型上。有时某个模板背后一条缓慢的数据库查询,就足以解释整套规律。
  • 该爬虫的其他请求:对比全站范围内的失败情况。如果该爬虫在各个页面都遭遇 499,就该去排查限流策略、WAF 质询或源站负载过高的问题了。

不要把每一次断开连接都直接断定为服务器太慢,特别是当你需要推动其他团队介入解决时。给协作团队提供清晰的规律和数据支撑,排查才能有的放矢。

我们排查的核心目的,是确认爬虫最终是否拿到了页面。日志能清晰反映出响应码、发送字节数以及客户端是否主动断开。

至于解决这些问题能否换来更多的引用或提及,则是另一个层面的问题,需要借助 Moz AI Visibility 这类工具在 AI 回答中进行追踪监测。

你的品牌在 AI 搜索中被提到了吗?

立即在 Moz Pro 中查询 AI 引用情况!

日志文件提示你应该修复什么

根据你在日志中看到的情况,这里整理了一份高维度的优化排查清单:

Table mapping log file findings (499s, 403s, 404s, pages bots never reach, redirect chains and CSS/JS requests) to recommended fixes

最后一行需要特别强调。在日志中看到大量 CSS 和 JavaScript 请求,本身并不构成屏蔽它们的理由。某些爬虫正是依靠这些资源来渲染并理解你的页面的。

真实网站上的实际表现究竟如何?

几个月前,有位客户找到我们 iPullRank,明确提出希望通过一个试点项目来验证短期成效。

我们先从技术层面切入,在其日志文件中发现了访问限制问题:大量 AI 爬虫请求返回了 499 错误。我们解决了这个问题,并顺便修复了多处抓取问题。

这项工作是与涵盖内容与指标评估的更广泛 AI 搜索项目同步推进的,因此无法将成效完全归因于日志修复。但技术障碍扫清后,其 AI 可见度在随后数月里明显提升。

Line chart showing a client’s AI visibility trending upward after technical fixes were implemented

这种情况并不局限于单个客户

我们与 Profound 合作扩大了分析范围,在 2026 年 4 月调取并分析了 70 万个页面,以下是我们的发现:

  • OpenAI 抓取时经常超时的页面,其获得的引用量比未超时的页面低了 18 倍
  • 在抓取尝试中失败率超过四分之三的页面,往往没有任何引用

Three findings from a 700,000-page analysis: 18 times fewer citations for pages that often timed out and zero citations for many pages that failed more than three-quarters of the time

我们在 iPullRank 网站发布的《AI 引用与页面速度分析》中详细介绍了这些发现。需要说明的是,这是一项相关性分析,而非受控对比实验。

结语:准入资格成了新的排名法则

清晰、权威且结构良好的内容,只有在 AI 助手能够接收到时才有意义。而日志文件能帮你确认页面是否具备这一基本资格。

本周你可以按以下步骤着手:

  • 发一封邮件:向 DevOps 团队索取一份小样本,随后提取两周的日志数据,其中需包含步骤 2 中提到的六个关键字段,并在条件允许时附带响应时间和缓存状态。
  • 分析日志:借助 Screaming Frog 的 Log File Analyser 等工具展开分析。若工具支持,请开启爬虫验证,并优先处理来自“-User”智能体以及 Google-Agent 的已验证请求。
  • 排查访问失败问题:先从重点页面的 403 错误和反复出现的 499 错误查起,然后再逐步处理其余的重定向和报错。

本文作者观点仅代表个人立场(除非作者罕见地被催眠),并不一定代表 Moz 的观点。

来源:Moz Blog · moz.com