同一个页面,用户在浏览器里看到的样子,和搜索蜘蛛第一眼拿到的内容,可能并不完全一致。差别通常不来自内容本身,而来自前端实现方式。理解这一点,很多“页面明明有内容却收不进去”的问题会好排查得多。
蜘蛛先拿到的是响应,不一定是最终画面
搜索蜘蛛访问一个 URL 时,第一步通常是请求服务器,拿到最初的 HTML 响应。这个响应里有什么,它就先按什么理解。之后,搜索引擎可能再安排一次渲染,把 JavaScript 执行完,得到接近用户看到的页面。
关键在于:渲染是额外成本。它可能发生,也可能被推迟,甚至在某些情况下不触发。所以,如果页面的核心内容完全依赖 JS 在执行后插入,就等于把内容放在了第二道门后面,能不能过这道门不由站点决定。
几类常见实现,各自的风险点
懒加载
图片和长列表懒加载,本意是提升性能。但触发条件如果绑在滚动事件上,蜘蛛很可能不会滚动。结果就是占位图和一个空容器。文本内容如果也靠滚动才插入,风险更大。相对稳妥的做法是首屏内容直出,懒加载只用在下半部分,同时在源码里保留可抓取的链接和文本。
无限滚动
无限滚动对用户友好,对收录不友好,因为它没有稳定的分页地址。每滚一段,URL 不变,内容却换了。蜘蛛没有位置感,也就无法为这些内容分配独立地址。常见的补救是保留可点击的分页入口,或给滚动加载的部分单独生成可访问的 URL。
选项卡与折叠面板
选项卡里的内容,如果是通过 JS 从外部接口动态请求的,可能根本不在初始 HTML 里。相比之下,用 CSS 控制显示隐藏、内容仍写在 HTML 中的做法,要安全得多。折叠面板同理:折叠可以,但内容最好在源码里就存在。
点击、悬停才出现的内容
这类交互常用于展示更多信息、规格参数或评论。对用户是省空间,对蜘蛛则可能是“不存在”。如果这段内容值得参与收录,就不该只藏在交互之后。
自查可以按这几步来
- 禁用 JavaScript 打开页面,看还剩下多少内容,链接还能不能点。
- 用浏览器的“查看网页源代码”,而不是“检查元素”,确认核心文本是否出现在源码里。
- 在搜索控制台用网址检查,对比“已抓取的 HTML”和“已渲染的 HTML”,看差异有多大。
- 翻服务器日志,确认蜘蛛是否真的请求了那些 JS 文件和接口资源。
什么时候需要动结构
并不是所有 JS 渲染都必须改。判断标准可以简化成两条:这段内容是不是页面要参与收录的主体;这个 URL 是不是你希望出现在搜索结果里的地址。
如果两条都是肯定的,比较稳的方向是服务端渲染或预渲染,让关键内容出现在初始响应里。如果只是一些次要交互,或者页面本来就不打算进索引,那就不必大动干戈,改动的收益也有限。
别忽略链接本身
还有一个常被忽略的点:链接。如果站点导航、列表页的链接也是 JS 渲染出来的,蜘蛛可能连 URL 都发现不了,后面的抓取和收录自然无从谈起。相比之下,普通的 a 标签链接仍是最可靠的发现渠道,尤其是那些指向详情页、分类页的入口。
先把“蜘蛛能不能看到”和“用户能不能看到”当成两件事分别检查,再决定要不要改前端。相当一部分收录问题,卡在这一步之前,而不是之后。