常见問题

蜘蛛池與URL發現:頁面内容靠JS加载,搜尋蜘蛛抓到的是空壳怎么办?

把新URL通過蜘蛛池或sitemap投放出去後,日誌里能看到搜尋蜘蛛来訪,但抓到的HTML几乎没有正文和内鏈,收錄迟迟不来。本文区分抓取與渲染两個阶段,给出自查方法和優先改造的几處地方,帮助判断問题出在渲染還是URL發現路径上。

常见問题

蜘蛛池與URL發現:頁面内容靠JS加载,搜尋蜘蛛抓到的是空壳怎么办?

把新URL通過蜘蛛池或sitemap投放出去,日誌里也能看到搜尋蜘蛛来訪,但在抓取統計或缓存里打開,返回的HTML几乎没有正文,導航和内鏈也看不到——這就是常说的抓到空壳。它不一定是蜘蛛没来,而是它拿到的第一版HTML里本来就没有内容。

抓取和渲染是两件事

搜尋蜘蛛處理一個URL通常分两步:先請求HTML並解析其中的連結和文本,再在资源允许的情况下执行JavaScript、构建渲染後的頁面。第二步並不是每個URL都會做,它有獨立的配額和優先級,站点權重低、頁面數量多、渲染耗时長时,被渲染的机會更少。

如果正文、列表、分頁、相關推荐全靠JS生成,第一阶段的HTML就是空壳,蜘蛛既拿不到内容,也拿不到繼續爬的内鏈。這时候無论從蜘蛛池投了多少入口,能起的作用都有限。

先確認是不是渲染問题

  • 用 curl 或浏览器的“查看網頁源代碼”打開目标URL,禁用JS後看返回内容,確認正文和内鏈是否存在于HTML里。
  • 對比源代碼和渲染後的DOM:如果渲染之後才有内容,說明關键内容依赖JS。
  • 看服務器日誌中该URL的响應大小和狀態碼,空壳通常体积很小、狀態碼正常。
  • 检查是否用 robots.txt 誤挡了 JS、CSS 等资源文件,渲染需要這些资源可被抓取。
  • 检查是否有 noscript 兜底内容,以及兜底内容的质量如何。

優先改造哪几處

不需要把整站都改成服務端渲染,先把與發現路径相關的部分补上:

  1. 主要内鏈用普通 a 标簽的 href 輸出,避免全靠点击事件跳轉,蜘蛛才能顺着走。
  2. 列表頁、分頁、频道導航尽量服務端渲染,這些是URL發現的主干。
  3. 詳情頁首屏至少輸出标题、正文摘要和上下篇連結,让HTML本身有内容可讀。
  4. 暂时無法改造的老頁面,可以用预渲染做兜底,但要保證渲染结果與真實頁面一致。
  5. 同时保留 sitemap 等提交渠道,让URL發現不只依赖站内内鏈。
渲染配額是有限的,把URL發現和内容理解全部押在JS上,等于把主動權交给對方。

几個容易踩的坑

  • 不要给蜘蛛返回與用戶不同的内容,這属于作弊,短期看着有效,長期風險很大。
  • 预渲染頁面要能被正常訪問,別設定成需要登入或带特殊參數才能打開。
  • 渲染後的内容和HTML里的内容差异過大时,搜尋结果里的标题摘要可能不是你想要的那段。
  • 改完以後看抓取日誌和索引覆盖报告,观察HTML体积和抓取频次有没有變化,不要急着下结论。

小结

抓到空壳多數不是蜘蛛池的問题,而是頁面本身没有把内容放在HTML里。先用源代碼對比確認問题,再按内鏈、列表、詳情頁首屏的顺序逐步改造;短期内用sitemap和蜘蛛池保證URL能被發現,長期還是要让頁面在無JS环境下也能讀懂。把發現和渲染這两條线分開看,排查會清晰很多。