The fix is almost always explicit dimensions
Modern browsers compute layout space from the width/height attributes on images and iframes. If those attributes are missing, the browser allocates 0 pixels until the resource loads, then reflows everything beneath when the actual size becomes known. Adding explicit dimensions to every image and embed eliminates this in one pass.
Font loading and FOUT
Web fonts that load asynchronously cause "Flash of Unstyled Text" — text renders in a fallback font, then reflows when the web font loads. Use font-display: optional or preload critical fonts to minimize this. The CLS impact is often invisible to humans but counts against your Core Web Vitals score.
Late-injected elements
Cookie consent banners, notification bars, and ads that inject after page load shift everything beneath them — sometimes catastrophically. Reserve fixed space for these elements (with min-height) so the layout doesn't move when they appear. Run PageSpeed and look at the "Avoid large layout shifts" diagnostic for specific elements to fix.