蜘蛛池知识

蜘蛛池入口頁的 robots.txt 與 meta robots:怎么给蜘蛛開门而不是關门

robots.txt 和 meta robots 是蜘蛛接近入口頁时最先看到的信号,配错一處,整批入口頁都可能抓不到。本文梳理 Allow 與 Disallow 的取舍、Crawl-delay 的适用场景、Sitemap 声明方式,以及 meta robots 與 X-Robots-Tag 的差別,並附一份上线前的检查清單。

蜘蛛池知识

蜘蛛池入口頁的 robots.txt 與 meta robots:怎么给蜘蛛開门而不是關门

入口頁能不能被蜘蛛正常抓取,一半取决于服務器和網絡,另一半取决于你给蜘蛛的信号。robots.txt 和 meta robots 就是最基础的两個信号,配置错了,後面的资源、内容、跳轉鏈路都白搭。

robots.txt 在蜘蛛池里扮演什么角色

robots.txt 是蜘蛛訪問一個站点时最先取的几個文件之一。它不控制收錄,只控制抓取行為。對蜘蛛池来说,它的作用主要是三個:告诉蜘蛛哪些路径可以抓、限制抓取频率、声明 sitemap 位置。

入口頁通常希望被频繁抓取,所以整体思路是“放開為主、限制為辅”。真正要拦的是後台、測試目錄、日誌文件這類和抓取無關的内容。

Allow 與 Disallow 的取舍

  • 只拦明确無用的目錄,比如 /admin/、/tmp/、/logs/,以及带 session 參數的動態地址。
  • 不要用 Disallow 去“管理”頁面质量。屏蔽一個入口頁,蜘蛛就不會再去,等于自己断掉一條入口。
  • 注意路径匹配多按前缀處理,寫 /go/ 可能连 /goods/ 一起拦掉。

Crawl-delay 要不要寫

百度支持 Crawl-delay,Google 基本忽略,它更依赖服務器返回错誤时的自動降速。入口頁數量多、單机承载有限时,可以设一個偏保守的值;但如果你本来就指望蜘蛛多来,寫一個很大的 delay 反而會拖慢發現节奏。更稳妥的做法是靠服務器限速和抓取日誌观察来調节,而不是只依赖這一行。

Sitemap 声明

把入口頁的 sitemap 地址寫進 robots.txt,能减少蜘蛛空跑的時間。sitemap 建议按批次拆分,單個文件不要塞太多 URL,並且只放狀態正常、可被抓取的頁面。

meta robots 與 X-Robots-Tag

meta robots 寫在 HTML 的 head 里,控制粒度到單個頁面;X-Robots-Tag 寫在 HTTP 响應头里,适合控制非 HTML 资源以及批量下發規則。两者同时存在且冲突时,通常以更嚴格的那條為准。

  • noindex:頁面可被抓取但不索引。入口頁一般不用,除非它本身就是纯中轉頁。
  • nofollow:不追踪頁面上的連結。入口頁的核心價值就是往外導出連結,加這個等于自废武功。
  • noarchive / nosnippet:只影响快照與摘要展示,不影响抓取本身。
批量建站时最容易出的事故,是模板里带了一個 nofollow 或 noindex,一上线就全量生效,而且很难第一時間察觉。上线前先抓一個頁面看源碼。

常见配置坑

  • robots.txt 返回 5xx,蜘蛛會当作暂时不可用,一段時間内可能减少或停止抓取。
  • 寫過 Disallow: / 之後忘了改回来,整站直接關门。
  • 用 robots.txt 把跳轉路径也拦掉,蜘蛛到了入口却走不到目标頁。
  • 多個子域各自维護一份 robots.txt,規則之間互相矛盾。

上线前的检查清單

  1. 直接訪問 /robots.txt,確認返回 200,且内容就是你预期的那一份。
  2. 随机抽一個入口頁,查看源碼里的 meta robots 标簽。
  3. 用 curl -I 看 X-Robots-Tag 是否存在、值是否正确。
  4. 確認 sitemap 地址可訪問,且里面的 URL 狀態碼都正常。
  5. 用抓取日誌复核,蜘蛛是否真的抓到了你希望它抓的那些路径。

robots.txt 和 meta robots 不是設定一次就能長期不管的東西。入口頁批量調整、模板更新、路径改版之後,都要重新走一遍上面的检查,否則很容易出現“以為门開着、其實一直關着”的情况。