做站的时候常遇到一种情况:浏览器里打开页面,标题、正文、图片都正常,用户看着没问题;但如果换成搜索引擎的视角去看,抓到的 HTML 里只有一个空壳,真正的文字要等脚本跑完才出现。这类页面的收录,往往不是“能不能”的问题,而是慢一拍,甚至干脆漏掉。
蜘蛛先拿到的,是服务端返回的那一版 HTML
一次抓取通常从请求开始,服务器返回什么,蜘蛛第一步就拿到什么。如果返回的 HTML 里只有导航、脚注和一堆占位容器,正文全靠浏览器执行 JavaScript 才填进去,那么蜘蛛第一眼看到的就是一个内容稀薄的页面。
搜索引擎确实可以渲染 JavaScript,但渲染是排在后面的环节,需要额外的队列和资源,而且并不是每个被抓到的 URL 都会走到那一步。对站点来说,这意味着同一篇文章,别人源码里就有正文,你要多等一轮,甚至等不到。
渲染不保证发生,也不保证完整
把渲染理解成“蜘蛛的第二遍阅读”更合适:第一遍看源码,第二遍才执行脚本。第二遍的触发有条件,也受站点整体抓取预算影响。页面越多、渲染成本越高,能走到第二遍的比例就越低。
另外,渲染过程中依赖的接口如果被 robots.txt 拦掉、需要登录、或者返回很慢,蜘蛛看到的仍然是不完整的页面。有些站点把正文接口挡在爬虫之外,自己却以为内容已经能被读到了。
先确认自己是不是渲染型页面
- 右键查看网页源代码,直接搜索正文里的一句话。搜不到,说明正文不在初始 HTML 里。
- 用抓取工具或站长平台的抓取测试,对比“原始 HTML”和“渲染后 HTML”的差别。
- 看页面里的链接是不是标准的超链接,href 是否指向真实地址。如果内链靠脚本拼接或点击才生成,蜘蛛顺着爬的路径就断了。
- 关掉 JavaScript 再打开页面,看还剩多少有效内容。
这几步做完,大致能判断收录是卡在“拿不到正文”,还是“拿到了但质量不够”。
想让内容稳定被发现,优先做这几件事
- 关键内容放源码:标题、正文主体、主要链接尽量在服务端就输出,交互和次要模块再交给脚本。
- 考虑服务端渲染或预渲染:至少让内容页有一个包含正文的 HTML 版本。
- 链接用真实地址:可点击、可复制的普通超链接,比绑定点击事件更稳妥。
- 不要只在交互后才插入内容:像“点击展开”“滚动加载”的正文,蜘蛛不一定等得到那一步。
- 接口别挡住爬虫:渲染时需要的接口,确认没有被 robots.txt 或权限拦住。
- 用站点地图补一层入口:它不能替代页面本身的可读性,但能帮蜘蛛更早发现 URL。
已经上线的页面怎么收敛
不必推倒重来。可以先按模板分档:内容页优先改造,列表页和详情页分别处理;把最有价值的页面先补上服务端输出的正文,再逐步扩展到全站。改造后观察抓取和索引状态的变化,通常需要一段时间,不要指望改完第二天就有结果。
一个简单的判断标准:把 JavaScript 关掉,页面还剩多少能读的内容。剩得越多,收录这条路就越顺。