CLS累积布局偏移怎么优化?从页面跳动和误触查起

CLS累积布局偏移怎么优化?从页面跳动和误触查起
张文保 15 分钟阅读 2,824 阅读
本文目录
  1. CLS衡量的是什么?视觉稳定性指标如何计分?
  2. 商品详情页的加购按钮,为什么会被误触成删除?
  3. 布局偏移的成因有哪些?五类高频来源怎么排序?
  4. 图片和视频不写尺寸,为什么是CLS的首要来源?
  5. 广告位、嵌入内容和延迟加载,怎么提前预留空间?
  6. CLS和INP、LCP有什么区别?三项指标怎么分工?
  7. CLS怎么测、怎么监控?实验室数据和真实用户数据差在哪?
  8. 美妆客户那个详情页,最后是怎么进入绿区的?
  9. CLS超标会直接影响排名吗?它的权重有多大?
  10. 常见问题解答
  11. CLS多少分才算合格?
  12. 我的图片都写了尺寸,为什么CLS还是高?
  13. 用了懒加载会不会让CLS变差?
  14. CLS和LCP、INP该先修哪个?
  15. 交互引起的内容移动会算进CLS吗?
  16. 移动端的CLS通常比桌面端严重,是错觉吗?
  17. 权威参考资料

摘要:CLS(累积布局偏移)是三大核心网页指标中衡量视觉稳定性的一项,它不统计加载速度,也不统计交互响应,只统计页面内容在用户眼前的非预期跳动。分数越低越稳定,0.1以内为良好,超过0.25就需要修复。常见来源相当朴素:没有尺寸声明的图片、延迟注入的广告、加载后才换入的字体。这篇讲清CLS的计分逻辑、五类主要成因,以及一套可以按顺序执行的修复方案,让页面别再把用户的手指引到错误的位置上。

我是保哥,做SEO二十多年,经手的海外独立站不算少。CLS(累积布局偏移)在三项核心网页指标里最容易被忽略,出问题时用户的抱怨也最不像性能问题。他们不会反馈页面慢,只会觉得这个站点不对劲。

典型场景是移动端阅读:手指正要点击一个链接,页面内容突然下移,落点变成了旁边的广告。这类误触就是布局偏移的直接后果。下面就一条条拆:它到底在量什么、跳动从哪来、怎么一个个摁住。

CLS衡量的是什么?视觉稳定性指标如何计分?

CLS衡量的是页面整个生命周期内,非预期布局偏移累积起来的严重程度。判定的关键在于非预期:用户点击按钮展开一段内容、元素随之移动,属于预期之内,不计分;页面在加载过程中自行把正在阅读的段落往下顶,才是这项指标要捕捉的对象。

单次偏移的得分等于影响分数乘以距离分数。影响分数对应发生偏移的可见内容有多大面积,距离分数对应这些内容移动了多远。两者相乘后逐次累加,得到这个页面的CLS。按 web.dev对CLS指标的官方定义,0.1以内为良好,0.1到0.25之间需要改进,超过0.25为差。

把视觉稳定性单列成一项指标的原因是,加载快和交互跟手都替代不了它。页面可以秒开、点击也有即时反馈,只要内容在阅读过程中不断跳动,体验依然不合格。Google搜索中心把核心网页指标列为排名参考信号,视觉稳定性是其中一条独立的轴,与加载、交互并列,共同构成整套指标,这一点在 Page Experience六项体验信号怎么排序里放到整个体验信号盘子里讲过。

商品详情页的加购按钮,为什么会被误触成删除?

前两年我带过一个做美妆的DTC客户,独立站的商品详情页版式规整,主图、卖点、价格、加购按钮依次排列。后台的移动端数据里有一处异常:加购按钮的误触率明显偏高,同时有一批用户把商品从心愿单里删掉了,从数据上看不出所以然。

调真实用户录屏之后,问题定位到按钮上方那块“买家实拍”的图墙。那些图片没有写尺寸,加载比周围内容慢一拍,图片撑开之后,下方的价格和加购按钮被整体下推一大截。用户手指原本对准的是加购,图片到位的瞬间,落点变成了旁边的“移出心愿单”。这哪是误触,是页面在跟用户玩你画我猜。

