搜尋抓取

robots.txt 是蜘蛛的第一站:Sitemap 声明與誤拦會怎样改變抓取路径

蜘蛛抓取前通常先請求 robots.txt,它既是拦截名單,也是 Sitemap 的声明入口。寫對 Sitemap 行、理清 Allow 與 Disallow 的匹配顺序,可以减少誤拦造成的抓取路径中断;同时要注意,Disallow 並不能阻止收錄,只會让蜘蛛看不到頁面上的 noindex。下面梳理常见的寫错方式和自查顺序。

搜尋抓取

robots.txt 是蜘蛛的第一站:Sitemap 声明與誤拦會怎样改變抓取路径

蜘蛛為什么要先讀 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,同时保持响應稳定。抓取速率的變化通常是响應時間和错誤率共同作用的结果,單靠一行声明很难精确控制。

几分钟能做完的自查清單

  1. 直接在浏览器訪問 /robots.txt,確認返回 200、内容是纯文本,没有被 CDN 或 WAF 拦下。
  2. 检查有没有 Disallow: / 或整目錄拦截。
  3. 確認 Sitemap 地址可訪問、是最终地址、不發生跳轉。
  4. 從 Sitemap 里抽几條 URL,用 robots.txt 的規則過一遍,看是否被誤拦。
  5. 確認没有拦掉 CSS、JS、图片目錄。
  6. 改完規則後观察一段時間日誌,看蜘蛛對目标目錄的請求是否恢复。

robots.txt 不需要反复重寫,但值得定期核對一次。它决定的是蜘蛛能看到什么,只有這一步不出错,後面的 Sitemap、内鏈结构和抓取预算才有發挥的余地。