蜘蛛池知识

蜘蛛池入口页的索引指令:noindex、canonical 与 X-Robots-Tag 用错会怎样

入口页被蜘蛛抓到,不代表会被收录。robots.txt、meta robots、X-Robots-Tag 与 canonical 这几类索引指令,写错时不会报错,只会让整批页面安静地被排除在索引之外。本文梳理它们的生效顺序、常见误配场景,以及上线前可以逐条核对的自检项。

蜘蛛池知识

蜘蛛池入口页的索引指令:noindex、canonical 与 X-Robots-Tag 用错会怎样

蜘蛛池的入口页能不能被收录,抓取只是前半段。蜘蛛爬到了、下载了 HTML,不等于这一页会进索引——中间的判断依据,很大一部分来自你自己发出的索引指令。这些指令写在 robots.txt、HTTP 响应头和 HTML 的 meta 标签里,改动成本极低,但写错的代价是整批入口页被主动排除,而且在日志里看不到任何报错。

先分清:抓取指令和索引指令是两套东西

robots.txt 管的是“蜘蛛能不能来读”,meta robots 和 X-Robots-Tag 管的是“读完之后要不要收”。很多入口页被排除,不是因为蜘蛛没来,而是来了之后被 noindex 拦下。日志里会出现正常的 200 抓取记录,看起来一切正常,索引里却始终没有这一页。

抓取量是过程指标,索引量才是结果指标。指令写错时,过程看起来完好无损。

三类最常写错的指令

robots.txt:Disallow 不等于删除

  • Disallow 只是请求蜘蛛不要抓,页面仍可能因为外链存在而出现在索引里,只是没有摘要。
  • 用 Disallow 挡住某个目录,同时又在别处放链接,是入口页最常见的自相矛盾。
  • 通配符和目录结尾的写法容易写反,比如 /entry//entry 覆盖范围并不相同。
  • robots.txt 文件本身返回 5xx 或超时,不同蜘蛛的处理策略不一样,有的会暂停抓取整个站。

meta robots 与 X-Robots-Tag:索引指令

HTML 页面用 meta 标签,非 HTML 资源(图片、PDF、接口返回)只能靠 HTTP 头里的 X-Robots-Tag。两者作用相同,同时存在时以更严格的那个为准。

  • noindex:不要把这一页放进索引。
  • nofollow:不跟踪页面里的链接。用在入口页上,等于自己切断了通往目标页的路。
  • noindex 和 Disallow 一起用是典型误配:蜘蛛看不到 noindex,反而可能只凭外链收录一条空记录。

canonical:告诉蜘蛛哪一版算数

canonical 是一个建议,不是强制指令,但它会明显影响权重和索引版本的归并。模板化批量生成入口页时,最容易出的事就是把 canonical 写死指向首页或某个固定 URL,结果所有入口页都被当成副本,蜘蛛不再单独抓取,也不再有单独索引。

  • 自引用 canonical 是常规做法,指向自身即可。
  • 已经确定要合并的重复页面,用 301 比 canonical 更干脆。
  • 分页列表页不要把每一页都 canonical 到第一页,这会丢掉后几页的发现价值。

生效顺序:先抓取,再索引

  1. robots.txt 决定蜘蛛这次能不能读。
  2. HTTP 响应头里的 X-Robots-Tag 先于 HTML 内容被解析。
  3. HTML 中的 meta robots 在解析页面后生效。
  4. canonical 在索引阶段被参考,用于决定保留哪个版本。

顺序意味着:如果第一步就挡住了,后面所有指令蜘蛛都读不到。想用 noindex 下架页面,就不要同时用 Disallow 挡住它。

几个典型的误配场景

  • 上线前的全站 noindex 测试,上线后忘了撤,整批入口页安静地不进索引。
  • CDN 或反向代理缓存了带 noindex 头的旧响应,源站已经改回,蜘蛛拿到的还是旧头。
  • sitemap 里提交了一批带 noindex 的 URL,等于自己给蜘蛛发无效任务。
  • 入口页的 nofollow 加在了正文链接上,只留下导航链接可跟,链接深度被动拉长。

上线前的自检清单

  • curl -I 直接看响应头,确认没有意外的 X-Robots-Tag。
  • 抽查几条入口页的 HTML 源码,确认 meta robots 与 canonical 符合预期,而不是模板默认值。
  • 确认 robots.txt 没有误伤入口页目录,也没有出现 Disallow 与 noindex 叠加。
  • 改动索引指令后,通过日志观察蜘蛛的抓取是否恢复,不要只看一天的数据。

索引指令的特点是“写对了看不出功劳,写错了很安静”。对蜘蛛池这种批量生成、批量上线的场景,把这几项做成固定的上线检查,比事后从日志里倒推原因要省力得多。