搭蜘蛛池时,很多人把精力放在域名、IP、模板上,却忽略了 robots.txt 和頁面里的 meta robots。這两样東西一個在站根,一個在頁面的 head 里,作用都是告诉蜘蛛“能抓什么、不能抓什么”。配错一處,前面铺的入口頁可能全都白做。
两者管的范围不一样
robots.txt 是站点級別的约定,蜘蛛進站前先取一次,决定要不要繼續爬某個目錄或某類 URL。meta robots 是頁面級別的指令,蜘蛛已经把頁面抓下来之後才會讀到,用来决定這個頁面要不要進索引、頁内連結要不要繼續跟。
简單说:robots.txt 管“来不来”,meta robots 管“抓到之後怎么處理”。两者不冲突,但生效顺序不同,也不能互相替代。
入口頁一般怎么配
蜘蛛池入口頁的作用是提供一個可被抓取的跳轉点,所以常規配置是“允许抓取 + 允许索引 + 允许跟随連結”:
- robots.txt 里不要用 Disallow: / 把整站關掉,入口頁被挡在外面,後面就無從谈起。
- 避免在入口頁加 noindex。入口頁本身不需要排名,但被索引過、被抓過的頁面,後續蜘蛛回訪的概率通常更高。
- 頁内指向目标頁的連結不要加 nofollow,否則等于自己把通路掐断。
- 如果入口頁同站還有後台、登入、測試目錄,單獨 Disallow 掉即可,不必一刀切。
几處容易被忽略的地方
Crawl-delay 與請求频率
部分蜘蛛支持 robots.txt 里的 Crawl-delay。设得過大,蜘蛛回訪一次要等很久,入口頁更新再勤也没意义;设得過小甚至不设,又可能给服務器带来压力。多數情况下,靠服務器日誌观察實际抓取频率,再在服務器层做限速,比只依赖 Crawl-delay 更可靠。
Sitemap 声明的位置
robots.txt 里寫 Sitemap 那一行,是给蜘蛛一個額外的發現入口,不是必须,但成本极低。注意寫完整 URL,且该 Sitemap 要能正常返回 200。
meta robots 與 X-Robots-Tag
除了頁面里的 meta 标簽,HTTP 响應头里的 X-Robots-Tag 也能起同類作用。如果两者同时存在且指令冲突,通常以更嚴格的那個為准。排查入口頁不被抓时,两邊都要看一眼。
屏蔽與放開的邊界
常见的两種极端:一種是把 robots.txt 寫成 Disallow: /,以為“先挡起来更安全”,结果是蜘蛛根本不進;另一種是完全不寫,站点里大量重复參數頁、搜尋结果頁被反复抓,白白消耗抓取预算。
判断标准其實很简單:你希望蜘蛛抓的路径,就別挡;你不希望它浪費時間的路径,就明确挡掉。含糊不清的配置,最後往往由蜘蛛来替你决定。
上线前後可以照着做的检查
- 訪問 /robots.txt,確認返回 200,且内容不是程序模板的預設值。
- 確認没有 Disallow: / 之類的全站屏蔽。
- 随机抽几個入口頁,看 head 里有没有誤加的 noindex、nofollow。
- 检查指向目标頁的連結是否可正常跟随,有没有被 JS 事件拦截。
- 上线几天後看日誌,確認蜘蛛确實讀到了 robots.txt 並繼續抓取。
几個常见誤区
- 以為 robots.txt 能保密:它只是约定,不是訪問控制,敏感路径應该用權限或 IP 限制来處理。
- 用 robots.txt 代替刪除:已被索引的 URL 即使被 Disallow,也可能仍留在索引里,需要配合 noindex 等方式處理。
- 所有子域共用一份配置:robots.txt 按主机名生效,子域要單獨提供。
把這几處理顺,入口頁至少不會在第一步就被自己挡住。剩下的,才是模板、IP、更新节奏這些更细的活。