现在不少站点用前端框架搭建,页面打开后由 JavaScript 填充数据、生成链接,用户看着正常,但搜索引擎蜘蛛拿到的 HTML 可能只有标题和几个空容器。对站点运营来说,这不只是技术细节,而是关系到新内容能不能被发现、内链能不能被走到。
先看蜘蛛实际拿到了什么
不要只凭浏览器里的效果判断。可以把页面的原始 HTML 抓下来,重点看几件事:
- 正文标题、摘要和核心内容是否直接出现在 HTML 里;
- 导航、列表页和文章内链是不是可点击的 a 标签;
- 分页入口是否存在于原始代码,而不是靠点击加载;
- canonical、面包屑等基础标签是否已经输出。
如果原始 HTML 里只有 div 容器和一段脚本,后面的内容全靠接口返回,那蜘蛛就需要先执行 JavaScript 才能看到页面。不同搜索引擎对渲染的处理方式不一致,缓存和等待时间也不一样,所以不能把发现内容的希望全押在渲染上。
常见空壳来源
数据接口被拦截
有些站点的 API 被 robots.txt 屏蔽,或者要求登录、校验来源、限制频率。蜘蛛不执行完整用户环境,接口拿不到数据,页面自然就是空的。自查时可以看看接口是否允许匿名访问,是否返回了结构化内容。
路由没有服务端回退
前端路由用 history 模式时,如果服务器对不存在的路径没有回退到入口文件,蜘蛛访问深层 URL 会直接拿到 404。反过来,如果所有路径都回退到同一个空壳,又容易造成重复页面。需要确认回退规则和状态码是否合理。
懒加载和交互依赖
图片、正文模块、选项卡、弹窗、无限滚动经常等到用户操作或滚动才加载。蜘蛛不一定会滚动、点击、等待。把关键内容放在默认视口之外,或者藏在标签页里,都可能影响抓取。
自查清单
- 用抓取工具或者命令行拉取原始 HTML,搜索页面核心关键词,确认正文是否出现。
- 检查首屏内链和分页链接是否为真实 href,不要只绑定 click 事件。
- 确认内容接口没有被 robots.txt 阻止,不依赖登录和临时 token。
- 检查 JavaScript 报错时页面是否白屏,是否有基本的降级内容。
- 对比浏览器渲染后的 DOM 和原始 HTML,差异过大的部分要做取舍。
- 观察蜘蛛日志里对深层页面的抓取量,是否长期停留在入口页。
- 新增内容后,看看蜘蛛能否在一段时间内发现对应 URL,而不是只抓首页。
可以调整的方向
优先让关键内容在服务端输出,交互增强再交给 JavaScript。对于已经上线的单页应用,可以考虑服务端渲染、静态生成或者预渲染,把正文、标题、分页和内链先落到 HTML 里。无限滚动要配可抓取的分页地址,选项卡内容尽量默认展开或提供独立 URL。
如果暂时无法改造,至少保留一个稳定的降级入口:比如站点地图里列出主要栏目和文章,分页使用普通链接,重要内容不要只放在弹窗里。这样即使蜘蛛没有完整执行脚本,也能顺着链接走到下一层。
观察变化,但不要急着下结论
调整后不要只看一两天。抓取和索引都有延迟,可以结合访问日志、抓取统计和索引状态一起看。重点观察蜘蛛是否开始访问之前抓不到的 URL,以及新内容被发现的时间有没有变化。如果日志里仍然只有几个入口页,就回到原始 HTML 继续排查。
把内容放在 HTML 里,把交互留给浏览器。蜘蛛能看到的,才是站点真正拿得出手的内容。