Advertising is one of the most common reasons a fast site becomes a slow one. The damage is avoidable, and mostly comes down to four decisions.

What each metric measures

LCP — how long until the largest visible element renders. Aim under 2.5 seconds.

CLS — how much the layout jumps as things load. Aim under 0.1.

INP — how quickly the page responds to interaction. Aim under 200ms.

How ads break each one

LCP. A synchronous ad script blocks parsing. Everything below it waits. If the ad is itself the largest element, a slow ad is your LCP.

CLS. The classic failure: content renders, an ad arrives, everything below jumps down. Every unreserved ad slot is a layout shift waiting to happen.

INP. Heavy ad JavaScript competes for the main thread. Third-party tags are the usual culprit; a simple image banner costs almost nothing.

The four fixes

1. Load the tag asynchronously. <script async>, always. A synchronous ad script is the difference between a fast site and a slow one, and there is no good reason for it.

2. Reserve the space. Give every slot explicit dimensions in CSS so the box exists before the ad arrives:

`` .ad-slot { min-height: 250px; } ``

This alone eliminates most ad-related CLS. For responsive slots, reserve the height of the tallest creative you accept.

3. Lazy load below the fold. Only request an ad as it approaches the viewport. Three benefits: fewer requests competing with the initial render, much better viewability, and a smaller bill if you pay per request.

Never lazy load the top slot — it is visible immediately, and delaying it hurts both LCP and revenue.

4. Prefer images over third-party tags. A hosted image is a single cached request. A third-party tag can pull in a chain of scripts you have no control over. Where you can, ask sponsors for a banner rather than a tag.

Reserving space without wasting it

The tension: reserving 250px for a slot that may go unfilled leaves a hole.

Two options. Serve a house ad so the slot is never empty — best, since the space earns something. Or collapse the slot when nothing is booked, accepting one shift at load. If you collapse, do it before first paint rather than after.

What good looks like

A well-implemented image ad should cost:

If you are seeing worse, the cause is nearly always a third-party tag rather than the ad server.

Measuring it

Test with and without ads. Run Lighthouse on a page with the slot present, then with the tag removed, and compare. That isolates the ad's contribution from everything else on your page — and gives you an honest number to point at if a sponsor's tag turns out to be the problem.