入口頁能不能被蜘蛛抓到,除了連結结构和服務器响應,還有一层很容易被忽略的開關,就是 robots 相關指令。它可能寫在 robots.txt、頁面的 meta 标簽或 HTTP 响應头里,形式不同,作用也不同。配错了,前面铺的入口頁和連結可能根本传不出去;配對了,至少能保證蜘蛛该看的地方能看到、不该浪費的地方不浪費。
先分清三件事:抓取、索引、跟随
讨论 robots 設定之前,要先把三件事拆開:蜘蛛来不来抓這個 URL(抓取)、抓到的頁面要不要進索引(索引)、頁面里的連結要不要繼續跟下去(跟随)。這三個開關互相獨立,很多人把它們当成一件事,才會出現「明明放行了却没有收錄」或者「明明禁止了却還在结果里」這類困惑。
robots.txt 的 Disallow:挡的是抓取,不是索引
robots.txt 是最外层的一层規則。Disallow 一個路径,意思是告诉遵守規則的蜘蛛別来抓這個目錄下的 URL。它有几個特点值得注意:
- 它只约束抓取行為,不负责把已经收錄的頁面從索引里移除。頁面如果被外部連結指向,仍可能以僅連結的形式出現。
- 被 Disallow 的頁面,蜘蛛看不到里面的内容,自然也就看不到頁面上的連結。如果入口頁承担着把蜘蛛引向目标頁的任務,禁止抓取等于自断鏈路。
- 規則按最長匹配優先,少寫或多寫一個斜杠,都可能把整個目錄挡掉,改動前最好用日誌或測試方式驗證一遍。
meta robots 與 X-Robots-Tag:控制索引和跟随
頁面級的指令更细。常见取值有 noindex、nofollow、noarchive 等,用逗号分隔可以叠加。它們只對已经被抓到的頁面生效——蜘蛛没抓到頁面,就讀不到這行 meta。這一点正好和 robots.txt 的 Disallow 形成對照:
- 想让頁面從索引里消失,用 noindex,並且必须让蜘蛛能抓到頁面,否則它讀不到這個指令。
- 不想让蜘蛛顺着頁面上的連結繼續爬,用 nofollow。但它只是建议,蜘蛛未必完全照做。
- X-Robots-Tag 是寫在 HTTP 响應头里的等價形式,适合非 HTML 文件,也方便在服務器层面统一加。
几種規則叠加时,通常是最嚴格的那條起作用。比如 robots.txt 禁止抓取、頁面又寫了 noindex,最後的结果往往不是干净移除,而是頁面留在索引里却無法被更新。
蜘蛛池入口頁通常怎么配
入口頁的角色是被發現、被讀取、把連結传出去,所以常規做法是允许抓取、允许跟随,不要顺手在入口頁上叠加 noindex。真正需要收紧的往往是另外几類頁面:
- 纯中轉頁、空壳頁,如果不希望它們占據索引位,可以在允许抓取的前提下加 noindex,让蜘蛛讀到連結但不保留頁面。
- 參數拼接出来的重复 URL,優先用 canonical 和參數處理規則解决,而不是一上来就 Disallow 整個參數目錄。
- 後台、測試、統計類路径,直接用 robots.txt 挡掉,减少無意义的抓取消耗。
几個容易踩的誤区
把 robots.txt 当成清理工具,是入口頁配置里最常见的誤解。它管的是抓取,不管索引;想移除頁面,需要頁面本身可被抓取、並返回 noindex,或者用其他合規方式處理。
- 改了 robots.txt 却忘了蜘蛛會缓存舊版本,規則生效有延迟,別改完当天就下结论。
- 入口頁模板批量複製时,把 nofollow 一起複製進去,連結全部不被跟随,等于白建。
- 用脚本或响應头動態下發 robots 指令,蜘蛛如果拿不到那段脚本,指令就不存在。
上线前可以過一遍的检查項
- robots.txt 能正常訪問,返回 200,没有因為服務器故障變成 5xx 或跳轉。
- 入口頁路径没有被 Disallow 誤伤,日誌里能看到蜘蛛的實际訪問记錄。
- 入口頁 meta 里没有意料之外的 noindex、nofollow。
- 入口頁與目标頁的 robots 規則不冲突。
- 規則改動留档,方便對照之後抓取資料的變化。
總体来说,robots 相關設定属于入口頁的基础设施,不需要多复杂,但要求前後一致。把抓取、索引、跟随三個開關分清楚,再结合日誌观察實际抓取情况,通常比反复換策略更有效。