站点的抓取控制通常分三层:robots.txt 管站点級,nofollow 管連結級,還有一层常被忽略——頁面級指令,也就是 HTML 里的 meta robots 标簽和 HTTP 响應头里的 X-Robots-Tag。它們不决定蜘蛛能不能来,而是决定蜘蛛看到内容之後怎么處理。
頁面級指令可以寫在哪里
- HTML 的 meta 标簽:寫在 head 区域,格式是 meta name 為 robots、content 里放具体指令,只對 HTML 頁面生效。
- HTTP 响應头的 X-Robots-Tag:對任何類型的内容都有效,包括 PDF、图片、脚本文件,這是它比 meta 标簽更實用的地方。
- 针對單個爬虫的寫法:把 robots 換成具体的爬虫名稱,只有该爬虫遵守,其他爬虫仍按預設規則處理。
noindex 和 nofollow 是两件事
noindex 的意思是“可以抓,但別進索引”;nofollow 的意思是“頁面可以看,但頁面里的連結不要顺着走”。很多人把 noindex 当成屏蔽手段用,结果是頁面被反复抓取,只是不出現在搜尋结果里,抓取资源照样消耗。
真正想阻止抓取,只能靠 robots.txt 或服務器层面拦截。但這里有個经典矛盾:被 robots.txt 屏蔽的 URL,蜘蛛讀不到頁面上的 noindex,于是這個地址仍可能以缺少描述的形式挂在索引里。想让它彻底登出,通常要先放開抓取、让蜘蛛讀到 noindex,確認生效後再考虑屏蔽。
X-Robots-Tag 的几個實用场景
- 批量控制非 HTML 文件:一批對外 PDF 不想被索引,改响應头比逐個改文件省事得多。
- 临时頁面或測試环境:對整段路径统一下發指令,比逐個頁面加标簽可靠。
- 需要统一口径的精细指令:noarchive、max-snippet 這類設定寫在响應头里更容易保持一致。
與 canonical、robots.txt 怎么配合
canonical 表達的是“哪個地址是正主”,頁面級指令表達的是“這個頁面要不要出現在结果里”,两者不冲突,但必须方向一致。常见错誤是:A 頁 canonical 指向 B 頁,同时又给自己加 noindex,蜘蛛讀到两套相反的信号,只能靠猜来處理。
頁面級指令只影响處理方式,不影响抓取本身。把“不抓”和“不要索引”混為一谈,是抓取资源被白白消耗的常见原因。
上线前的自查清單
- 確認指令寫在 head 里或响應头里,位置正确、拼寫無誤。
- 用抓取工具查看蜘蛛實际收到的响應头,而不是只看頁面源碼。
- 检查是否同时存在 robots.txt 屏蔽與 noindex,避免两邊互相抵消。
- 變更後观察訪問日誌與索引狀態,给蜘蛛留出重新抓取和更新的周期。
頁面級指令是抓取控制里最细的一层。用對了能省下不少抓取资源,用错了則可能让頁面既抓不到、也進不了索引。把它和 robots.txt、内鏈结构、Sitemap 放在一起整体看,抓取路径才會清晰。