搜索抓取

抓取成功之后:蜘蛛走进索引前的那道筛子

蜘蛛抓取成功并不等于页面进入索引。本文梳理页面被取回后要经过的渲染、内容提取、重复判断等环节,说明空壳页、重复 URL、noindex 用法和 JS 渲染为什么会让一次抓取白费,并给出从 Sitemap、内链与 canonical 一致性上减少无效抓取的做法。

搜索抓取

抓取成功之后:蜘蛛走进索引前的那道筛子

翻服务器日志时,很容易把“蜘蛛来过、返回 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 明确表态,要么用参数处理规则收敛。
  • 列表页只保留有实际内容的页码,空结果页不要留下可抓取链接。

自查时看几个地方

  1. 日志里抓取量最大的 URL 是哪些,它们是不是真的需要被抓。
  2. Sitemap、内链、canonical 三处声明的规范地址是否一致。
  3. 返回 200 的页面里,有多少是内容为空或高度雷同的。
  4. 关键页面在不执行 JS 的情况下,能否看到正文和链接。
抓取是入口,不是结论。把精力放在让 URL 唯一、内容可读、抓取路径清晰上,比盯着单次抓取记录更有意义。至于最终是否进入索引,由搜索引擎综合判断,站点能做的是减少它做判断时的干扰。