入口頁能不能被蜘蛛正常抓取,一半取决于服務器和網絡,另一半取决于你给蜘蛛的信号。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,規則之間互相矛盾。
上线前的检查清單
- 直接訪問 /robots.txt,確認返回 200,且内容就是你预期的那一份。
- 随机抽一個入口頁,查看源碼里的 meta robots 标簽。
- 用 curl -I 看 X-Robots-Tag 是否存在、值是否正确。
- 確認 sitemap 地址可訪問,且里面的 URL 狀態碼都正常。
- 用抓取日誌复核,蜘蛛是否真的抓到了你希望它抓的那些路径。
robots.txt 和 meta robots 不是設定一次就能長期不管的東西。入口頁批量調整、模板更新、路径改版之後,都要重新走一遍上面的检查,否則很容易出現“以為门開着、其實一直關着”的情况。