先分清两道闸门各管什么
robots.txt 管的是抓取:蜘蛛来到站点,先讀這個文件,看哪些目錄可以進、哪些不要進。meta robots(以及响應头里的 X-Robots-Tag)管的是索引:頁面已经被抓到了,再看要不要把它放進索引、要不要跟随頁面上的連結。两者寫反了,就會出現“抓得到但不收錄”,或者“想屏蔽却只挡住了抓取、地址照样能被索引”這類別扭狀態。
屏蔽抓取不等于屏蔽索引。用 robots.txt 挡住一個頁面,如果別處有連結指向它,搜尋引擎仍可能只凭連結把它列進结果,只是没有摘要。真想让它彻底消失,要用 noindex,而且必须是能被抓到的 noindex。
robots.txt 文件本身的自查
- 地址是否能正常訪問,返回狀態碼與内容類型是否正确;返回 404 意味着“没有規則”,返回 5xx 时蜘蛛會保守處理,而返回一個 HTML 頁面則是常见事故。
- 只放在域名根目錄,子目錄里的 robots.txt 不會被讀取。
- 路径匹配区分大小寫,/Images/ 和 /images/ 是两條不同的規則。
- 是否被 CDN 或缓存策略缓存了舊版本,改完規則後確認线上返回的就是最新内容。
- 測試环境、预發布域名的規則是否在上线时被一起带到了正式站。
- Sitemap 声明是否指向正确的 https 地址,且该文件本身可訪問。
規則寫法的常见坑
- Disallow: / 一行挡住整站,多出現在临时维護或迁移期間,上线後忘了删。
- 通配符 * 和结尾的 $ 用得太宽,比如 Disallow: /*? 會把所有带參數的地址一起挡住,包括本應保留的正常頁面。
- Allow 與 Disallow 冲突时,通常以更具体的規則為准,靠猜不如直接测。
- 按 UA 分组时,组與组之間要空行分隔,否則規則會被並到上一個组里。
- 規則里出現中文、空格或全角符号,容易被解析成無效行。
- 只寫了 User-agent: *,却忘了單獨放行 CSS、JS 等渲染所需资源。
頁面級标记與响應头
meta robots 寫在 head 里,属于頁面自身声明;X-Robots-Tag 放在 HTTP 响應头里,也能作用于非 HTML 文件。两者都支持 noindex、nofollow、noarchive 等指令,多個值用英文逗号分隔。自查时重点看這几種情况:
- 同一頁面既寫了 noindex,又寫了 canonical 指向別處,方向上不算矛盾,但要確認這确實是你想要的结果。
- 分頁頁、篩選頁、打印頁被批量加上了 noindex,後来想收錄时没人记得。
- 從模板繼承下来的 noindex 没有随栏目上线一起去掉,導致整個栏目長期停在“已發現未编入索引”。
- 响應头里的 X-Robots-Tag 寫在服務器或 CDN 配置中,只改頁面的 meta 並不會生效。
- nofollow 加在了正文連結上,站内連結關系被顺手切掉。
顺手检查静態资源是否被挡
蜘蛛渲染頁面时需要讀取 CSS 和 JS,如果 robots.txt 把 /assets/、/static/、/js/ 這類目錄整体挡住,頁面在渲染视角里可能是残缺的,内容判断也容易出偏差。图片目錄被挡通常影响有限,但仍會波及图片搜尋,取舍要想清楚。
线上驗證的可行做法
- 直接訪問站点根目錄下的 robots.txt,看返回狀態、内容和编碼。
- 用站長平台的 robots.txt 測試工具,輸入具体 URL,看是被允许還是被拦截。
- 用網址检查或抓取測試功能抓一個代表性頁面,看渲染後的 HTML 和抓取狀態。
- 再抓一個本應被屏蔽的頁面,確認它真的被挡住,別只相信自己寫對了。
- 改動規則後隔几天回看抓取統計和索引狀態,確認變化符合预期。
可以照着走的自查顺序
- 先看文件能不能正常打開、内容是不是最新的。
- 再逐條讀規則,标出通配符和目錄級屏蔽。
- 然後抽查頁面級 meta 與响應头,重点看栏目首頁和模板頁。
- 最後做一次實际抓取驗證,把结论和日期记進變更记錄。
規則類設定最容易“寫完就忘”。把 robots.txt、meta robots、X-Robots-Tag 三份配置放在同一張表里维護,标注每條的用途和添加時間,改動时一起過一遍,比出問题後再回头翻配置省事得多。