抓取和收錄分属两個环节,robots.txt 管的是前者,noindex 管的是後者。不少站点的問题不是蜘蛛不来,而是這两類指令寫反了、寫漏了,或者互相打架,最後表現出的現象却很相似:頁面進不了索引,或者明明消失了又迟迟不掉。
robots.txt:决定蜘蛛能不能把頁面拿回去看
Disallow 阻止的是抓取行為,而不是收錄结果。一個被屏蔽的 URL 如果早就進了索引,通常不會因為加了屏蔽就立刻消失,只是搜尋引擎再也看不到它的新内容,只能繼續用舊快照或外鏈信息判断,頁面的狀態會慢慢變差。
常见的几種寫错方式
- 為了让篩選頁、隐私頁不被收錄,直接用 Disallow 屏蔽整個目錄。结果是這些頁面上寫的 noindex 永遠讀不到,反而可能長期挂在索引里。
- 測試站的 robots.txt 一直留着 Disallow: /,上线後忘了改,整站抓取被挡在门外。
- Allow 和 Disallow 規則互相覆盖,實际生效的和自己以為的不是同一條。一般来说按最長匹配路径生效,長度相同时 Allow 優先。
noindex:告诉搜尋引擎別把這個頁面放進索引
它的常規寫法有两種:HTML 的 head 区域里放 meta robots 标簽,content 值寫 noindex;或者由服務器在 HTTP 响應头里返回 X-Robots-Tag。後者對 PDF、图片等非 HTML 文件同样有效,這是 meta 标簽做不到的。
容易失效的情形
- 标簽被模板渲染到了 body 里,抓取时不被识別。
- 标簽由 JS 動態插入,而抓取没有走到渲染那一步。
- 同一頁面既有 noindex,又有指向別處的 canonical,信号互相矛盾,處理结果和预想不同。
- 頁面被 robots.txt 屏蔽,導致谁都看不到這個 noindex。
- 响應头里的 X-Robots-Tag 和頁面里的 meta 寫法不一致,此时通常取更嚴格的一方。
冲突时的處理逻辑
可以记一個粗糙但好用的口径:越嚴格的指令越可能生效。index 和 noindex 同时出現时按 noindex 處理;robots.txt 屏蔽與可索引标记同时存在时,抓取被挡住,索引狀態只能靠歷史信息和外鏈推断。真正麻烦的是第三種组合——屏蔽目錄加 noindex 标簽,本意是彻底移除,實际效果往往相反。
按顺序排查,比盲目改标簽更省時間
- 確認目标 URL 在 robots.txt 里命中的是 Allow 還是 Disallow,注意通配符和最長匹配。
- 用抓取測試或 URL 检查工具看返回的响應头,以及 HTML 里是否真的带上了目标 meta 标簽。
- 看狀態碼。200、301、404、5xx 分別對應不同的後續動作,先解决狀態碼問题,再谈指令。
- 检查 canonical 與 noindex 是否同时存在,两者指向是否一致。
- 確認屏蔽范围有没有波及 JS、CSS 资源目錄,這會影响渲染,進而影响收錄判断。
- 修好之後提交站点地图,观察抓取日誌和索引狀態的變化趋势,而不是盯着某一天的數字。
改回来之後,多给一点時間
去掉 noindex 後,頁面不會马上回到索引,需要等下一次抓取和重新评估,通常是几天到几周不等,取决于頁面重要性和站点抓取频率。反過来,想让一個已经收錄的頁面登出索引,正确顺序是先允许抓取、让 noindex 被讀到、等它真正消失,再考虑要不要彻底屏蔽。
把 robots.txt、noindex、canonical 三件事放進上线检查清單,尤其是模板級改動。這三處一旦寫错,影响的是整批 URL,而不是單個頁面。
日常维護时不必频繁改動這些設定。每次動之前先明确目标:是要阻止抓取,還是要阻止收錄,還是两者都要。目标分清楚了,指令就不會寫反。