服务器日志里出现蜘蛛的访问记录,很多人会直接理解成“这个页面已经被收录了”。其实抓取和收录是两件独立的事:抓取解决的是“内容有没有被取走”,收录解决的是“取走的内容有没有被存进索引、并有机会被调用”。中间隔着若干处理环节,任何一环出问题,日志上都能看到抓取,索引里却找不到这个页面。
抓取成功只说明内容被取走了
一次抓取能算成功,通常要满足几个条件:域名解析与连接正常、服务器返回 2xx 状态码、响应体在超时前完整传出、robots.txt 没有挡住这个地址。这些条件达成,只会让蜘蛛拿到一份 HTML,并不代表它理解了这个页面。反过来,返回 200 但正文是空的、内容靠前端脚本异步加载、正文被塞在弹窗或折叠区里,都可能出现“抓到了,但没抓到有用的东西”。
从响应内容到索引条目,中间发生的事
- 解析与抽取:从 HTML 里识别标题、正文、时间、作者等主体内容,剔除导航、页脚、广告等模板部分。
- 去重与规范化:判断这份内容是否与库中已有内容高度相似,并决定同一内容用哪个 URL 作为代表地址。
- 质量判断:内容是否足够独立、完整,是否只是模板填空或采集拼接。
- 写入索引:通过前面几关后,页面才会以一条索引条目的形式存在。
不同搜索引擎的实现细节有差异,但逻辑是一致的:抓取只是入口,能不能写进索引取决于后面几步的结果。
卡点一:主体内容没被完整抽取
抽取失败最常见的原因不是内容不存在,而是内容的位置不符合常规结构。比如:
- 正文由前端框架在浏览器端渲染,服务端返回的 HTML 几乎是空壳;
- 正文放在内嵌框架、图片或画布中,文本层缺失;
- 正文与其他模块混排在一起,抽取时被整块丢弃;
- 首屏被大面积弹窗、登录提示遮挡,主体内容需要交互才出现。
这类情况的信号是:抓取次数正常,甚至频率不低,但索引报告里长期显示未被编入索引。
卡点二:规范化之后,索引选了另一个地址
同一段内容如果同时存在多个可访问地址,索引通常只会保留一个代表。带参数的版本、大小写不同的版本、结尾带不带斜杠的版本,以及被页面内声明的规范地址指向的其他页面,都可能成为最终入选的那个。你会看到自己关心的 URL 一直不进索引,其实是它的“兄弟地址”被收录了。这一点用站点查询或抓取测试工具确认最快,不必反复提交。
卡点三:写进去了,但页面质量不够
索引条目存在,不等于随时会被调用。内容单薄、与站内其他页面高度重复、信息价值有限的页面,可能被写入索引,但在展示环节很难获得位置。需要提醒的是:这属于索引之后的取舍,与抓取无关,盯着服务器日志或抓取频率是看不出问题的。
怎么判断页面卡在哪一步
- 先看服务器日志或抓取统计:如果一个周期内蜘蛛完全没来过,问题在发现与抓取环节。
- 再确认返回内容:用不执行脚本的方式请求一次,看返回的 HTML 里有没有正文文本。
- 然后看索引状态:如果页面明确显示未被编入索引并给出原因,顺着原因排查。
- 最后查代表地址:确认同一内容是否有其他 URL 已经被收录。
顺序反了很容易白忙:还没确认抓取是否正常,就去改标题和内链,通常不会有变化。
值得做与不值得做的事
- 值得做:保证服务端返回的 HTML 里有可读正文;把重复地址收敛成一套;让重要页面的内容具备独立性。
- 不值得做:为了尽快收录不断重复提交同一个地址;在没确认抓取状态前频繁改动页面结构;把尚没有内容的页面提前放出来等索引。
抓取、收录、可被调用是三件不同的事。排查时先确定页面停在哪个阶段,再决定要不要动手,比反复试探有效得多。