很多站点在改版、上測試环境或做临时限制时,會動到 robots.txt。這份文件只有几行,却直接决定蜘蛛能不能進来。改動前如果不做自查,很容易出現两種情况:一是把整站屏蔽了却没人發現,二是把 CSS、JS、图片一起封掉,蜘蛛拿到的是一個残缺頁面。
第一步:確認文件本身可訪問
先別急着看規則内容,先確認這份文件能被正常讀到。在浏览器里直接打開對應地址,观察它返回的是不是一個纯文本文件。如果服務器把未知路径统一跳轉到首頁,或者返回 200 却带着一整個 HTML 模板,蜘蛛讀到的東西和你以為的完全不同。
- 返回碼是否正常,是否為 200;
- 是否是纯文本,有没有混入 HTML 代碼;
- 是否被 CDN 或防火墙拦截,導致蜘蛛拿到 403;
- 是否存在多個版本,比如 http 與 https、带 www 與不带 www 各有一份且内容不一致。
第二步:逐條讀一遍 Disallow 規則
規則少的时候,人眼逐條讀最可靠。重点看有没有一條全局屏蔽忘了删,這類問题在改版、迁移、測試上线之後特別常见。
常见的誤封對象
- 整站目錄,通常是測試期間寫的全局屏蔽;
- 静態资源目錄,比如 /static/、/assets/、/js/,導致蜘蛛看到的頁面没有样式和交互;
- 图片目錄或上传目錄,让正文里的图片無法被發現;
- 栏目目錄本身,而不是只屏蔽其中的篩選參數;
- 带通配符的規則,把带參數的正常頁面一起杀掉。
通配符和結束符要寫清楚
星号匹配任意字符,美元符号匹配结尾,两者组合时含义差別很大。寫規則时建议先在本地或用驗證工具確認匹配结果,別凭感觉。同一份文件里規則互相覆盖时,通常以更具体的那條為准,但這種依赖顺序的寫法越少越好维護。
第三步:想清楚屏蔽和 noindex 的区別
robots.txt 表達的是不要抓取,不等于不要收錄。被屏蔽的地址,蜘蛛看不到頁面上的 noindex,如果外部有連結指向它,仍有可能以一個没有描述的條目形式出現。所以:
- 想让頁面完全不出現在结果里,應该让它可抓取,並在頁面上返回 noindex;
- 想省抓取预算、不想让蜘蛛把時間花在無關地址上,才用 robots.txt 屏蔽;
- 两者混用时要格外小心,尤其是只靠 robots.txt 屏蔽的頁面,往往處于一種模糊狀態。
第四步:別把 robots.txt 当保密工具
這份文件是公開的,任何人都能讀。把後台地址、内部接口、未上线的活動頁寫在 Disallow 里,等于對外公布了一份目錄。真正的敏感目錄應该靠登入鉴權、IP 限制或密碼保護来解决,而不是指望蜘蛛不去看。
上线與改版时的检查清單
- 測試环境用的全局屏蔽是否已经刪除;
- 静態资源、图片、字体目錄是否可抓取;
- 是否声明了站点地图,地址是否正确、可訪問;
- http 與 https、www 與非 www 版本内容是否一致;
- 改動後是否在日誌里连續观察几天蜘蛛抓取量的變化;
- 是否记錄了改動時間,方便出問题时回滚。
robots.txt 是门口的一張告示,不是门鎖。它的作用是告诉蜘蛛哪些地方不用去,而不是保護内容不被看到。
改完之後盯几天日誌
修改 robots.txt 後,抓取行為不會立刻變化,通常需要几天到几周才能看出趋势。建议對比改動前後的抓取量、被抓頁面的類型分布,確認没有出現整站抓取量骤降、或者只剩静態资源被抓這類異常。如果發現不對,第一時間回滚到上一版,而不是繼續叠加新規則去补救。
這份文件不大,但值得在每次上线、改版、迁移时都過一眼。把它固定成一個動作,比出事之後再回头找原因省事得多。