用Chrome DevTools实测,这个详情页的CLS是0.34,落在红区。来源有三处:买家秀图墙缺尺寸、促销横幅延迟注入、标题web字体换入时的二次偏移。三笔偏移叠加,按钮位置在加载过程中前后移动了小半个屏幕的距离。

布局偏移的成因有哪些?五类高频来源怎么排序?

线上排查做得多了会发现,CLS的来源集中在几类固定问题上。按出现频率排序如下:

  • 没有尺寸声明的图片和视频。浏览器在资源下载完成前无法得知元素多高,只能先按它不存在来排版,图片到位后再重新腾出空间,下方内容被整体挤开。这是最高频的一类。
  • 动态注入的内容。广告、Cookie提示条、“限时优惠”横幅通常在页面加载完成后才插入,插入点以下的内容随之整体偏移。
  • 换入较晚的web字体。后备字体与正式字体的字号、行高不一致,字体换入的一瞬间整段文字重新排版,行数一变,下方内容跟着移动。
  • 没有预留空间的嵌入内容。iframe、第三方评论、视频播放器在加载前是零高度,加载后突然撑开一大块。
  • 先渲染再改样式。部分脚本在页面显示之后才去调整元素的尺寸或位置,等于在用户已经看到页面之后再重新排一次版。

这五类问题的共同点是时序:某个元素比周围内容晚到位,到位时又要占用空间,于是把相邻内容挤走。控制CLS的通用思路只有一条,让晚到的元素在进入页面之前就把空间预留出来。

图片和视频不写尺寸,为什么是CLS的首要来源?

图片的解法很老派:给img和video标签写上width和height属性。浏览器拿到这两个值,就能在资源还没下载完时按宽高比把占位空间空出来,图片到位后直接填入,下方内容不发生偏移。

更完整的做法是配合CSS的aspect-ratio。在HTML里写好width和height,再让CSS里的图片宽度自适应容器,浏览器会按 MDN对aspect-ratio属性的说明推算需要预留多高的空间,响应式布局和零偏移可以同时成立。这套写法是图片类CLS的标准解。用srcset做响应式图片时同理,不同分辨率的候选图要共享同一个宽高比,浏览器才能一次把占位高度算准,避免换一张候选图就偏移一次。

前面那个美妆客户的买家秀图墙就是这么处理的。给每张图补上真实宽高比,浏览器提前算出整面图墙的高度、留足占位,图片仍然是陆续加载进来的,下方的价格和按钮位置从头到尾保持不变。仅这一项改动,详情页的CLS就从0.34降到了0.08。

广告位、嵌入内容和延迟加载,怎么提前预留空间?

动态注入的内容更难处理,因为它最终多高往往在加载前无法确定。处理原则仍然是预留空间。

广告位、促销横幅这类元素,可靠的做法是用CSS给容器写一个min-height,按该广告位最常见的尺寸先把地方空出来。广告延迟到达甚至完全没有加载,这块空间也一直保留着,不会等广告到达时才临时撑开。骨架屏(skeleton)用的是同一个思路:先占位,再填内容。

延迟加载的图片同理。懒加载省的是带宽,尺寸预留解决的是偏移,两件事要一起做,只做前者会把省下的带宽赔在体验上。资源加载的优先级和空间预留怎么一起排,可以参考 五种资源提示技术怎么给关键资源提速,preload这类手段能让关键内容更早到场,减少晚到引发的偏移。

另一条容易忽略的规则是不要在已有内容的上方插入元素。确实需要弹通知、加横幅时,固定在视口顶部或者从底部滑出,避免硬插进用户正在阅读的内容中间。改动发生在视口之外,用户感知不到,CLS也不会计入这笔偏移。

