Crawler verification · 2026-09-05

日志里出现搜索蜘蛛 User-Agent,为什么还要做双向 DNS 核验?

第一步只登记“身份声明”

服务器日志命中Googlebot、Bingbot或Baiduspider字符串时,最稳妥的初始状态是crawler_user_agent_claim。它说明站点收到一个自称蜘蛛的请求,不能证明请求来自对应搜索引擎,更不能证明页面已索引。

隐私边界同样重要:只对已知蜘蛛声明进入受限专用日志,报告与租户页面不输出原始IP。普通访问者不应为了蜘蛛核验被扩大采集。

图示双向DNS核验路径:反向DNS、官方域名与正向回验;身份通过后还要核对资源响应,官方IP范围也是可用方法
图可左右滑动查看。双向回验防止攻击者仅设置蜘蛛名称,或仅让反向记录看起来像官方域名。

反向域名必须符合各自官方规则

对来源IP执行PTR查询后,主机名必须落在该搜索引擎公开规定的域名范围;不能只做contains匹配,也不能凭经验给没有官方规则的蜘蛛猜后缀。随后对主机名执行A或AAAA查询,结果必须包含最初来源IP。

DNS超时、临时解析失败和没有PTR记录应分别登记。超时是unknown或retryable,明确不匹配才是failed。缓存应带核验时间与合理TTL,避免永久沿用过期结论。

路径与响应也要和身份分开记录

可信身份核验通过后,再判断它请求的是发现入口还是正文:robots、Sitemap和feed成功,只说明访问了入口;规范文章页成功,才是content_observed。404、5xx或被拦截的正文请求则是失败访问,不能计为内容抓取。

这三个维度应拆开:identityStatus、resourceClass、responseStatus。可信蜘蛛读取Sitemap不等于抓取文章,抓取文章不等于索引,索引也不等于模型引用。

最小验收样本应包括伪造与解析漂移

  • 正常:官方后缀匹配且正向解析回原IP。
  • 伪造:User-Agent正确,但PTR属于无关域名。
  • 伪装:PTR看似官方,正向解析不包含原IP。
  • 边界:DNS超时,保留未知而不是写失败或通过。
  • 资源差异:同一可信身份分别访问入口、正文与错误页。

建议定期复核官方验证文档;规则变化时旧缓存不能自动代表当前身份。即使本轮核验通过,也只支持“该时刻该请求来自可信蜘蛛并访问了该资源”,不支持收录或排名结论。

现场核验记录怎样做到可复算

每次检查保存脱敏请求键、User-Agent分类、PTR查询结果、后缀规则版本、正向解析集合、核验时间、资源路径类别和响应状态。报告只输出聚合结论,受限工件保留原始IP用于复算。DNS缓存命中也应记录原核验时间,不能把缓存读取时间当成新验证。

例如PTR主机名符合官方后缀,但A记录集合不包含原IP,结论必须失败;PTR查询超时则保持未知并按退避策略重试。若官方文档没有给出自动验证规则,停止自动升级为可信身份,改用站长平台抓取诊断补证,不能套用其他引擎经验。

Google官方提供两条核验路径

截至2026年9月1日核验,Google官方请求验证说明同时列出手工双向DNS与自动IP范围匹配。使用后者时,应从官方列表读取对应爬虫类别的CIDR范围并保存列表版本,不能把“属于Google某段IP”直接等同于Googlebot。

通用爬虫、特殊爬虫和用户触发的抓取器需分别分类。例如请求匹配用户触发抓取器范围,只支持该类别身份,不应计成自然搜索蜘蛛访问。DNS超时也不能否定独立且有效的官方IP范围证据;报告要注明实际使用了哪种规则,而不是强制所有请求必须经过DNS。

可构造一个合成负向样本:UA自称Googlebot,但既不满足对应DNS规则,也不匹配官方通用爬虫IP范围,不能升级可信身份。这个测试设计不是生产访问记录。身份、正文抓取与索引的差别,见搜索索引验证的证据边界。