Best SEO Singapore
SEO Insights

Cumulative Layout Shift: What It Is, Why It Tanks Your Rankings, and How to Fix Your CLS Score

Jim Ng
Jim Ng
·
CLS Impact & Fixes
Cumulative Layout Shift
caused by
Unsized images, ads, dynamic content
Elements loading without reserved space force visible content to jump unexpectedly.

measured by
Impact Fraction × Distance Fraction
Viewport area affected multiplied by shift distance produces a unitless score; worst session window counts.

hidden by
Lab vs. field score gap
Lighthouse on fast Wi-Fi can show 0.03 while real mobile users on slow networks score 0.31.

directly affects
Google ranking signal (tiebreaker)
In competitive niches, poor CLS loses the tiebreak against otherwise equal pages.

produces
Mis-taps and user frustration
Shifting layouts cause accidental clicks, destroying trust and conversion rates.

resolved when
Score ≤ 0.1 at 75th percentile
Reserving element dimensions and controlling late-loading content brings field data under Google's good threshold.

If you’ve ever tried to tap “Add to Cart” on your phone and accidentally hit a banner ad because the page jumped, you already know what Cumulative Layout Shift feels like. You just didn’t know it had a name. CLS is one of Google’s three Core Web Vitals, and it directly affects how your site ranks. More importantly, it affects whether your visitors actually stay long enough to become customers.

I’ve audited hundreds of Singapore business websites over the years. CLS is one of the most common technical SEO problems I see, and one of the most fixable. The frustrating part is that most site owners don’t even know it’s happening because they test their own site on fast office Wi-Fi with everything cached. Their actual users on mobile data along Orchard Road are having a very different experience.

Let me walk you through exactly what CLS measures, how to diagnose it on your site, and the specific fixes that will bring your score down to where Google wants it.

What Exactly Is Cumulative Layout Shift?

Cumulative Layout Shift is a metric that quantifies how much visible content moves around unexpectedly while a page loads. Google introduced it as part of Core Web Vitals in 2020, alongside Largest Contentful Paint (LCP) and Interaction to Next Paint (INP).

Think of it this way. You walk into a hawker centre, you spot an empty seat, you walk toward it, and someone slides the chair two tables over just as you’re about to sit down. That’s layout shift. Now imagine that happening three or four times before you finally sit. That accumulated frustration is the “cumulative” part.

On a webpage, these shifts happen when elements like images, ads, embedded videos, or dynamically injected content load in without the browser knowing how much space to reserve for them. The text you were reading suddenly drops 200 pixels. The button you were about to click is now somewhere else entirely.

How CLS Is Calculated (The Technical Breakdown)

CLS isn’t measured in seconds or milliseconds like other performance metrics. It’s a unitless score calculated from two components:

Impact Fraction measures the percentage of the viewport that the unstable element occupies. If a banner takes up 40% of the visible screen area and shifts, the impact fraction is 0.4.

Distance Fraction measures how far the element moved, relative to the viewport. If that same banner shifted down by 20% of the viewport height, the distance fraction is 0.2.

The layout shift score for that single event is impact fraction multiplied by distance fraction: 0.4 × 0.2 = 0.08. Your total CLS score is the sum of the largest burst of layout shifts during the page’s lifetime, using a “session window” approach. Google groups shifts that happen within 1 second of each other (with a maximum window of 5 seconds) and takes the worst session window as your CLS score.

This session window method was updated in 2021. If you’re still reading old articles that describe CLS as a simple sum of all shifts throughout the entire page lifecycle, that information is outdated.

What Counts as a Good CLS Score?

Google’s thresholds are clear:

  • Good: 0.1 or lower
  • Needs Improvement: Between 0.1 and 0.25
  • Poor: Above 0.25

To pass the Core Web Vitals assessment, at least 75% of your page visits need to score 0.1 or below. That’s based on the 75th percentile of real user data, not a single lab test.

Here’s something many site owners miss. Your CLS might look fine in a Lighthouse test on your desktop but fail miserably in the field. That’s because lab tests don’t account for ads loading late, third-party scripts firing unpredictably, or the slower network conditions your actual visitors experience. I’ve seen Singapore e-commerce sites score 0.03 in Lighthouse and 0.31 in CrUX field data. The gap can be enormous.

Why CLS Matters for Your SEO and Your Revenue

Let me be direct. CLS is not just a vanity metric. It has real consequences for your business.

It Directly Affects Your Google Rankings

Core Web Vitals are a confirmed ranking signal. While content relevance and backlinks still carry more weight, CLS can be the tiebreaker between two otherwise equal pages. In competitive Singapore niches like insurance comparison, property listings, or tuition services, that tiebreaker matters.

It Destroys Conversion Rates

