搭蜘蛛池时,很多人把精力全放在入口連結、域名數量和抓取日誌上,却很少回头检查一個最基础的東西:自己的拦截規則。robots.txt 和 meta robots 属于一票否决型配置,入口铺得再多,只要這两處寫错,蜘蛛到了门口也會掉头。
robots.txt:一個字符寫错就可能封掉整站
robots.txt 是蜘蛛訪問域名时優先請求的文件。它本身消耗不了多少抓取预算,但它决定了後續所有請求是否被允许。
- Disallow 寫得太宽。比如想屏蔽後台,寫成 Disallow: /,结果整個站都被挡住。更稳妥的做法是精确到目錄,如 Disallow: /admin/。
- User-agent 名稱不匹配。規則里的 UA 名字要和蜘蛛實际使用的名字對應。寫错时規則往往不生效,等于預設放行;反過来,如果誤匹配了其他 UA,也可能誤伤。
- 文件位置或返回碼不對。robots.txt 必须放在根目錄。如果服務器返回 404,蜘蛛通常视為無限制;如果返回 5xx,蜘蛛可能暫停抓取一段時間,反而更麻烦。
- 通配符和结尾符滥用。* 和 $ 在不同引擎上的支持程度不一致,別把關键路径寫成模棱两可的模式,否則本意是放開,實际却被挡。
一個實用习惯:改動 robots.txt 後,用抓取工具模拟一次蜘蛛訪問,確認返回碼和目标路径都在预期内,再去看日誌。
meta robots 與 X-Robots-Tag:頁面級的開關
如果 robots.txt 管的是能不能進来,meta robots 管的就是進来之後怎么處理。常见取值包括 noindex、nofollow、noarchive、nosnippet 等。
- noindex 與 nofollow 是两回事。noindex 表示不要收錄该頁,nofollow 表示不要沿该頁上的連結繼續爬。想保留入口頁的爬取通道,就不要顺手加上 nofollow。
- X-Robots-Tag 是 HTTP 头版本。它适合用在图片、PDF、JS 等非 HTML 资源上,也可以通過服務器配置整站下發。注意两者同时存在时,通常取更嚴格的那個。
- JS 渲染出的 meta 要不要依赖?部分蜘蛛會渲染後再判断,但不要把關键拦截逻辑放在 JS 里,依赖渲染存在延迟和不确定性。
几個容易踩的誤区
- 用 noindex 屏蔽入口頁,却指望蜘蛛繼續往下抓。noindex 不等于 nofollow,但長期不给收錄信号,蜘蛛對這個入口的估值會走低。
- 多层跳轉里某一环被 disallow。入口正常,第二跳或第三跳被拦,蜘蛛走到一半就断了。
- 測試环境的拦截規則被带到线上。上线前核對一遍,比事後排查省事得多。
- 只检查 HTML 里的 meta,忘了服務器响應头里的 X-Robots-Tag。
落地建议
- 先做一次拦截規則核查:robots.txt、meta robots、X-Robots-Tag 三處都要看。
- 区分环境,測試站的拦截規則別混進线上配置。
- 用服務器日誌驗證:看蜘蛛請求的返回碼,如果大量是 403 或被拒绝,多半是規則之間有冲突。
- 規則改動小而勤,不要一次大改,方便定位問题来源。
蜘蛛池的價值建立在蜘蛛能顺利走通路径上。入口、域名、内容都准备好了,却因為一行 Disallow 或一個 noindex 把路堵死,是很常见的浪費。把拦截規則当成池子的地基,先確認它没寫错,再谈後面的優化,顺序才不會颠倒。