网络爬虫:搜索引擎如何发现和获取网页
网络爬虫通过链接和站点地图发现 URL,再请求页面资源。了解爬虫、索引的区别,以及 robots.txt、状态码和日志诊断方法。
网络爬虫(web crawler)是自动发现和请求网页的软件。搜索引擎使用爬虫沿着链接、站点地图和已知 URL 获取内容;站点审计工具也会使用爬虫检查状态码、canonical、内部链接和页面结构。
“爬取”和“索引”是两个不同阶段。一个 URL 返回 200 OK,只说明服务器提供了内容,并不保证搜索引擎会把它加入索引。
从发现到索引的流程
一个简化流程如下:
- 发现 URL:从已抓取页面的链接、XML sitemap、重定向或其他来源获得地址。
- 安排抓取:根据站点响应、URL 重要性、更新情况和资源限制决定何时请求。
- 发送 HTTP 请求:服务器返回状态码、响应头和正文。
- 解析与渲染:读取 HTML 中的链接、robots 指令和 canonical;必要时执行 JavaScript。
- 选择规范页:把重复或近似页面归为一组,并决定代表性 URL。
- 决定是否索引:分析正文、媒体、元数据、重复关系和页面价值。
这解释了为什么 Search Console 会出现“已抓取,目前未编入索引”:抓取成功,但索引阶段没有选择该页面。
爬虫如何发现 URL
内部链接
可抓取的 <a href="..."> 链接是最稳定的发现方式。重要页面应从导航、主题中心页或相关正文获得上下文链接,而不是只存在于 JavaScript 事件、站内搜索结果或孤立 sitemap 中。
XML Sitemap
Sitemap 是提示,不是收录保证。它应只包含希望被搜索引擎视为规范版本的 200、可索引 URL。重定向、noindex、错误参数和重复语言地址不应长期留在 sitemap 中。
重定向和外部链接
爬虫也会从旧 URL 的重定向、其他网站的链接和历史抓取记录继续发现地址。因此,修复错误链接后,旧 URL 仍可能在报告中保留一段时间。
HTTP 状态码告诉爬虫什么
| 状态 | 含义 | 常见处理 |
|---|---|---|
200 | 请求成功 | 页面仍需通过索引和质量判断 |
301 / 308 | 永久移动 | 更新内部链接并让目标页成为规范 URL |
302 / 307 | 临时移动 | 仅在移动确实临时时使用 |
404 / 410 | 内容不存在 | 无替代页时返回真实错误状态 |
429 | 请求过多 | 提供 Retry-After 并检查容量限制 |
5xx | 服务器错误 | 优先修复稳定性,避免持续抓取失败 |
不要让不存在的路径返回一个带“未找到”文案的 200 页面,这会形成软 404。也不要把所有删除页都重定向到首页;只有存在明确替代内容时才应跳转。
robots.txt、noindex 与 canonical 的职责
- robots.txt 控制爬虫是否可以请求某个路径。
noindex告诉支持该指令的搜索引擎不要把资源放进搜索索引。- canonical 是重复 URL 的规范化信号,不是强制指令。
如果 URL 被 robots.txt 禁止抓取,爬虫通常无法看到页面里的 noindex。需要移除索引时,不应同时用 robots.txt 把该页面挡住。
如何从日志验证爬虫活动
服务器访问日志通常包含时间、请求路径、状态码、User-Agent、来源 IP、响应字节和处理时间。诊断时至少回答四个问题:
- 哪些爬虫请求了哪些 URL?
- 返回的是
200、重定向、错误还是超时? - 重要页面是否被重复参数和错误路径挤占抓取?
- sitemap 更新时间后,目标 URL 是否重新被请求?
User-Agent 可以伪造。验证 Google 来源时,应按官方方法做 DNS 验证或比对公开 IP 范围。其他搜索或 AI 服务也应以各自官方文档为准。
站点审计清单
- sitemap 只列出规范、可索引的
200URL; - 内部链接直接指向最终地址,避免跳转链;
- 参数、大小写、尾斜杠和语言路径有统一规则;
- 删除页返回真实
404/410,移动页返回单跳永久重定向; - CSS、JavaScript 和关键图片未被错误阻止;
- 重要页面在原始 HTML 或可稳定渲染结果中提供正文;
- 定期检查 Crawl Stats、URL Inspection 和服务器日志。
相关概念
参考资料
问答
网页被爬取后一定会被索引吗?
不会。抓取只表示爬虫成功获取了 URL;搜索引擎仍会分析内容、重复关系、规范页和质量,再决定是否索引。
robots.txt 能阻止网页出现在搜索结果中吗?
robots.txt 用于控制抓取,不是可靠的索引移除工具。需要阻止索引时,应允许爬虫访问并读取 noindex,或让 URL 返回合适的状态码。
如何确认访问日志里的 Googlebot 是真的?
不要只相信 User-Agent。Google建议使用反向与正向 DNS 验证,或将来源 IP 与其公开的爬虫 IP 范围匹配。