A study by the Chromium team found that users who experienced low CLS were 24% less likely to abandon a page. Think about what that means for your checkout flow. If your “Proceed to Payment” button jumps because a trust badge loaded late, some percentage of your customers are tapping the wrong thing, getting confused, and leaving. You’re literally paying for traffic that bounces because of a CSS oversight.

Mobile Users Get Hit Hardest

In Singapore, mobile accounts for roughly 70% of web traffic. Smaller screens mean that even a modest pixel shift represents a larger percentage of the viewport. A 150-pixel shift on a 1440px desktop monitor is barely noticeable. That same 150-pixel shift on a 667px mobile screen is a 22% viewport jump. Your mobile CLS score will almost always be worse than desktop, and Google uses mobile-first indexing.

It Erodes Trust

This is harder to measure but just as real. When your page feels “jumpy,” visitors subconsciously associate that instability with an untrustworthy or poorly maintained site. For businesses in regulated industries, like financial advisory firms governed by MAS guidelines, that perception of instability can be particularly damaging.

How to Measure Your CLS Score Accurately

Field Data (What Real Users Experience)

Field data is the gold standard because it reflects actual user conditions. Use these tools:

  • Google Search Console: The Core Web Vitals report groups your URLs by status (Good, Needs Improvement, Poor) and shows trends over time. Check this monthly at minimum.
  • PageSpeed Insights: Enter any URL and look at the “Origin Summary” section for field data from the Chrome User Experience Report (CrUX). This shows the 75th percentile CLS for real visitors.
  • CrUX Dashboard: For deeper analysis, connect CrUX data to BigQuery or use the CrUX Dashboard in Data Studio. This lets you segment by device type, connection speed, and country.

One caveat. If your site gets fewer than roughly 1,000 monthly visits, CrUX may not have enough data to report. In that case, you’ll need to rely on lab data and your own Real User Monitoring (RUM) setup.

Lab Data (Controlled Testing)

Lab tools simulate a page load under fixed conditions. They’re essential for debugging but won’t catch issues caused by ads, A/B testing scripts, or personalisation engines that only fire for real users.

  • Lighthouse (in Chrome DevTools): Open DevTools, go to the Lighthouse tab, run an audit. Look at the CLS score and the diagnostic “Avoid large layout shifts” section, which tells you exactly which elements shifted.
  • WebPageTest: Run a test from a Singapore server (there’s a Singapore location available) to simulate local conditions. The filmstrip view lets you visually spot layout shifts frame by frame.
  • Chrome DevTools Performance Panel: Record a page load, then look for the “Layout Shift” entries in the timeline. Click each one to see which DOM element moved and by how much.

How to Improve Your CLS Score: Practical Fixes

Set Explicit Dimensions on All Media Elements

This is the single most impactful fix for most sites. Every <img>, <video>, and <iframe> on your page should have width and height attributes defined in the HTML. This allows the browser to calculate the aspect ratio and reserve the correct space before the asset downloads.

For responsive layouts, you don’t need to use fixed pixel values. Modern browsers support the aspect-ratio CSS property. Set aspect-ratio: 16/9 on your video containers, for example, and the browser will hold the space regardless of viewport width.

If you’re using a CMS like WordPress, check that your theme isn’t stripping width and height attributes from images during rendering. Some older themes do this in the name of “responsive design,” which actually makes CLS worse.

Contain Your Ad Slots

Ads are one of the biggest CLS offenders, especially for content-heavy sites. The ad network’s script loads asynchronously, and when the creative finally renders, it pushes everything below it downward.

The fix: wrap every ad slot in a container with a minimum height that matches the most common ad size for that placement. If your leaderboard slot typically serves 728×90 ads, set min-height: 90px on the container. Yes, you might occasionally get a blank space if the ad doesn’t fill, but that’s far better than a layout shift.

For Singapore sites running Google AdSense or local ad networks, also consider using the content-visibility: auto CSS property on below-the-fold ad containers. This tells the browser to skip rendering those elements until they’re near the viewport, reducing both CLS and initial load time.

Preload and Optimise Web Fonts

Custom fonts cause layout shifts in two ways. First, the fallback font renders with different character widths, so when the custom font swaps in, text reflows and pushes elements around. Second, if the font file is large, the swap happens noticeably late.

Here’s what to do:

  1. Add font-display: optional instead of font-display: swap for non-critical fonts. The “optional” value tells the browser to use the custom font only if it loads within approximately 100ms. If it doesn’t, the fallback stays. Zero layout shift.
  2. Preload your critical font files with <link rel="preload" href="/fonts/your-font.woff2" as="font" type="font/woff2" crossorigin> in the <head>.
  3. Use font-display: swap only when brand typography is essential (your logo font, for instance). In that case, match your fallback font’s metrics as closely as possible using the size-adjust, ascent-override, and descent-override descriptors in your @font-face rule.

