betterreviews.Journal 
XII·On Performance·26 June 2026

The cumulative layout shift of a star rating.

Google penalises pages whose content moves while it loads. The star widget under the buy button moves the page. Reading the score, then the cost, then the alternative.

BetterReviews Editorial·Studio note
CONTENTS · 07
  1. 01What the measurement actually measures
  2. 02Measuring the widgets, with method
  3. 03The cost, in ranking terms
  4. 04"But the widget is small and the score is low"
  5. 05The thing the metric is actually telling you
  6. 06What the merchant should do this afternoon
  7. 07The closing turn

A buyer opens a product page on a phone. The price is at the top. She scrolls a centimetre. The price moves. She tries again. The buy button has slid down by 240 pixels. A star widget has materialised between them. She taps where the buy button used to be. The page reorders mid-tap. She has just experienced a layout shift, and Google's algorithm has just observed one.

Google's Core Web Vitals are a ranking signal as of June 2021, refreshed in 2024 with Interaction to Next Paint replacing First Input Delay. The signal that watches the kind of motion described above is called Cumulative Layout Shift. It is a unitless number between zero and roughly four. A page with a CLS score of 0.1 or less is, in Google's framing, good. Anything between 0.1 and 0.25 is needs-improvement. Anything above 0.25 is poor.

A typical Shopify product page with a review widget under the buy button, in 2026, scores between 0.18 and 0.34 on the mobile measurement that the ranking signal uses.

The widget is, mechanically, the largest single contributor to that score.

What the measurement actually measures

Cumulative Layout Shift is the sum of layout shift events that occur during the page's life. Each event is a fraction equal to the impact (how much of the viewport is moved) multiplied by the distance (how far it moves relative to the viewport's height). A small block shifting 100 pixels in a 900-pixel viewport contributes a different amount than a large block shifting 50 pixels.

Google takes the largest cluster of layout shifts within any five-second window and reports that as the page's CLS. The metric was tightened in 2021 (so that long-lived single-page applications could not accumulate small shifts indefinitely) and the windowed approach has remained the production definition since.

The mechanic that produces the score, on a review-widget page, is consistent. The page renders the initial HTML in two or three hundred milliseconds. The buy button and the product image are visible. The user starts to read. A few hundred milliseconds later, the review widget's JavaScript finishes downloading and parsing, calls the platform's API, receives a payload of reviews, and constructs the widget's DOM. The widget claims its vertical space at this moment. Everything below the widget moves down. The page's content has shifted. The CLS score increments.

This is a feature of the widget shape, not a bug of any particular vendor.

Measuring the widgets, with method

Cumulative layout shift
Google "good" threshold · 0.10
WITHOUT WIDGET0.05
WITH WIDGET0.22
By vendor · with widget
OKENDO0.19
YOTPO0.22
LOOX0.31
The widget loads late. The page shifts. The metric records the shift.
Most Shopify product pages ship review widgets that push CLS past Google's good threshold.DevTools, Dawn 12, simulated Fast 3G · May 2026

We measured three popular review widgets in Chrome DevTools' Performance panel, on a clean install of each on a stock Shopify theme (Dawn 12), on a simulated Fast 3G connection with the device emulated as a Moto G4 (the device Google uses for its own field measurements). The page was loaded fresh, cache cleared, no other widgets on the page besides the standard Shopify storefront chrome.

Yotpo, standard install: CLS score 0.22, predominantly from the main widget loading 280 pixels of vertical space below the buy button, approximately 700 milliseconds into the load.

Okendo, standard install: CLS score 0.19, from a similar event, with the widget claiming 240 pixels of vertical space approximately 620 milliseconds into the load. The score is slightly better than Yotpo's because Okendo's initial CSS reserves a smaller placeholder area, reducing but not eliminating the shift.

Loox, standard install: CLS score 0.31, the highest of the three. The high score is driven by two events: the main widget claims approximately 220 pixels at the 580-millisecond mark, and then a second shift occurs around the 1,400-millisecond mark when the photo carousel finishes lazy-loading its images and the widget's vertical space expands by a further 120 pixels.

Three platforms. Three CLS scores in the 0.19 to 0.31 range. All three above Google's "good" threshold of 0.1. Two of them firmly in the "needs improvement" band. One of them squarely in the "poor" band.

These numbers are not anomalies. Web.dev's 2025 field data, aggregated from the Chrome User Experience Report, places review-widget-heavy Shopify product pages in the 75th-percentile CLS bucket more often than any other content type. The widgets are the dominant cause of CLS issues on product pages in 2026. They are not the only cause. They are the dominant one.

The cost, in ranking terms

Core Web Vitals are not a primary ranking factor in the way that on-page content or backlinks are. Google has been explicit since 2021 that CWV is a tiebreaker: when two pages have approximately equal content relevance, the page with better Core Web Vitals will rank higher. The signal is real but small.

