网站收录

页面靠 JavaScript 渲染时,蜘蛛看到的可能不是你看到的那一版

很多用 JavaScript 拼装的页面,初始 HTML 里几乎什么都没有。抓取与渲染是两个阶段,渲染要排队,也不保证一定成功。本文说明哪些常见写法会让正文和内链抓不到,怎样验证蜘蛛看到的内容,以及把关键内容放进 HTML 的几种做法。

网站收录

页面靠 JavaScript 渲染时,蜘蛛看到的可能不是你看到的那一版

越来越多的站点用 JavaScript 拼装页面:商品列表、评论区、文章正文都可能在浏览器里才被填进 DOM。对用户来说这没问题,但对蜘蛛来说,它第一眼看到的东西可能和你打开页面时看到的完全不是一回事。这也是不少页面「内容明明很完整,却迟迟没有收录」的原因之一。

抓取和渲染是分开的两步

蜘蛛处理一个 URL,大致会经历两个阶段:

  1. 抓取原始响应:服务器返回的 HTML 源码,此时脚本通常还没执行,页面可能是空壳。
  2. 排队渲染:把页面放进渲染队列,执行 JavaScript,拿到渲染后的 DOM,再从中提取文字和链接。

渲染是有成本的环节,需要排队,也未必每个 URL 都会被渲染。这意味着只有在脚本跑完之后才出现的内容,被看到的概率和时机,都不如直接写在 HTML 里稳定。

这几种写法最容易让内容「看不见」

  • 正文、价格、库存等关键信息全靠接口返回后再插入,初始 HTML 里只有一句「加载中」。
  • 内链靠点击事件或脚本生成,a 标签没有真实的 href,蜘蛛拿不到下一跳地址。
  • 内容藏在标签页、折叠面板、「查看更多」之后,需要交互才出现。
  • 懒加载把首屏之外的内容全部留到滚动时再取,而渲染阶段可能已经结束。
  • 无限滚动不产生新的 URL,翻十屏的内容在索引里只是同一页。
  • 用 canvas、图片上的文字、CSS 伪元素承载正文,文字根本不在 DOM 里。

怎么确认蜘蛛到底看到了什么

  1. 用命令行工具取一次原始响应,或直接查看网页源代码,确认初始 HTML 里有没有你要收录的文字和链接。注意是「查看源代码」,不是浏览器里的「检查元素」。
  2. 在搜索引擎提供的 URL 检查工具里对比抓取结果与渲染截图,看两边内容是否一致。
  3. 临时关掉浏览器 JavaScript 打开页面,很多问题一眼就能看出来。
  4. 看服务器日志里该 URL 的响应体大小,如果长期只有几百字节,返回的多半是空壳。

让关键内容更容易被抓到

  • 服务端渲染或静态生成:把一个页面的核心内容直接输出进 HTML。
  • 预渲染:构建时把常用 URL 生成静态 HTML,适合更新不频繁的页面。
  • 关键内容优先:标题、正文、主要内链放在初始 HTML,次要模块再交给脚本。
  • 使用真实链接:a 标签带 href,指向可以被抓取的 URL,不要只写点击事件。
  • 分页保留独立 URL:即使前端用无限滚动,也给一个可访问的翻页地址。

渲染是补充,不是替代

搜索引擎的渲染能力确实在提升,但渲染有排队、有超时、有失败率,也不是所有页面都会走到这一步。把所有内容都押在客户端渲染上,等于把「能不能被看见」交给了一个不完全可控的环节。更稳的做法,是让 HTML 本身就能说明这个页面是什么。

判断标准很简单:如果关掉 JavaScript,这个页面还剩多少能读懂的内容?剩下的那一部分,才是蜘蛛最稳的那一份。

收录问题,很多时候不是页面质量不够,而是内容根本没进入「可被评估」的状态。先确认蜘蛛看到的内容和你看到的一致,再谈其他优化,顺序会顺很多。