常见问题

蜘蛛池与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环境下也能读懂。把发现和渲染这两条线分开看,排查会清晰很多。