Skip to main content

Engage & CLS — Avoiding Layout Shifts (Cumulative Layout Shift)

Flore Bayle avatar
Written by Flore Bayle
Updated over a week ago

The CLS (Cumulative Layout Shift) metric measures unexpected layout shifts perceived by the user while the page loads.
This article aims to explain:

  • which Engage formats may generate CLS

  • why this happens

  • how to correct it directly in the Poool Engage Dashboard

  • how to validate the integration on your site

  • recommended best practices

Why can Engage cause CLS?

Engage is displayed inside an iframe, loaded asynchronously. Two main scenarios may generate a visual shift:

Case 1 — Inline display inside a div without a reserved height

The Engage element appears directly in the content flow, but the container has no defined height (same for width, though this is generally less problematic).


➡️ When the iframe loads, the content “pushes” the rest of the page downward, creating unwanted CLS.

Examples of affected formats:

  • Inline widget / inside an article between paragraphs

  • Widgets inserted into a dedicated zone outside content (e.g., promotional block in a sidebar)

💡 How to fix?

<div id="engage-zone" style="min-height: 300px;"></div>

Note: The value is indicative and should be adjusted based on the actual height of your Engage element.


Case 2 — Full-screen modal without a fixed height

Full-page modals require a forced height inside the iframe to prevent layout recalculation at the moment of display.


➡️ Without a proper configuration in the dashboard (or directly on the site container hosting the iframe) using height: 100vh, the iframe dynamically resizes according to the components loaded from the dashboard.

This phenomenon is usually not visible to users, but Core Web Vitals measurement tools may report a non-negligible CLS score.

💡 How to fix?
Reserve the necessary height from:
Modify element properties > Advanced configuration > Parent container CSS > #p3-parent-frame {min-height :100vh;}

Example: CLS before and after the fix on a modal overlay:

After implementing the fix, the observed CLS is much lower :

Quick checklist to avoid CLS

For inline formats

  • A reserved height is defined

  • Test rendering on mobile (where CLS tends to be more visible)

For full-page modals

  • height: 100vh; added to the parent CSS

  • No CSS animations that might modify iframe size

  • Test on low-end devices and slower connections

On the publisher’s site

  • Ensure the container is located in a stable part of the DOM

  • Ensure the container is not dependent on lazy-loading or similar techniques

How to test whether an Engage element generates CLS?

Locally via Chrome DevTools:

  1. Open your browser’s developer tools

  2. Go to the Performance tab

  3. Reload the page

  4. Inspect the CLS section and the “shifts” areas in the HTML

Using real-world user data - several tools are available. When eligible, Google provides the Chrome User Experience Report (CrUX), offering real user CLS measurements (sample example shown in the PDF).

With these best practices applied, Poool Engage introduces no perceptible CLS and remains fully compliant with Core Web Vitals recommendations.

Did this answer your question?