页面在浏览器里显示正常,不代表蜘蛛拿到的也是同一份内容。现在不少站点的正文、列表、甚至内链,都是等 JavaScript 执行完之后才塞进页面的。人看着没问题,蜘蛛如果不执行脚本,抓到的就只是一个空壳。这一篇讲的是怎么把这个问题查出来。
为什么前端渲染容易挡住内容
传统抓取是“取 HTML、解析链接、入库”三步。当正文和链接都由脚本生成时,第一步拿到的 HTML 里可能只有几个容器节点和一段脚本,标题、正文、翻页链接全都不在。搜索引擎的渲染能力在提升,但渲染是有成本、有延迟、也可能失败的。对站点来说,等于把“能不能被发现”这件事交给了别人队列里的运气。
对依赖 URL 发现的站点来说,这个问题更明显:列表页如果用脚本分页、加载更多,新内容就没有一条静态可爬的入口路径,后面再谈收录就少了一个前提。
三个不需要专业工具的自查动作
一、打开“查看网页源代码”
在浏览器里查看源码,然后在源码中搜索文章标题里的一句话。搜不到,基本可以确认正文是渲染出来的。再搜一下链接的 href,如果栏目列表里的地址在源码中找不到,说明内链也没有暴露出来。
二、禁用 JavaScript 访问一次
浏览器可以临时禁用 JavaScript,或者用命令行直接抓一次页面。此时页面应该仍然有可读的标题、正文和导航链接。如果只剩下一句“请开启 JavaScript”,那就是很明确的信号。
三、对照日志和抓取结果
看服务器日志里蜘蛛请求的响应大小。一个正常的内容页 HTML 通常不会只有几 KB;如果同一批 URL 的响应体普遍偏小,可能就是只返回了容器和脚本。同时可以看抓取工具给出的“渲染后页面”和“原始 HTML”是否一致,差异越大越需要处理。
容易忽略的几个位置
- 列表与翻页:点“加载更多”才出内容,蜘蛛看不到第二页之后的地址。
- 相关推荐与面包屑:由脚本拼出来时,这些内链对蜘蛛等于不存在。
- 骨架屏:首屏先给占位块,正文后到,抓取时机不巧就抓到空白。
- 链接写成点击事件:没有 href,就没有可跟踪的地址,脚本再漂亮也没用。
- 筛选参数拼接:脚本生成的大量参数链接容易被批量造出,反而稀释了真正有价值的页面。
可以落地的调整方向
- 关键内容做服务端渲染或预渲染,至少保证标题、正文、主要导航出现在原始 HTML 里。
- 分页和栏目列表给出真实的可点击链接,让每一页都有固定地址。
- “加载更多”保留一个对应的静态分页作为兜底入口。
- 不要指望 noscript 兜底,它更像是给用户的提示,而不是给蜘蛛的正式内容。
- 用站点地图补充 URL 发现,但别把地图当成渲染问题的解药。
- 上线新模板后重跑一次源码检查,模板调整往往会把渲染方式一起改掉。
做完这些,也只是减少了障碍
渲染调整能解决的是“蜘蛛能不能看到”,不解决“看到了会不会收、会不会给排名”。内容质量、结构清晰度、站点整体可信度仍然是前提。把这一步当成基础维护就好,不必指望某个改动带来立竿见影的变化。
一个简单的判断标准:关掉 JavaScript,你的页面还能不能读,还能不能点着链接走两步。能,才算合格。