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