排查頁面不收錄时,很多人先去看内容和外鏈,却忽略了一個更靠前的环节:robots.txt。它决定蜘蛛能不能抓,抓不到就谈不上收錄。而且規則寫错一次,影响的往往是一整個目錄,不是單個頁面。
先分清 robots.txt 管的是哪一层
抓取和收錄是两個阶段。robots.txt 處在抓取阶段,它告诉蜘蛛哪些地址不要請求。被屏蔽的 URL 连响應都拿不到,頁面上的 noindex、canonical 這些信号自然也不會被讀到。
如果頁面既被 robots.txt 屏蔽,又标了 noindex,你看到的“没收錄”其實是屏蔽造成的,先解决屏蔽再谈其他。
這也是為什么放行之後不能马上期待頁面進索引:蜘蛛需要重新發現並抓取這個地址。
按這個顺序核對規則
1. 確認到底命中了哪一條
robots.txt 支持多個 User-agent 分组,蜘蛛會選取與自身最匹配的一组,再在该组内找最長匹配的規則。常见誤判是只看了一眼全站 Disallow,没注意到自己寫的通配符把正常目錄也覆盖了。
2. 用抓取測試確認具体 URL 的判定
規則寫得再清楚,也要落到具体地址上驗證。搜尋後台的 robots.txt 測試工具,或者直接請求 robots.txt 後逐條比對,都能確認某條 URL 是“允许”還是“被屏蔽”。測試时填完整 URL,包括协议和參數,不要只填目錄名。
3. 检查静態资源有没有被一起挡住
不少站点為了省抓取预算,屏蔽了 /assets、/static、/js 這類目錄,顺手把 CSS 和 JS 也挡了。蜘蛛拿不到样式和脚本,渲染出来的頁面可能是残缺的,這會間接影响對内容的判断。
4. 检查有没有全站級屏蔽
上线前從測試环境複製過来的 robots.txt、临时下线时寫的 Disallow: / 忘了删,是最典型的誤伤。這類問题一查就清楚,但不查的话,後面所有排查都是白費。
5. 检查站点地图声明與屏蔽范围是否冲突
站点地图里提交了大量 URL,robots.txt 又把對應目錄屏蔽了,两邊互相打架。提交上去的地址蜘蛛會看到,但抓取时被拒绝,日誌里表現為反复發現却不抓取。
几個容易誤伤的寫法
- 用 * 通配符时没考虑前缀相同的目錄,比如屏蔽 /search 顺带挡掉了 /search-guide。
- 用 $ 结尾做精确匹配,但實际 URL 带參數,規則失效,该挡的没挡住。
- 一個 User-agent 分组下寫了多行 Disallow,以為取交集,實际是並列生效。
- 把带參數的篩選頁整段屏蔽,结果正常的分頁參數也被一起挡住。
放行之後的處理顺序
- 先改規則,改完再驗證一遍,確認目标 URL 從“被屏蔽”變成“允许”。
- 確認 robots.txt 本身可以正常抓取,返回 200 而不是 404 或 403。
- 把重要頁面重新放進站点地图,並保留足够的站内入口連結,让它們有被發現的机會。
- 观察服務器日誌里這些地址是否重新出現抓取记錄,再看索引狀態有没有變化。
長期被屏蔽的目錄,即使放行了,蜘蛛也不會立刻回来。這时候站内連結和外部連結是重新發現的主要路径,站点地图只是补充。
不建议做的事
不要為了尽快让頁面出去而反复修改 robots.txt,也不要用它去處理重复内容或低质頁面——那是 canonical 和 noindex 的活。robots.txt 只做一件事:控制抓取范围。用途混淆,後面會越来越难排查。
最後提醒一句:以上是排查顺序,帮你先把“屏蔽誤伤”這個可能性排除掉,而不是保證放行後頁面一定被收錄。收錄與否,還要看頁面质量和索引阶段的判断。