蜘蛛進入池子时,最先請求的经常不是入口頁,而是根目錄的 robots.txt。這個文件、頁面里的 meta robots、以及 HTTP 响應头中的 X-Robots-Tag,共同决定了蜘蛛能不能抓、抓到之後怎么處理。這三者里任何一個配错,入口頁都可能白做。
robots.txt 是站点級的抓取開關
robots.txt 只放在域名根目錄,靠 User-agent 分组生效,同一個域名下所有路径共享一份。它控制的是抓取,不是索引——被 Disallow 挡住的 URL,蜘蛛连内容都讀不到。
- 別顺手全站禁止。入口頁要被抓取,就不要出現 “Disallow: /” 這類寫法,除非你确實只需要蜘蛛讀 robots.txt 本身。
- 注意前缀匹配。“Disallow: /pool/” 會连带挡住 /pool/a.html 等所有下級路径,目錄粒度要提前想清楚。
- 別挡静態资源。入口頁若依赖 CSS、JS 渲染,把资源目錄一起禁掉,蜘蛛看到的可能是残缺頁面。
- 多域名多份規則。每個入口域名都有各自的 robots.txt,批量建池时要確認没有繼承到舊規則。
meta robots 與 X-Robots-Tag 的区別
meta robots 寫在 HTML 的 head 里,X-Robots-Tag 走 HTTP 响應头。两者指令集大致相同,但生效前提不同:meta 需要頁面被成功抓取並解析才能讀到,X-Robots-Tag 在拿到响應头的那一刻就能生效,非 HTML 文件也能用。
- noindex 表示不要把该頁放進搜尋结果,但不影响抓取和連結跟随。
- nofollow 表示不要沿着頁面上的連結繼續走,用它會影响入口頁向外传递的發現路径。
- none 等價于 noindex 加 nofollow,使用时要想清楚它的双重含义。
- X-Robots-Tag 的语法要寫全,例如 “X-Robots-Tag: noindex”,缺前缀會變成無效响應头。
入口頁常见的几種组合
入口頁的角色是“被蜘蛛發現、並把蜘蛛送到目标頁”,所以多數情况下希望它可抓取、連結可跟随。
- 只希望蜘蛛走一遍、不想让入口頁出現在结果里:保持可抓取,加 noindex,連結仍然 follow。
- 入口頁本身也是内容頁:正常 index、follow,重点轉向内容质量與更新节奏。
- 临时停用的入口頁:更推荐返回 404 或 410,而不是用 robots.txt 去遮,遮住只會让蜘蛛反复尝试。
- 測試阶段的頁面:用 X-Robots-Tag 在服務器层临时加 noindex,比改模板更快也更可控。
几個容易踩的坑
- robots.txt 與 noindex 叠加。先 Disallow 再指望 meta noindex 生效,逻辑上不成立——蜘蛛讀不到頁面,自然也讀不到 meta。
- CDN 或 WAF 返回的 robots.txt 不是你寫的那份。有些节点會自動生成或缓存舊版本,排查时要看實际响應内容,而不是看源站文件。
- 返回 403、503 时怪 robots。那多半是防火墙或源站限流導致的,與 robots 規則無關,日誌里的狀態碼能区分。
怎么驗證配置是否生效
- 用命令行带指定 User-Agent 請求一次,看响應头和正文字段是否與预期一致。
- 在搜尋资源平台的 robots 測試工具里跑一遍,確認目标 URL 處于允许抓取狀態。
- 翻 access log,看蜘蛛是否請求過 robots.txt、請求之後有没有繼續訪問入口頁。
robots 相關配置的改動成本很低,影响面却很大。動手之前先確認要的是“不被抓”還是“不被收錄”,這是两個完全不同的開關。