robots 相關指令是入口頁配置里最容易被忽略、又最容易造成誤伤的一环。它本身不是安全措施,只是给爬虫的一份“說明文件”,告诉對方哪些可以抓、哪些不建议抓。入口頁的作用是让蜘蛛發現並顺着連結走到目标頁,如果 robots 配置把這條路堵住,前面的域名、IP、模板工作基本白做。
三種常见寫法,作用范围不一样
- robots.txt:放在域名根目錄,對整個站生效,按 UA 或目錄做允许/禁止。蜘蛛要先取這個文件,再决定抓什么。
- meta robots:寫在頁面 head 里,只對目前頁生效,能設定 noindex、nofollow、noarchive 等。
- X-Robots-Tag:放在 HTTP 响應头,效果類似 meta robots,适合非 HTML 文件或不想改模板的场景。
三者優先級不完全相同,但共同点是:Disallow 只是“別来抓”,不等于“別收錄”。如果頁面已被別處連結指向,仍可能以無摘要的形式出現在结果里。想真正让頁面登出索引,通常先用 noindex 让蜘蛛抓到並讀到指令,等頁面從索引里登出後,再考虑用 robots.txt 屏蔽。
入口頁该放開的几類
入口頁的职责是“被發現”,所以大多數情况下應该允许抓取。需要重点检查的是:
- 入口頁本身没有被誤寫進 Disallow,批量生成模板时最容易整段複製错。
- CSS、JS 這類渲染资源不要屏蔽。蜘蛛要执行脚本才能看到完整内容时,屏蔽资源可能導致它按空白頁理解。
- 跳轉鏈上的中間頁,如果靠 JS 或 meta refresh 跳轉,更需要允许抓取,否則蜘蛛到不了目标頁。
- 如果入口頁存在大量篩選參數,可以只放開必要參數,把無意义组合放進 Disallow,减少無效抓取。
该收紧的几類
- 後台、測試頁、資料接口:這些頁面没有分發價值,被抓只會消耗资源,也容易暴露站点结构。
- 重复内容頁:同一批入口頁的多個排序、分頁變体,可以用 canonical 或 robots 收敛,不必全部放開。
- 已决定停用的入口頁:如果只是不想让它再被抓,用 robots.txt 屏蔽比直接删掉更省事;如果整個入口頁群要退役,返回 410 或 301 到有效頁更清晰。
几個反复出現的誤区
第一個誤区是用 robots.txt 当作“隐藏入口頁”的手段,以為蜘蛛看不到就不會识別出這是入口頁群。實际上入口頁一旦被外部連結、歷史记錄或 sitemap 暴露,屏蔽指令反而更顯眼,而且這種方式對真實訪客同样無效。
第二個誤区是“先全站 Disallow,观察一阵再说”。全站屏蔽後再恢复,蜘蛛重新抓取的节奏往往比预期慢,入口頁的發現周期會被拉長。如果只是担心某個目錄,按目錄屏蔽即可。
第三個誤区是同一批入口頁里混用 noindex 和 Disallow。两者组合的结果是“蜘蛛抓不到、也就讀不到 noindex”,頁面可能長期停留在索引里。需要用 noindex 时,就先別用 Disallow。
把 robots 当成一份给爬虫的通行說明,而不是安全鎖。入口頁要能被抓到,中轉环节要能走通,不想被索引的頁面用 noindex 處理,不想被抓的目錄用 Disallow 處理——顺序別搞反。
落地时的检查清單
- 入口頁域名根目錄是否有 robots.txt,内容是否符合预期,是否残留測試环境的屏蔽規則。
- 入口頁模板里是否带上了不该有的 meta robots,常见于整站複製的模板。
- 服務器响應头里是否有多余的 X-Robots-Tag。
- 停用、改版、迁移過的入口頁,robots 規則是否同步更新,避免“頁面已 301 但舊規則還屏蔽着新路径”。
- 改完規則後,用抓取測試工具實际驗證一次,而不是只看配置文件。
規則本身不复杂,难的是保持一批入口頁的配置一致。批量生成时把 robots 相關項做成统一模板,比事後逐個排查省力得多。