蜘蛛為什么要先讀 robots.txt
多數搜尋引擎蜘蛛在抓取一個新 URL 之前,會先請求站点根目錄下的 /robots.txt。這份文件本身不參與排名,但它决定了蜘蛛接下来一段時間里能看到什么、看不到什么。寫得好,它是一張指路牌;寫错了,它可能是抓取路径上的第一道断点,而且這道断点往往很难從頁面上看出来。
Sitemap 声明:成本最低的 URL 發現入口
robots.txt 里最值得寫的一行是 Sitemap。它相当于在蜘蛛進入站点的第一時間告诉它「這些地址值得優先看一遍」,尤其對深层頁面和刚上线的内容有效。
- 使用完整的绝對地址,带上协议和域名,不要寫相對路径。
- 一行一個,Sitemap 文件多就多寫几行。
- 多數引擎只接受同站点的 Sitemap 地址,把其他域名的 Sitemap 寫進来通常不會生效。
- 這一行不要寫在 Disallow 規則後面做备注,容易被当成規則的一部分誤讀。
Sitemap 地址不要带跳轉
如果 Sitemap 的地址會 301 到另一個位置,部分蜘蛛會繼續跟過去,但多一次跳轉就多一次失敗的可能。直接寫最终地址,並確認它返回 200。
Allow 與 Disallow:顺序和通配符容易踩的坑
- 規則冲突时,一般按最長匹配生效,而不是按书寫的先後顺序。所以 /search/ 和 /search/abc 同时出現时,要按具体路径去判断哪條命中。
- 路径区分大小寫,/Images/ 和 /images/ 是两條不同的規則。
- 星号匹配任意字符,美元符号表示结尾。/private 會把 /private-notes 一起拦掉,寫成 /private/ 更稳妥。
- Allow 常用来開一個例外:整個目錄被拦掉,但里面某個子路径希望放行。
用 Disallow 挡收錄是常见的誤解
Disallow 只阻止抓取,並不能阻止 URL 被收錄。如果頁面已经被索引,之後又被 Disallow,蜘蛛就看不到頁面上後来补上的 noindex,這個 URL 可能長期留在索引里,只剩标题、没有摘要。這類問题從日誌看往往表現為「有這個地址的抓取记錄,但内容長期不更新」。
想阻止收錄,應该让頁面保持可抓取,並在頁面响應里返回 noindex;想减少抓取压力,才用 Disallow。
誤拦的几種典型场景
- 拦掉 CSS、JS 或图片目錄:蜘蛛需要這些资源才能判断頁面渲染後的内容以及移動端适配。
- 拦掉分頁、篩選參數:這些地址可能是深层内容唯一的入口,拦掉之後蜘蛛可能就不再顺着往下走。
- robots.txt 與 Sitemap 自相矛盾:Sitemap 里提交了一整批 URL,robots.txt 又對整個目錄 Disallow。
- 測試环境規則带到了线上:Disallow: / 忘记删掉,是最直接的全站抓取断点。
Crawl-delay 值不值得寫
不同引擎對 Crawl-delay 的支持並不一致,有的直接忽略。與其在里面寫一個固定間隔,不如观察服務器日誌和响應時間:如果蜘蛛請求集中導致负载升高,更可靠的做法是让服務器在压力大时返回 429 或 503,同时保持响應稳定。抓取速率的變化通常是响應時間和错誤率共同作用的结果,單靠一行声明很难精确控制。
几分钟能做完的自查清單
- 直接在浏览器訪問 /robots.txt,確認返回 200、内容是纯文本,没有被 CDN 或 WAF 拦下。
- 检查有没有 Disallow: / 或整目錄拦截。
- 確認 Sitemap 地址可訪問、是最终地址、不發生跳轉。
- 從 Sitemap 里抽几條 URL,用 robots.txt 的規則過一遍,看是否被誤拦。
- 確認没有拦掉 CSS、JS、图片目錄。
- 改完規則後观察一段時間日誌,看蜘蛛對目标目錄的請求是否恢复。
robots.txt 不需要反复重寫,但值得定期核對一次。它决定的是蜘蛛能看到什么,只有這一步不出错,後面的 Sitemap、内鏈结构和抓取预算才有發挥的余地。