蜘蛛池入口頁有两件事必须分開看:蜘蛛能不能抓,和抓到的頁面會不會被放進索引。前者归 robots.txt 管,後者主要由 meta robots 或 X-Robots-Tag 管。很多入口頁的問题不是出在内容上,而是這两個開關被打反了——要么蜘蛛根本進不来,要么進来之後整站结构留在了搜尋结果里。
一、robots.txt 管的是「来不来」
robots.txt 属于抓取层的约定,蜘蛛在訪問頁面前通常會先請求它。寫法不复杂,但粒度直接决定了入口頁的命运:
- Disallow: / 會让遵守規則的蜘蛛放弃整站,入口頁也就失去了被發現的机會,除非有外鏈把蜘蛛從別處引過来。
- 只 Disallow 具体目錄,其他路径照常被抓,入口頁仍然可以被發現和訪問。
- Allow 用来在整体禁止的基础上開一個口子,規則按最長匹配優先,長度相同时 Allow 優先。
還有一個容易被忽略的前提:robots.txt 本身要能正常返回 200。如果它返回 5xx,部分蜘蛛會保守處理,短期内降低抓取频率;如果返回 404,等于没有規則,蜘蛛按預設可抓来處理。
二、noindex 管的是「留不留」
给了抓取许可,並不代表希望頁面進索引。入口頁大多是中轉性质,出現在搜尋结果里意义有限,還可能让站與站之間的關联更明顯。控制索引主要有几個层次:
- meta robots 的 noindex:寫在 HTML 的 head 中,只對 HTML 頁面有效,對其他類型资源不起作用。
- X-Robots-Tag 响應头:可以作用在任意類型的响應上,包括文件下载和重定向响應,在服務器或 CDN 层配置,改動成本更低。
- 分 UA 的 robots 規則:為特定蜘蛛單獨指定,但這仍然属于抓取层控制,替代不了 noindex。
三、最常见的一種自相矛盾
用 Disallow 挡住頁面,同时又指望 noindex 生效——這是最典型的冲突寫法。
逻辑並不复杂:Disallow 让蜘蛛不去抓這個 URL,它就永遠讀不到頁面里的 noindex 指令,頁面反而可能因為外鏈存在而被收錄成一個只有連結没有摘要的结果。如果目标是「不留在索引里」,正确顺序是允许抓取、返回 200、明确 noindex,让蜘蛛讀到指令後按流程處理。
反過来,如果只是不想让蜘蛛把抓取预算浪費在某個目錄上,用 Disallow 就够,不必再叠一层 noindex。
四、几個容易忽略的细节
- robots.txt 有缓存:蜘蛛不會每次訪問都重新讀一遍,改動後生效存在延迟,別指望立刻看到變化。
- noarchive 與 nosnippet:控制的是快照和摘要展示方式,和「是否進索引」不是同一件事。
- 重定向鏈上的响應头:X-Robots-Tag 加在 301 或 302 响應上时,蜘蛛通常按最终落地頁的指令判断,中間跳轉的头部不一定被采纳。
- 拼寫與大小寫:noindex 寫成 no-index、noIndex 都不被识別,等于没寫。
五、從日誌里驗證設定
配置完不等于生效,改完規則後看 access log 时重点關注三件事:蜘蛛是否稳定地請求了 robots.txt;入口頁的抓取频次有没有異常下滑;noindex 生效之後,原本有展示的入口頁曝光是否逐步归零。如果發現蜘蛛彻底不来了,優先检查 robots.txt 是不是有语法错誤或返回了 5xx,而不是急着去改内容。
把抓取许可和索引许可当成两件獨立的事来配,入口頁的行為會稳定很多。真正难的從来不是寫對指令,而是在動手之前想清楚:這一步是想让蜘蛛少来,還是想让蜘蛛来了也別记住。