很多站点在做抓取管理时,會把 robots.txt 和 meta robots 当成同一件事:想让某個頁面消失,就在 robots.txt 里 Disallow 掉;想让某個栏目不被收錄,也在 robots.txt 里寫一行。结果往往是该消失的還在,该被發現的却抓不到。這两個工具管的是两件事:一個管能不能抓,一個管抓到了要不要收。寫反了,效果就會反過来。
两個工具的分工
robots.txt 是放在根目錄的协议文件,爬虫在抓取前會先讀它,用来决定哪些路径不要来抓。它的作用是减少無效抓取、保護服務器资源,以及把抓取引向更有價值的頁面。
meta robots,或者通過 HTTP 响應头下發的 X-Robots-Tag,是頁面級的指令,告诉爬虫這個頁面抓到了,但請不要索引、不要跟随連結或不要展示摘要。前提是爬虫得先抓到頁面,才能看到這條指令。
關键点:Disallow 等于把门關上,noindex 等于進门後挂個牌子。门一直關着,牌子就没人看得到。
最常见的三個寫反场景
- 整目錄 Disallow,同时指望 noindex 生效。爬虫抓不到頁面,自然看不到 noindex;如果外部有連結指向它,仍可能以只有連結、没有摘要的形式出現。
- 用 robots.txt 屏蔽 CSS、JS 和图片目錄。頁面能抓到,但渲染不完整,反而影响對頁面内容與移動端适配的判断。
- 把 staging 或測試目錄只做 Disallow,却不加訪問控制。robots.txt 是公開文件,寫明路径等于告诉別人這里有什么。
想彻底移除一個 URL 的顺序
- 先確認頁面可以被抓取,至少允许爬虫訪問,並返回正常狀態碼。
- 在頁面加上 noindex,或者通過响應头下發同样的指令,等待其從索引中登出。
- 確認登出後,再按需在 robots.txt 中 Disallow,减少後續抓取。
- 如果内容已经迁移,用 301 指向新地址,通常比 noindex 更合适。
robots.txt 的几個语法细节
- User-agent 分组要寫對,通配符規則與具体 UA 規則之間的優先級要理清。
- Disallow 與 Allow 按前缀匹配生效,可以用 Allow 在禁止目錄中開一個口子。
- 结尾的 * 與 $ 能限定路径,但不同爬虫支持程度有差异,別把關键逻辑押在复杂通配上。
- Sitemap 指令可以寫在文件里,帮助爬虫發現入口。
- 文件不要返回 5xx,也不要重定向到其他域名,否則指令可能被忽略。
服務端维護頁與临时下线
站点维護时,返回 200 的维護中頁面會被当成正常内容處理。更稳妥的做法是返回 503 狀態碼,並带上 Retry-After,告诉爬虫多久之後再来。如果是長期下线,要评估是否临时關閉抓取,以及恢复後如何让頁面重新被發現。
怎么驗證寫對了
- 用服務器日誌或抓取工具查看目标 URL 是否還有抓取记錄。
- 检查頁面返回的狀態碼,以及响應头中的 X-Robots-Tag 是否符合预期。
- 借助搜尋引擎提供的 URL 检查類工具查看目前狀態,僅作參考。
- 改動後观察一到两周的日誌趋势,而不是当天就下结论。
落到站点运营上的建议
把抓取管理当成一件長期维護的事:栏目規划阶段就明确哪些頁面值得被收錄,哪些只服務站内跳轉;内容更新时顺手检查新頁面的索引狀態;服務器變更或站点改版时,同步检查 robots.txt 與响應头設定。規則越简單、越集中,出問题时越好排查。
最後提醒一句:robots.txt 與 noindex 都不是收錄開關,它們只表達站点的意愿,最终是否抓取與索引由搜尋引擎决定。把這两件事分清楚,可以少走很多弯路。