Cumulative Layout Shift (CLS) Bad Score

Could someone help me understand why I’m scoring so poorly on Cumulative Layout Shift (CLS)? I’ve checked my app’s UI and don’t see any layout shifts. If anyone can take a look at my app and let me know what might be causing the issue, I’d really appreciate it. I’m currently on a free trial, so there won’t be any charges. Please help!

I suspect it is this, where you show a stubbed out UI but thats in a different layout to when you finish loading.
If you use a skeleton loading page thats in the same format might be easier.
But you can also use the app bridge debugging to check this Config
Recording 2025-07-17 161253.mp4 [video-to-gif output image]

I’m rendering the onboarding component after the first render, based on data fetched from the database that tells me whether the user has completed onboarding. In this case, I want to conditionally show or hide the onboarding component.

If I render a skeleton on the first render and then show the actual onboarding component afterward, will that negatively impact my performance score?
Or, if I render a skeleton initially, and once the data is fetched it turns out the user is already onboarded (so I remove the onboarding component), will that lead to a poor CLS (Cumulative Layout Shift) score?

I think if you can make the layout the same across the onboarding or normal experience that would help in the first instance.
But turn on the web vitals debugging in app bridge and try out your app and the changes and you’ll see the CLS logged out so can try changes :blush: