不少站点在做抓取管理时,第一反應是“少让蜘蛛抓点東西”,于是顺手把 /js/、/css/、/static/ 這些目錄寫進 robots.txt。抓取量也许省下了一点,但頁面在蜘蛛眼里可能只剩几行没有结构的文字。
蜘蛛看到的不只是 HTML
現在大多數頁面靠 CSS 排版、靠 JS 輸出正文和列表,图片和字体也分散在獨立目錄里。蜘蛛抓取 HTML 之後還要請求這些资源,才能還原出接近真實用戶看到的頁面。如果资源被挡在门外,渲染结果就會出現缺块:導航没了、正文空白、图片全是占位符,判断相關性时自然吃亏。
更麻烦的是,這種問题在浏览器里完全看不出来。你自己訪問一切正常,只有蜘蛛那邊的渲染结果與真實頁面不一致。
几種常见的誤伤寫法
- 整目錄屏蔽:Disallow: /js/、/css/、/assets/,把渲染必需的文件一起挡掉。
- 按後缀屏蔽:用 *.js、*.css 之類的通配規則,往往连带把頁面級的脚本一起排除。
- 屏蔽图片目錄:為了省流量禁止抓取 /uploads/,图片搜尋和图文頁的展示都會受影响。
- 規則寫得過宽:為了挡住采集,把 UA 規則设得很宽,誤伤正常蜘蛛的情况並不少见。
這些規則通常来自“抓取配額有限,能省就省”的想法。但资源文件体积小、請求快,真正吃掉配額的是參數组合和無限翻頁,優先處理的應该是後者。
自查可以按這個顺序走
- 打開 robots.txt,逐條看被屏蔽的路径里有没有 /js/、/css/、/static/、图片目錄。
- 翻一遍服務器日誌,看蜘蛛對静態资源的請求是 200 還是 403、404。大量 403 通常意味着 CDN 或 WAF 在拦。
- 用抓取工具的“查看渲染後頁面”功能,和浏览器里看到的做一次對照。
- 临时放開资源目錄,观察一段時間日誌再决定是否保留規則。
资源放在 CDN 或獨立域名上要注意什么
静態资源常常放在 cdn.example.com 這類子域名下。robots.txt 是按域名生效的,主站的放行規則管不到子域名,需要在子域名根目錄單獨放一份,或者干脆不做屏蔽。另外,防盗鏈、Referer 校驗、短時間内的频率限制,都可能让蜘蛛拿到 403,這些策略上线前最好確認一下對爬虫的影响。
图片與懒加载的坑
出于性能考虑,很多站点把图片改成懒加载:先放一個空的 img,等滚動到可视区域再用 JS 填真實地址。這種做法對用戶友好,但如果頁面上没有任何可直接讀取的图片地址,图片抓取就會落空。常见的补救方式是把首屏图片寫成正常的 img 标簽,其余图片同时在 HTML 中保留地址,或者补一個 noscript 兜底。
省抓取配額要從參數頁、重复列表、無限翻頁入手,而不是從渲染所需的资源文件入手。资源被屏蔽,省下的是小头,损失的是蜘蛛對整個頁面的理解。
上线前可以過一遍的清單
- robots.txt 里没有屏蔽 /js/、/css/、/assets/、/static/ 等资源目錄。
- CDN 與子域名的 robots.txt 已單獨確認。
- 日誌中蜘蛛請求静態资源以 200 為主,403、404 占比可接受。
- 抓取工具的渲染结果與浏览器基本一致。
- 關键图片有真實可讀的 img 地址,不只依赖 JS 注入。
這些检查门槛不高,但能保證蜘蛛和用戶看到的是同一個頁面。對站点运营来说,這比纠结多抓几個參數頁更值得先做。