This approach alone reduced CLS by 0.08 on a Singapore F&B client’s site we worked on last year. That moved them from “Needs Improvement” to “Good” across all pages.

Avoid Injecting Content Above Existing Content

This sounds obvious, but it happens constantly. Cookie consent banners that push the page down instead of overlaying it. Notification bars that insert themselves at the top of the DOM. Promo banners loaded via JavaScript after the initial render.

Any content injected above the user’s current scroll position will cause a layout shift. The only exception is if the injection happens in response to a user interaction (like clicking a button), which Google excludes from CLS calculation because it’s expected.

For cookie banners (which every Singapore site needs for PDPA compliance if you’re collecting data), use a fixed-position overlay or a bottom-anchored bar. Don’t push the page content down.

Use CSS transform for Animations

If you’re animating elements using properties like top, left, height, width, margin, or padding, you’re triggering layout recalculations. Each recalculation can register as a layout shift.

Switch to transform: translateX(), transform: translateY(), and opacity for all animations. These properties are handled by the compositor thread and don’t affect layout at all. Your animations will actually be smoother, too, because they can run at 60fps without blocking the main thread.

Ensure bfcache Compatibility

When a user hits the back button, browsers try to restore the page from the back/forward cache (bfcache) instantly. If your page isn’t bfcache-eligible, the browser has to reload it from scratch, which means all your layout shift problems happen again.

Common bfcache killers include unload event listeners, Cache-Control: no-store headers, and open IndexedDB connections. Test your bfcache eligibility in Chrome DevTools under Application > Back/forward cache. Fix any issues flagged there.

This is especially relevant for Singapore users on MRT commutes who frequently navigate back and forth between search results and your pages. A bfcache-eligible page loads instantly with zero CLS on back-navigation.

A Quick CLS Audit Checklist

Before you wrap up, run through this checklist on your top 10 landing pages:

  1. Do all images and videos have explicit width and height attributes?
  2. Are ad containers sized with min-height to prevent collapse?
  3. Are web fonts preloaded, with appropriate font-display values?
  4. Is any content being injected above the fold after initial render?
  5. Are all animations using transform and opacity only?
  6. Is your cookie/notification banner using fixed or sticky positioning?
  7. Are your pages bfcache-eligible?
  8. Have you checked CLS on mobile specifically (not just desktop)?

If you can tick all eight boxes, your CLS score should comfortably sit below 0.1.

Frequently Asked Questions About Cumulative Layout Shift

What’s the Most Common Cause of High CLS on Singapore Websites?

From what I’ve seen across our client base, it’s almost always images without defined dimensions, followed closely by late-loading ad units and cookie consent banners that push content down instead of overlaying it.

Does CLS Affect My Google Rankings Directly?

Yes. CLS is one of three Core Web Vitals that form part of Google’s page experience ranking signal. It won’t override great content, but it can cost you positions in competitive SERPs where multiple pages have similar relevance and authority.

Why Is My CLS Score Different in Lighthouse vs Search Console?

Lighthouse measures lab data under controlled conditions. Search Console reports field data from real Chrome users. The difference usually comes from ads, third-party scripts, and network variability that lab tests don’t simulate. Always prioritise the field data score.

Can a Single Large Layout Shift Ruin My Score?

Absolutely. One hero image loading without dimensions can produce a layout shift score of 0.3 or higher on its own. That single element would push your entire page into “Poor” territory.

Is CLS More Important on Mobile Than Desktop?

Both matter, but mobile typically produces worse CLS scores because the viewport is smaller, making any pixel shift a larger proportion of the screen. Since Google uses mobile-first indexing, your mobile CLS is what counts for ranking purposes.

Need Help Fixing Your CLS Score?

If you’ve gone through this guide and your CLS is still stubbornly above 0.1, the issue is likely buried in your theme code, third-party scripts, or ad implementation. These are the kinds of problems that take a practitioner to diagnose properly, someone who can read a performance trace and pinpoint exactly which DOM element is shifting and why.

That’s what we do at BestSEO. If you’d like us to run a Core Web Vitals audit on your site and give you a prioritised fix list, get in touch. No obligations, just a clear picture of where you stand and what to do about it.

Jim Ng, Founder of Best SEO Singapore
Jim Ng

Founder of Best Marketing Agency and Best SEO Singapore. Started in 2019 cold-calling 70 businesses a day, scaled to 14, then leaned out to a 9-person AI-first team serving 146+ clients across 43 industries. Acquired Singapore Florist in 2024 and grew it to #1 rankings for competitive keywords. Every SEO strategy ships with his personal review.

Connect on LinkedIn

Want Results Like These for Your Site?

Book a free 30-minute strategy session. No pitch, just a real look at what is holding your organic traffic back.

Book A Free Growth Audit(Worth $2,500)