更隐蔽的一处是Cookie同意条。很多站点为了合规,在页面打开时从顶部推下一整条Cookie提示,把下方内容整体下移一大截。这一次偏移经常是全站CLS的最大贡献者,而且它出现在每一个页面上,影响范围最广。解法有两种:做成悬浮层覆盖在内容之上、不占布局流,或者从底部滑入、不从顶部挤压。覆盖全站的元素,值得单独花半小时把它的偏移处理干净。

广告位还有一处取舍常被质疑:预留了min-height,广告没加载时会留下一块空白。两种代价可以直接比较:静止的空白只让用户觉得这里本该有点内容,一次突然的跳动,可能让用户点错、把本来能成的单子丢掉。空白是无感的,跳动是有痛感的,这买卖怎么算都划算。介意视觉效果的话,填一个浅灰占位块或者品牌小图标,比让容器高度临时变化强得多。

CLS和INP、LCP有什么区别?三项指标怎么分工?

这三项共同组成核心网页指标,最容易被混为一谈,需要分开定义。

LCP对应加载:最大的一块内容多久能显示出来,数值高意味着白屏时间长,具体的优化路径在 六层架构把LCP从四秒压到一秒半里拆得比较细。INP对应交互:用户点击之后页面多久给出反馈,数值高意味着操作后没有动静,这条线在 INP的P98与主线程六维实战里讲过。CLS对应的是稳定性,衡量内容会不会发生非预期偏移,跟速度、响应都无关。

打个比方,去餐厅吃饭:LCP是上菜快不快,INP是叫服务员有没有人应,CLS是刚要下筷子、盘子会不会突然被挪走。三件事互不替代,一个页面可以上菜飞快、服务也周到,盘子老被挪,用户照样吃得一肚子气,下次宁可换一家。诊断体验问题时先分清是哪条轴超标,别拿治加载的药去医跳动的病,压缩图片体积、更换更快的服务器解决的是加载,对布局偏移没有直接作用。

CLS怎么测、怎么监控?实验室数据和真实用户数据差在哪?

测CLS有两套数据,得分清。一套是实验室数据,用Lighthouse或DevTools在本机跑一遍,环境干净、结果可复现,适合开发阶段定位问题。DevTools的性能面板能把每一次布局偏移的区域高亮出来,Chrome官方对渲染面板高亮布局偏移的说明里写了怎么读这些数据、怎么顺着线索回溯到触发偏移的元素。

另一套是真实用户数据(字段数据),来自大量真实访客的浏览器,汇总在CrUX和Search Console里。Google排名参考的是这一套。两者经常不一致:实验室结果全绿、字段数据却飘红,多半是真实用户遇到了本机测不出的情况,比如慢网速下广告加载得更晚、某些机型的字体换入更明显。DebugBear对CLS测量口径的梳理里专门提醒过实验室与现场的这种落差。

长期监控的入口是Search Console的核心网页指标报告。它按URL模式给页面分组,哪一组超标一目了然。这份报告用的是滚动28天的真实用户数据,今天改完不会隔天变绿,需要等新数据逐步把旧的糟糕体验替换掉,通常要观察三到四周。改完当天看不到变化属于正常现象,只是数据窗口还没跟上。

还有一条计分细则要记住:用户交互后500毫秒内发生的偏移,不计入CLS。点击按钮触发的内容展开属于用户自己要的变化,记在页面头上并不公平。把所有变化都推到点击之后并不能刷分,这条规则已经把那条路堵死了。真要降CLS,还得从预留空间入手,Smashing Magazine对CLS修复的系统梳理给出的排查清单,就是照着成因一类一类处理。

美妆客户那个详情页,最后是怎么进入绿区的?

回到开头那个0.34的详情页。改动分三步:买家秀图墙全部补上宽高比,由浏览器提前预留高度;促销横幅从加载后注入改成预留固定高度的容器,横幅到不到那块地方都在;标题字体加上font-display,并对后备字体做度量匹配,换入时几乎观察不到跳动。

三项改动之后,详情页的CLS稳定在0.05,进入绿区。业务侧的变化更直接:加购按钮的误触投诉基本清零,误删心愿单的那批用户不再出现,移动端的加购转化率回升了一截。客户后来的说法是,他一直把问题归到用户操作上,实际是页面自己在制造误操作。

