抓取和入库,是两条不同的链路
不少人排查问题时,把“搜索蜘蛛来过入口页”直接等同于“目标 URL 会进索引”。实际上这是两件事:抓取只说明爬虫把入口页拿走了,入库还要经过解析、去重、质量评估、索引筛选等环节。入口页被抓到、目标链接被发现,只走完了第一步。
所以当入口页日志里有大量蜘蛛记录、目标 URL 却迟迟不出现时,先别急着改入口页。按下面的顺序定位,能省掉很多无用功。
第一步:确认日志里的抓取是不是有效抓取
服务器日志只记录请求,不记录结果。同样一条蜘蛛记录,可能代表一次成功抓取,也可能代表一次被拒的访问。
看状态码
- 200:正常返回,继续往下查。
- 301 / 302:看跳转终点是不是你想让蜘蛛看到的那一页,跳转链太长容易被放弃。
- 403 / 503:多半是防火墙、CDN 规则或频率限制拦了,蜘蛛拿不到内容,自然也不会去解析里面的链接。
- 404:入口页路径写错或已删除。
看返回内容与抓取路径
如果日志里只有入口页被访问,目标 URL 一条记录都没有,说明蜘蛛没有沿着链接继续走。这时重点看链接是否可被常规解析——纯 JS 渲染、藏在交互之后、或需要登录才出现的链接,都可能看不到。
第二步:查目标 URL 自己有没有被拒的理由
入口页没问题,不代表目标页没问题。下面这些是目标 URL 不入库的常见原因:
- 目标页 robots.txt 禁止抓取,或 meta robots 写了 noindex。
- 目标页 canonical 指到了别的 URL,等于把票投给了别人。
- 目标页与站内其它页面高度重复,被判定为重复内容而合并。
- 正文过薄,或主要内容靠 JS 渲染,抓取时拿到的是一片空白。
- 页面返回 5xx、加载超时,或需要特定 UA、Cookie 才能正常打开。
把目标 URL 单独丢进抓取工具,或直接看日志里返回的内容,比盯着入口页看半天更有效。
第三步:看入口页给出的上下文够不够
入口页的作用是让链接被看到,不是替目标页背书。但如果入口页本身就是一堆孤立链接、没有正文、没有主题词,蜘蛛对链接的判断会更保守,抓取优先级也容易靠后。
比较实用的做法是:让入口页带一个明确的主题段落,锚文本和目标页内容对得上,而不是全部写成“点击这里”“详情”。锚文本不必刻意堆词,但至少让人和爬虫都能看懂这一页大概在讲什么。
第四步:考虑抓取预算和站点整体情况
同一个站点下如果页面数量很大、质量参差,蜘蛛会把有限的抓取量放在它认为更有价值的部分。新站或权重较低的站点尤其明显:入口页的链接不是看不见,而是排在队尾。
另外要留意,多个域名、多个入口页挂在同一台服务器、同一个 IP 上时,整体抓取频次是共享的。某一批入口页抓取量突然上来,其它入口页可能就会被压缩。
一套可执行的排查顺序
- 在日志里筛出搜索蜘蛛的 UA,确认访问的确实是入口页。
- 核对状态码和返回内容长度,排除拦截、跳转、空白页。
- 单独访问目标 URL,检查 robots、meta robots、canonical 三项。
- 做一次抓取测试,看目标页在无 JS、无 Cookie 的情况下能否拿到正文。
- 检查入口页链接是否为标准 a 标签、能否被直接解析。
- 对比同站其它已入库页面,看目标页在结构、内容深度上差在哪。
排查这类问题时,最忌一上来就改入口页。先把“抓取—发现—解析—筛选”这条链路逐段排除,剩下的那一段才是真正要修的地方。
小结
入口页被抓取,只说明发现环节走通了。目标 URL 没入库,可能是目标页被规则挡住,也可能是内容本身过不了筛选。按日志、状态码、目标页规则、抓取渲染、站点整体这几步依次排查,比盲目堆链接、加入口页要靠谱得多。