robots.txt 是站点和搜尋蜘蛛之間最基础的约定文件。它本身不复杂,却经常被一次改版、一次临时測試改得面目全非。很多抓取上的異常並不是服務器挂了,而是這份文件里的某一行規則,正好挡住了本来不该挡的目錄。
為什么這份文件需要定期自查
站点结构在變,栏目在加,測試目錄在建,而 robots.txt 往往是最少被打開的文件。上线时寫好的規則,過半年可能已经和實际情况對不上:已经刪除的目錄還挂在 Disallow 里,新上线的栏目忘了放開,临时屏蔽的測試路径一直没恢复。這些改動都不會报错,只會安静地让蜘蛛少走一些路。
第一步:確認文件本身能被正常訪問
- 直接在浏览器打開 域名/robots.txt,確認返回 200,而不是 404、403 或跳轉到首頁。
- 检查服務器是否對 robots.txt 做了登入校驗、UA 限制或防火墙拦截。
- 確認文件编碼為 UTF-8,没有多余的 BOM 或編輯器儲存时带出的異常字符。
- 如果站点有多個域名或子域,每個域下都要有對應文件,不要只维護主站那一份。
常见容易寫错的几處規則
- 把整站拦死:Disallow: / 是最危險的一行,多用于測試环境,迁移到正式环境後容易忘记刪除。
- 路径寫法不一致:規則按前缀匹配,寫 /news 會同时影响 /news 和 /news-old,需要更精确时记得补上斜杠。
- 誤伤静態资源:屏蔽 js、css、图片目錄後,蜘蛛拿不到渲染所需的文件,對頁面内容的判断可能失真。
- Allow 與 Disallow 冲突:通常以更具体、更長的那條為准,但不同實現细节有差异,最好的做法是不要制造冲突。
- 多寫或少寫注释符:行首差一個 #,規則就從生效變成無效,反之亦然。
robots.txt 與 noindex 的分工
robots.txt 控制的是“能不能抓”,頁面上的 noindex 控制的是“能不能留”。两者不能互相替代。如果某個頁面已经用 robots.txt 禁止抓取,蜘蛛就讀不到頁面里的 noindex 标簽,這個地址仍可能因為外鏈而以缺少描述的形式出現在结果中。對确實不该出現的頁面,更稳妥的组合是:允许抓取,但让頁面返回 noindex。
和站点地图、服務器日誌配合看
robots.txt 里可以声明 Sitemap 地址,方便蜘蛛找到 URL 清單。声明之後建议顺手核對一下:站点地图里提交的目錄,是否有哪一類正好被 Disallow 挡住了。這種自相矛盾很常见,蜘蛛按規則不去抓,清單又反复提交,双方都白費力气。
自查时也可以结合服務器日誌,看看被拦截的請求中是否包含搜尋蜘蛛。如果某段時間蜘蛛訪問量突然归零,先別急着怀疑站点出了問题,打開 robots.txt 看一眼往往更快。
一份可执行的自查清單
- 打開文件,確認狀態碼和内容正常。
- 逐行讀一遍,标出每條規則對應的真實目錄。
- 检查是否存在 Disallow: / 或整目錄封禁。
- 確認静態资源、图片目錄未被誤伤。
- 確認需要被發現的栏目没有被拦住。
- 確認 Sitemap 地址正确且可訪問。
- 確認没有把不该暴露的临时目錄寫進文件。
- 改動留档,注明時間和原因。
robots.txt 不是一次寫完就完事的配置,它更像一張门禁說明。每次结构調整後顺手看一眼,比事後排查抓取異常省事得多。