把新URL通過蜘蛛池或sitemap投放出去,日誌里也能看到搜尋蜘蛛来訪,但在抓取統計或缓存里打開,返回的HTML几乎没有正文,導航和内鏈也看不到——這就是常说的抓到空壳。它不一定是蜘蛛没来,而是它拿到的第一版HTML里本来就没有内容。
抓取和渲染是两件事
搜尋蜘蛛處理一個URL通常分两步:先請求HTML並解析其中的連結和文本,再在资源允许的情况下执行JavaScript、构建渲染後的頁面。第二步並不是每個URL都會做,它有獨立的配額和優先級,站点權重低、頁面數量多、渲染耗时長时,被渲染的机會更少。
如果正文、列表、分頁、相關推荐全靠JS生成,第一阶段的HTML就是空壳,蜘蛛既拿不到内容,也拿不到繼續爬的内鏈。這时候無论從蜘蛛池投了多少入口,能起的作用都有限。
先確認是不是渲染問题
- 用 curl 或浏览器的“查看網頁源代碼”打開目标URL,禁用JS後看返回内容,確認正文和内鏈是否存在于HTML里。
- 對比源代碼和渲染後的DOM:如果渲染之後才有内容,說明關键内容依赖JS。
- 看服務器日誌中该URL的响應大小和狀態碼,空壳通常体积很小、狀態碼正常。
- 检查是否用 robots.txt 誤挡了 JS、CSS 等资源文件,渲染需要這些资源可被抓取。
- 检查是否有 noscript 兜底内容,以及兜底内容的质量如何。
優先改造哪几處
不需要把整站都改成服務端渲染,先把與發現路径相關的部分补上:
- 主要内鏈用普通 a 标簽的 href 輸出,避免全靠点击事件跳轉,蜘蛛才能顺着走。
- 列表頁、分頁、频道導航尽量服務端渲染,這些是URL發現的主干。
- 詳情頁首屏至少輸出标题、正文摘要和上下篇連結,让HTML本身有内容可讀。
- 暂时無法改造的老頁面,可以用预渲染做兜底,但要保證渲染结果與真實頁面一致。
- 同时保留 sitemap 等提交渠道,让URL發現不只依赖站内内鏈。
渲染配額是有限的,把URL發現和内容理解全部押在JS上,等于把主動權交给對方。
几個容易踩的坑
- 不要给蜘蛛返回與用戶不同的内容,這属于作弊,短期看着有效,長期風險很大。
- 预渲染頁面要能被正常訪問,別設定成需要登入或带特殊參數才能打開。
- 渲染後的内容和HTML里的内容差异過大时,搜尋结果里的标题摘要可能不是你想要的那段。
- 改完以後看抓取日誌和索引覆盖报告,观察HTML体积和抓取频次有没有變化,不要急着下结论。
小结
抓到空壳多數不是蜘蛛池的問题,而是頁面本身没有把内容放在HTML里。先用源代碼對比確認問题,再按内鏈、列表、詳情頁首屏的顺序逐步改造;短期内用sitemap和蜘蛛池保證URL能被發現,長期還是要让頁面在無JS环境下也能讀懂。把發現和渲染這两條线分開看,排查會清晰很多。