两个小文件常被当成安全边界使用,但它们不是。robots.txt 描述爬虫偏好,sitemap 则给搜索系统一份属于该站点的 URL 清单。

源站根路径上的 UTF-8 robots.txt 是配合爬虫的偏好文件,不是认证或可靠的搜索索引删除机制。检查 sitemap 根元素:跟随 sitemapindex 中的语言 sitemap,或读取直接的 urlset。使用单一主机的规范绝对 URL。XML 语法正确不足以验证:还需检查命名空间、数量、主机与页面存在性。每份 sitemap 最多 50,000 个 URL、未压缩 52,428,800 字节,gzip 不提高限制。私有路由需要服务器授权或网络边界。RFC 9309 对 4xx 的 robots 不可用允许抓取;网络或服务器错误最初要求全部禁止。可达的 200 HTML 兜底页不能证明 robots 正确。
发现工具不会授予或拒绝访问。继续检查索引列出的每份 sitemap,验证不止 XML 语法,并按真实错误类别处理 robots 响应。

robots.txt 能做什么、不能做什么

规则发布于源站根路径 /robots.txt,由配合的爬虫读取。它不会保护私有目录、不会从网络上移除 URL,也不能替代认证。不应公开的路由需要服务器授权或网络边界。

让文件保持平实,并测试它的实际位置:

User-agent: *
Disallow:
Sitemap: https://www.example.test/sitemap.xml

文件应为 UTF-8。如果部署会重定向它,请核验你想要的爬虫行为,而不是假设每个客户端都遵循同一条链。

sitemap 增加了什么

sitemap 是一份清单,而不是权限列表。使用单一主机的绝对 URL、正确做 XML 转义,并且只列出你准备发布的规范页面。不要因为某个 URL 存在于构建目录就把它列出。

每份 sitemap 最多包含 50,000 个 URL,未压缩大小不超过 50 MB(52,428,800 字节);gzip 不会提高该限制。小站可以不用 index,但多语言生成器也可以合理地生成指向各语言 sitemap 的索引。应检查根元素并继续检查列出的各份 sitemap,而不是假设 /sitemap.xml 一定是 URL 集合。把它的 XML 校验通过,并像普通页面一样通过同一 HTTPS 边缘请求它。

curl -fsS https://www.example.test/robots.txt
curl -fsS -o sitemap.xml https://www.example.test/sitemap.xml && \
  xmllint --noout sitemap.xml

把下载与解析分开,避免下载失败被解析成功掩盖。XML 格式正确只代表语法通过;还要验证命名空间、URL 数量、规范主机名,以及列出的页面是否存在。若未安装 xmllint,请在发布它的同一个 CI 环境里解析该 XML。重要的是检查要在文件被替换到边缘之前运行。

robots 的 Disallow 不是可靠的搜索索引删除指令。还要测试错误响应:RFC 9309 在 robots 返回 4xx、表示文件不可用时允许抓取,而网络或服务器错误在最初要求全部禁止。意外返回状态为 200 的 HTML 兜底页,因此可能改变爬虫行为,即使 URL 看起来仍然可访问。

来源