很多站点运营者会遇到同一种困惑:服务器日志里明明有蜘蛛的抓取记录,抓取时间、URL、返回码都正常,但用各种方式查询,索引里就是找不到这个页面。于是判断“抓取没用”“蜘蛛白来了”。其实这里混淆了两个不同的环节——抓取只代表蜘蛛取走了内容,收录代表搜索引擎决定把这条 URL 放进索引并保留一个版本,中间还有判断和处理的过程。
把握索引链条的四个环节
把过程拆开,会清楚很多:
- 发现与抓取:蜘蛛通过内部链接、sitemap、外链等入口找到 URL,发起请求并取回内容。
- 处理:解析 HTML、执行必要的渲染、识别正文、判断规范化版本。
- 索引:决定这条 URL 是否作为一个独立版本进入索引,还是被合并、丢弃。
- 展现:在候选集合中被调用,参与某次搜索结果的排序。
日志只能证明第一步。后面每一步都有可能让页面停下来,所以“抓过”和“收录”之间并没有等号。
抓取正常但索引里没有,常见的几种情况
- 返回的不是 200:跳转链太长、返回 403/404,或者内容为空却返回 200(软 404),都可能让页面在处理阶段被拦下。
- 页面被 noindex 拦住:meta robots 或响应头里的 X-Robots-Tag 写了 noindex,蜘蛛可以抓,但不会进索引。这类页面在日志里看起来一切正常。
- canonical 指向了别处:你查的这一版被声明为副本,索引里留的是另一个 URL,于是“这个地址没收录”。
- 正文依赖 JS 渲染:抓取到的初始 HTML 是空壳,正文要等脚本执行后才出现,处理阶段可能拿不到有效内容。
- 站内存在大量相似内容:同一篇内容出现在多个 URL 上,索引只会保留其中一个版本。
- 页面本身价值不足:内容过薄、模板占比过高、与站内其他页面高度重复,都可能被判断为不值得单独成条目。
- 只是还没轮到:抓取和索引之间有时间差,尤其是新站、新目录,几天到数周都算常见。
判断卡在哪一步的顺序
- 先确认返回状态码和响应头,看是否存在跳转、拦截或异常。
- 查看页面源代码,确认正文是否直接出现在 HTML 中,而不是只存在于脚本输出里。
- 检查 meta robots、X-Robots-Tag 与 canonical,确认没有自我拦截,也没有指向其他 URL。
- 用站点的 URL 检查类工具看官方给出的状态描述,这比站内搜索查询可靠得多。
- 回到日志,看这条 URL 的抓取频次和返回码是否稳定,判断是偶发还是持续。
- 检查站内是否还有同内容的其他 URL,以及内部链接主要指向哪一版。
站内搜索查询只能当作粗略参考,它受查询方式和索引更新影响,不能直接当作“收录/未收录”的结论。
几组最容易混在一起的概念
- 可抓取不等于可索引:robots.txt 允许抓取,只是允许蜘蛛来看,不等于允许进入索引。
- 被收录不等于有排名:进入索引只是获得了入场资格,能否出现、出现多靠前是另一件事。
- 提交 sitemap 不等于收录:sitemap 提供的是发现入口,不是收录承诺。
- 抓取频繁不等于评价好:抓取量受站点规模和抓取预算影响,与页面质量没有直接对应关系。
让页面更可能进入索引的几件事
- 保证 URL 稳定返回 200,避免频繁跳转和间歇性超时。
- 让正文出现在初始 HTML 里,脚本渲染作为补充而不是唯一来源。
- 规范版本自指 canonical,站内链接、sitemap、分享链接尽量指向同一版。
- 收敛同内容的多 URL:参数、大小写、末尾斜杠、打印版之类尽量统一。
- 给重要页面留出足够的内部链接入口,避免只靠 sitemap 被发现。
- 让页面有独立的信息价值,而不是把同一段内容反复换皮。
观察周期怎么安排
页面刚上线就反复查询,得到的多半是“还没处理完”。新页面、新目录、整站改版后的地址,观察周期以周为单位更合理。每次调整后记录下改动时间和对应 URL,隔一段时间再看状态变化,比每隔几小时查一次更容易看出趋势。
回到最初的问题:蜘蛛来过但索引里没有,先别急着归因于“蜘蛛不抓”。按抓取、处理、索引的顺序逐项排查,多数情况能找到具体卡点——是返回异常、是页面被拦住、是版本被合并,还是页面本身没有足够理由被单独保留。