Start with the customer movement

A page can look finished and still move at the worst moment. A customer may be reading a delivery condition when a banner appears above it, or aiming for Add to Cart when a product image expands the card. The business question is not whether every animation is forbidden. It is whether content unexpectedly changes position while someone is trying to read or act. Cumulative Layout Shift, or CLS, measures unexpected visual instability. Google describes a good score as 0.1 or less at the 75th percentile of page loads, assessed separately for mobile and desktop. That is a diagnostic threshold, not evidence that your own page has met it.

Measure the experience that matters before changing CSS. Select one important page and describe a complete path: arrive from search, wait for product details, scroll into recommendations, choose a variant, and return from the basket. Record the viewport, connection conditions, whether the browser cache was warm, and where movement happened. A single clean Lighthouse page load can miss shifts after scrolling or interaction. A field metric may cover more of the page lifetime; its page or origin scope must also be checked. If the only available data is a local replay, label it as a replay rather than observed customer performance.

A layout shift record highlights elements that moved, but the highlighted element is not always the cause. A delivery note inserted above the purchase button can make the button appear in the diagnostic report even though the insertion is the root problem. In Chrome DevTools, inspect the layout shift cluster and replay the point in time; then work upward through the layout to find the element that gained size or entered the flow. Compare before and after positions, not only the numeric score. This prevents a cosmetic fix to the button while the late banner still moves the rest of the page.

Reserve space and fix the cause

Images and video are a useful first check because their dimensions are often known before download. Give the browser intrinsic width and height or a suitable aspect ratio so it can reserve the correct box while the media loads. Keep responsive styling, but test the actual crop and ratio at narrow and wide viewports. A product card containing a square image needs a different reserved shape from a wide editorial hero. If the image comes from a content system with inconsistent dimensions, set a deliberate container policy and check that it does not hide essential product detail. The aim is stable geometry with honest content, not a blank slab of fixed height.

Third-party embeds, advertising slots, recommendation widgets and consent notices need an explicit place in the layout. Estimate the space each variant needs, reserve it before content arrives, and handle failure without collapsing and re-expanding the region. When a promotional message is optional, consider showing it in an existing region or below the current reading position rather than inserting it above a control. Do not let a successful local test obscure a slower network, a different campaign, or a longer Traditional Chinese translation. Test the longest realistic copy and the state where the third party never responds.

Font loading can change line breaks and section heights even when no image is involved. Compare the fallback and final typefaces in both languages. A Chinese font swap may affect more lines than an English one, especially in a narrow card or button. Choose a close fallback, examine font loading options and metric adjustment where appropriate, and avoid hiding all text while waiting for a decorative face. A deliberate text style is useful only if it preserves readability. Recheck line wrapping after the real font arrives, at increased text size, and with a realistic account name or delivery address.

Work through a concrete release

Imagine a retailer sees the purchase button move only on mobile after a delivery estimator loads. The first investigation should compare a cold mobile visit with a warm one, then replay the timeline while selecting a delivery district. If a new message appears above the button, reserve a message region near the estimator and render pending, success and error states within that region. If the district selection itself deliberately changes the page, still check whether any delayed response later shifts unrelated content. The worked sequence identifies the cause before choosing a fix; it does not assume the delivery service or CSS is at fault.

Prioritise a shift by customer consequence and repeatability. A small movement in decorative footer content may be less urgent than a purchase control moving during an order, even when both contribute to the same metric. Log the page, viewport, trigger, affected control, suspected cause, proposed fix and owner. Fix one cause at a time so the next replay has an interpretable result. If a component is shared across many pages, verify a representative set: a short and long product name, sold-out and in-stock states, English and Chinese, and a page with the promotional module absent.

After the change, repeat the original path with the same test conditions, then vary device size, cache state and network speed. Watch the page through scrolling and the return journey rather than stopping at first paint. Confirm that the reserved area does not cover controls, produce excessive blank space or clip translated copy. Use the available field view later to see whether customers experience the improvement; allow for its reporting window and do not turn an immediate lab improvement into a claimed business result. The release is ready when the movement that harmed the task is removed and the page remains usable in all tested states.

Make the fix maintainable

Keep a component inventory for every place where content can arrive late: product media, stock status, shipping estimates, recommendations, chat, consent panels and fonts. For each one, specify its initial box, loading state, final state and failure state. This is more precise than telling a developer to “improve CLS.” It also exposes ownership: marketing may change a banner, merchandising may upload an unusual image, and a third-party widget may expand after deployment. The component owner can then review those changes against a visible space reservation contract. Without that agreement, a CSS repair can be undone by the next campaign.

Do not equate a low CLS score with a fully accessible page. A banner that covers a button without moving anything could leave the score unchanged while still blocking the task. Likewise, a customer who enlarges text may encounter clipping rather than movement. Add direct usability checks beside the metric: can a keyboard user reach the next action, can magnified text be read, and does the focus indicator stay visible when a message arrives? The numeric measure helps locate instability, but the acceptance test is the customer journey. This distinction matters when a design hides movement by imposing rigid heights that simply truncate content.

Some movement follows deliberate user input and is expected, but the timing and surrounding layout still matter. Opening an accordion may expand its own section; that is understandable when the customer requested it. A delayed shipping calculation several seconds after a tap can instead feel like an unrelated jump. Review the interaction in sequence, including waiting messages, because the CLS definition excludes certain shifts near recent input but does not make every delayed response acceptable. Explain to the team why a technical score and a human observation can differ. Keep both in the release record so the next maintainer understands the design choice.

Set a modest monitoring routine after release. Review the same high-value pages when a new promotion, image template or font is introduced, and compare mobile and desktop separately. If field data exists, inspect its coverage and reporting period before attributing a change to one release. If it does not, keep a repeatable scripted path and a short screen recording for manual comparison, clearly labelled as internal tests. Escalate a regression that moves a primary action even if the overall page percentile looks acceptable. This keeps the work tied to customer risk instead of chasing a single attractive number.

A release note should separate the observation, the change and the unresolved risk. For example: “In a cold mobile replay, the delivery message appeared above the purchase control after the estimate returned; we reserved a message region and repeated the same path without that movement.” That is a test observation, not a claim about all customers. Record the build, page template and states tested so a future campaign can repeat the check. If a third-party embed remains unpredictable, document the affected journey and an owner who can disable or replace it. A responsible fix is a maintained decision, not a screenshot of one quiet load.

Before you release the change

  • Record the customer path, viewport and cold or warm cache state before changing the page.
  • Trace the element that entered or grew above the moved content.
  • Verify English and Chinese across loading, error and return states.

Sources & further reading