The signal is also cumulative. A merchant whose product pages have a CLS of 0.25 is paying a small penalty on every product page, on every query, every time. The penalty is not enough to drop a top-three result to position eight. It is enough to drop a position-three result to position five. It is enough to drop a position-eight result off the first page entirely. Across a catalogue of two thousand product pages, across thirty thousand queries those pages might rank for, the aggregate cost is large.

We addressed the half-life dimension in the half life of a product page: a product page accumulates relevance over years, in the customers' language. A page that ranks 0.5 positions lower because of a CLS penalty is a page that loses a small percentage of clicks every time it shows up in the index. Over the half-life of the page, that small percentage becomes a large number.

"But the widget is small and the score is low"

A defender of the widget shape will say: the CLS score on most product pages is fine. Lazy-loading is a solved problem. Reserve the space, render a skeleton, swap in the content, no shift.

This is, mechanically, a fix. Several review platforms have shipped it. Yotpo's premium tier has a CSS reservation option. Okendo reserves space by default in newer installs. Loox is the most consistent offender because its space requirement varies with the number of photos in the carousel, which the merchant cannot know at render time.

The fix is partial. It removes the shift, but it does not change the underlying shape: the reviews are still rendered by JavaScript after the page loads. The reserved space is a placeholder for content that is not yet there. The placeholder solves the CWV measurement, in the sense that no shift occurs. It does not solve the citation problem (no crawler reads the reserved space) or the freshness problem (Googlebot reads the reservation, not the content). It is a measurement fix, not an architectural fix.

The widget can be made to stop shifting the page. The widget cannot be made to stop being an empty placeholder where the corpus should be. The CLS score, fixed, is the wallpaper. The asset is in the wrong shape behind it.

The thing the metric is actually telling you

The point of this essay is not to switch widget vendors. The point is to read what the metric is reporting.

CLS reports that the page's content is arriving in two stages: the merchant's content in the first stage, the customer's content in the second. The page is structurally divided between what the merchant rendered (the title, the price, the description) and what the platform injected later (the stars, the count, the reviews). The shift is the mechanical witness of that division.

A page where the customer's writing is part of the merchant's HTML, served from the merchant's own template, rendered at request time, has no division and no shift. The CLS score for such a page, with the review corpus inline as part of the body content, is whatever the rest of the theme's CLS would be. The widget does not need to be fixed. The widget needs to not be the source of truth for the review content.

This is what the end of the review widget argued from a different angle. The metric here gives the same argument a measurement. The widget is invisible to crawlers, costs link equity (we wrote about that in the iframe essay), and shifts the page on every load. Three independent costs, one underlying shape.

The deeper consequence sits in the citation economy. A merchant whose page ranks half a position lower because of CLS is a merchant whose page is consulted less often by the human searcher and, by extension, less often by the LLM during its retrieval-augmented pass. CWV is not only a Google ranking input. It is a discoverability input that determines whether the page gets surfaced at all in the corpus the answer engines reach for. A page that is harder to find is a page that is harder to cite, even when its content is otherwise excellent. The CLS penalty propagates.

What the merchant should do this afternoon

Open Chrome DevTools on the bestselling product page. Performance tab. Disable cache. Throttle to Fast 3G. Click record. Reload the page. Stop the recording. Look for Layout Shift entries in the timeline. Sum the score values. That is the CLS contribution of each event.

Find the largest shift. In the merchant's case, almost certainly, the largest shift will be labelled with the review widget's container element. Click it. The DevTools panel will show the source.

The merchant now has, on the same screen, the source element and the score. The source element is the widget. The score is the cost. The cost is real, even if small. The cost is paid on every page load, every search-result impression, every buyer interaction with the site.

The merchant can, at this point, choose to reserve space and accept the placeholder. Or the merchant can choose to render the content server-side, on the merchant's own template, in the merchant's own HTML, where the score is zero by construction and the content is also legible to GPTBot.

The closing turn

A CLS score is a small thing. It is also a measurement of a structural problem. The review widget shifts the page because it is not yet there when the page renders. It is not yet there because it is rendered by JavaScript that has not yet run. The JavaScript has not yet run because the widget is a separate system from the page, called late, owned by a different vendor, hosted on a different CDN, written for a browser and not for a crawler.

The metric is the symptom. The shape is the disease.

The merchant who fixes the symptom (reserves the space, removes the shift) still owns the disease. The merchant who fixes the shape (ships the reviews in the page's HTML) gets the symptom gone for free. The CLS score becomes whatever the rest of the theme is. The widget, where it survives at all, becomes a small visual flourish at the top of the page. The body of the page contains the body of the reviews. The page does not shift, because nothing is being injected. The corpus is the page. The page is the corpus.

The CLS of a star rating is, in the end, a story about an asset that arrived in the wrong place at the wrong time. The right place is the page. The right time is render. Put the language where it belongs.

If any of this reads like something your store could use,write to us.

We will write back.

Corrections

corrections@better-reviews.com

Mistakes are listed at the foot of the page when found.