搜尋抓取

robots.txt 與 URL 發現:挡住抓取之後,地址還剩下什么

robots.txt 的 Disallow 影响的是抓取,不是 URL 是否被發現。本文說明被挡住的地址會處于什么狀態,為什么用 Disallow 處理重复内容常常達不到预期,sitemap 與 robots 規則冲突时會出現什么,以及目錄級規則容易连带挡住哪些路径,最後给出几條可执行的自检方法。

搜尋抓取

robots.txt 與 URL 發現:挡住抓取之後,地址還剩下什么

發現和抓取是两件事

URL 發現解决的是“搜尋引擎知道這個地址存在”,抓取解决的是“實际把内容取回去”。robots.txt 里的 Disallow 管的是後者。一個地址被 Disallow 挡住,並不等于它不會被發現——站外連結、站点地图、其他頁面的引用,都可能让它的地址進入已知列表,只是它多半會停留在“知道但没取”的狀態。

所以 robots.txt 不是隐藏文件的開關,更像是给抓取行為划的一條线。把這两件事混在一起考虑,是不少站点在早期阶段容易踩的坑。

常见誤用:用 Disallow 處理重复内容

比較典型的情况是參數頁、篩選頁、站内搜尋结果頁。站長担心它們被索引,就直接在 robots.txt 里 Disallow 掉。

這里有個容易忽略的连鎖反應:頁面被挡住抓取後,頁面内的 canonical、noindex 這些指令也不會被讀到。搜尋引擎只能看到“這里有個地址,但内容看不到”。至于這個地址最终會不會出現在结果里,往往不受你的規則控制。

  • 想阻止被索引:允许抓取,用 noindex,必要时配合 canonical。
  • 想减少抓取消耗:用 robots.txt 的 Disallow。
  • 两件事都想做,通常要分两步處理,而不是指望一條規則同时解决。

Sitemap 與 robots.txt 的矛盾信号

如果 sitemap 里列出的 URL,正好落在 robots.txt 的 Disallow 范围内,等于同时發出了两個相反的信号。這不一定立刻造成嚴重後果,但會让發現與抓取的判断變得模糊,排查問题时也说不清到底是哪一环出了偏差。

把一條路径寫進入口列表之前,先確認它是“希望被看到”還是“希望被跳過”。两種意图出現在同一處,通常說明規則该拆開了。

目錄級規則容易连带挡住什么

把不该挡的资源一起挡住

寫 /shop/ 這样的整目錄規則时,要確認目錄下是否還有 CSS、JS、图片。這些资源如果被挡,渲染出来的頁面可能不完整,抓取到的内容和你肉眼看到的會有差异。

前缀匹配带来的意外覆盖

Disallow 是前缀匹配,寫 /news 會同时盖住 /news 和 /newsletter。這種覆盖在目錄命名比較随意的站点里尤其隐蔽,通常要等到某個栏目長期没有抓取记錄才會被發現。

怎么確認邊界是否寫對了

  1. 用搜尋引擎提供的 robots.txt 測試工具,逐個驗證關键 URL 的匹配结果,而不是凭印象判断。
  2. 翻服務器日誌,看被拦截的记錄集中在哪些目錄,属于预期内還是意外情况。
  3. 把 sitemap 里的 URL 抽样跑一遍規則,检查有没有自相矛盾的條目。
  4. 調整規則後观察一段時間,看重要栏目的抓取记錄是否恢复正常。

回到 URL 發現本身

robots.txt 影响的是抓取路径,而不是“地址是否被發現”。把每條規則挡的是抓取還是索引想清楚,站点在發現、抓取、索引這三段里的問题才會變得可判断。規則寫得越简單、越贴合真實目錄结构,後續調整时越不容易牵连到不相干的路径。