CLS的特点就在这里:它没有加载速度那种明确的慢的体感,造成的损失是隐性的,用户不会反馈,只会离开。转化率长期偏低的页面,原因可能就是关键操作前的那一次跳动。

CLS超标会直接影响排名吗?它的权重有多大?

先泼盆冷水:CLS是排名信号,但权重没那么大。它属于核心网页指标这一档,作用更接近同分时的决胜条件,两个页面在内容相关性和质量上难分高下时,体验更好的那个才更容易胜出。指望把CLS从0.15压到0.05就让排名蹦几位,多半会失望。内容本身不达标,指标全绿也不解决问题。

反过来说,权重有限也不代表可以放着不管。CLS超标的损失主要绕开排名从侧面发生:页面频繁跳动、用户频繁点错,跳出率上升、停留时间下降,这些行为信号Google同样在收集;转化率被拖累,则是直接的收入损失。跟丢掉的订单相比,排名上的那点影响反而是次要的。

还有一个趋势得放进来看。移动优先索引全面铺开,加上AI搜索这两年分走一部分点击,能把用户留住、让他读下去的页面越来越稀缺。体验在这种环境里已经从加分项变成一条不断抬高的及格线。核心网页指标要按及格线的标准去做,目的是保证不在这个环节平白丢分。CLS尤其明显,负面体感太直接,一次明显的跳动就可能让用户不再回来。

常见问题解答

CLS多少分才算合格?

看真实用户数据里第75百分位的值:0.1及以内为良好,0.1到0.25之间需要改进,超过0.25为差。取第75百分位的意思是,你得让四分之三的访客都落在良好区间才算过关,用平均值衡量会掩盖问题,少数访客遇到严重跳动,同样会把这个百分位拉高。

我的图片都写了尺寸,为什么CLS还是高?

图片只是最常见的一类成因,不是唯一的。你还得排查动态注入的广告和横幅、换入较晚的web字体、没有预留空间的iframe和第三方嵌入,以及那些在页面显示后才改样式的脚本。建议用DevTools的性能面板把每一次偏移的触发元素高亮出来,逐个核对,别靠猜。常见的疏漏是只盯着首屏那张大图,漏掉页面加载后半程才注入的广告和第三方组件,CLS统计的是整个生命周期的累积值,后半程的这几笔往往才是大头。

用了懒加载会不会让CLS变差?

用不对就会。懒加载本身省流量,但只延迟了加载、没给图片预留位置,图片进入视口后照样会把下方内容推开。正确做法是懒加载和尺寸预留一起做:延迟下载的同时,提前用宽高比把占位空间空出来,两不耽误。

CLS和LCP、INP该先修哪个?

先看哪个指标飘红。三者是独立的轴,各治各的问题。如果要排优先级,通常先保LCP(别让用户白等)和CLS(别让用户点错),这两项的负面体感最直接;INP的卡顿相对没那么显眼,但交互密集的站点同样不能落下。具体顺序还得看Search Console里哪一项拖了后腿。

交互引起的内容移动会算进CLS吗?

不会,前提是移动发生在用户交互后的500毫秒之内。点击按钮展开手风琴、切换标签页导致的内容变化,都属于预期内的移动,不计分。CLS只统计那些用户没有主动触发、页面自行发生的偏移。把一切变化都藏到点击之后既没必要,也治标不治本。

移动端的CLS通常比桌面端严重,是错觉吗?

不是错觉,移动端确实更容易出问题。移动端屏幕窄,同样距离的偏移占屏比例更大,影响分数更高;网速和机型又更参差,广告、字体、图片晚到的概率也更大。所以调CLS一定要拿真实的移动端数据看,只在桌面浏览器里测一遍不足以判断,你的用户大概率是在通勤路上、用着不那么稳定的网络打开你的站的。

权威参考资料

分享到
标签
版权声明

本文标题:《CLS累积布局偏移怎么优化?从页面跳动和误触查起》

本文链接:https://zhangwenbao.com/cls-cumulative-layout-shift-visual-stability-guide.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交