翻服务器日志时,很容易把“蜘蛛来过、返回 200”当成一个好消息。它确实说明 URL 被发现了、服务器也正常响应了,但离页面进入索引还有一段距离。抓取是蜘蛛把页面取回来,索引是搜索引擎决定要不要把这份内容存进可检索的库。两件事由不同环节决定,中间隔着一道筛子。
蜘蛛取回页面之后会发生什么
一次抓取完成后,页面通常还要经过几道处理:
- 渲染与解析:HTML 拿到之后,可能需要执行必要的 JS,才能得到最终的内容和链接。
- 内容提取:正文、标题、结构化数据、canonical、meta robots 都在这一步被读出来。
- 重复判断:与库里已有的内容比对,决定是新建一条记录,还是合并到某个规范 URL 上。
- 价值与质量判断:内容是否足够、是否与其他页面高度雷同、是否属于低价值模板页。
任何一步没通过,日志里那次 200 都只是“抓到了”,不会自动变成“可被检索”。
几种常见的“抓了但进不去”
空壳页与软 404
URL 返回 200,正文却只有一句“暂无内容”或一个空列表。这类软 404 对蜘蛛最难判断:状态码说正常,内容说没有。站点上大量筛选结果、已下架商品、空标签页都属于这一类,既消耗抓取,也很难进入索引。
同一内容的多条 URL
带 www 与不带、带尾斜杠与不带、大小写不同、URL 后面挂着不影响内容的参数,都可能让同一份内容出现好几个地址。蜘蛛把每一条都抓了,最后只保留一个作为规范版本。如果页面里的 canonical 指向混乱,或者内链、Sitemap 各指一个版本,抓取量就分散在几个副本上。
meta robots 与 robots.txt 不是一回事
robots.txt 的 Disallow 是拦住抓取,页面根本不会被取回;meta robots 的 noindex 是允许抓取、但请求不要进索引。想让某类页面从索引里退出,应该用 noindex;用 Disallow 拦住抓取,蜘蛛反而看不到 noindex 这条声明。
内容依赖 JS 才出现
如果正文、价格、正文里的内链都靠前端脚本生成,渲染环节没跑完,蜘蛛看到的就是一个空框架。抓取日志显示成功,提取出来的内容却是空的。
顺着抓取路径减少无效功
与其事后猜为什么没进索引,不如在抓取路径上少给蜘蛛添麻烦:
- Sitemap 里只放规范 URL,不要既放各参数版本的列表页,又放规范版本。
- 内链统一指向规范地址,避免同一内容被多个入口指向不同写法。
- 对筛选、排序、站内搜索结果页,要么用 noindex 明确表态,要么用参数处理规则收敛。
- 列表页只保留有实际内容的页码,空结果页不要留下可抓取链接。
自查时看几个地方
- 日志里抓取量最大的 URL 是哪些,它们是不是真的需要被抓。
- Sitemap、内链、canonical 三处声明的规范地址是否一致。
- 返回 200 的页面里,有多少是内容为空或高度雷同的。
- 关键页面在不执行 JS 的情况下,能否看到正文和链接。
抓取是入口,不是结论。把精力放在让 URL 唯一、内容可读、抓取路径清晰上,比盯着单次抓取记录更有意义。至于最终是否进入索引,由搜索引擎综合判断,站点能做的是减少它做判断时的干扰。