While investigating a different Breeze-related issue, I happened to review parts of the plugin code and noticed that Breeze’s Lazy Load feature rewrites image tags quite aggressively. It replaces the original image src with a placeholder and moves the real image URL to a custom attribute. It also modifies srcset attributes. I am not certain that this is the cause of your issue, but it made me wonder whether Cloudflare Polish might sometimes be seeing the placeholder image rather than the original image during processing.
As a quick test, it might be worth disabling only the Breeze Lazy Load feature while keeping the rest of Breeze enabled, then checking whether Cloudflare Polish starts behaving consistently. If that changes the behavior, it could help narrow down the source of the problem and provide useful information for the Breeze developers.
Thanks for the detailed report, and good data point that Super Page Cache works for you — that tells us a Breeze feature is likely involved, but we still need to pin down which one. Could you run a few quick checks so we can confirm whether this is a Breeze bug or a configuration issue?
1. Share your Breeze settings
- Screenshot of Breeze → CDN tab (especially the CDN URL value).
- Screenshot of Breeze → Basic Options (Lazy Load + Use Native Lazy Load toggles).
2. Check if images are reaching Cloudflare
Pick any image URL from your page and run:
curl -I https://your-image-url.jpg
- If the response has no <code class=””>cf-ray / <code class=””>Server: cloudflare → the image is bypassing Cloudflare (likely because Breeze’s CDN URL points to a host that isn’t proxied by Cloudflare). That alone would explain why Polish never processes it.
- If <code class=””>cf-ray is present but <code class=””>cf-polish is missing → the image is reaching Cloudflare, so the cause is elsewhere.
3. Quickly test the Lazy Load theory
In Breeze → Basic Options, turn Lazy load images = OFF, save, purge both Breeze and Cloudflare cache, then reload the page and check the <code class=””>cf-polish header in DevTools → Network.
- If Polish now works consistently → Breeze’s JS lazy loader was the cause. You can either keep it off, or enable Use Native Lazy Load instead (it only adds <code class=””>loading=”lazy” and doesn’t rewrite <code class=””>src / <code class=””>srcset).
- If it still misbehaves → Lazy Load wasn’t the cause.
Please share the <code class=””>curl -I output and the result of step 3 — that will let us tell you definitively which Breeze feature (if any) is responsible and how to fix it without dropping Breeze.
Hey Guys thanks for the responses. So i figured this out and it works but honestly, not sure of all the steps.
I am Cloudways hybrid, running Breeze, the Cloudflare plugin and polish is working.
one thing i’ll say is maybe i had too many moving parts going at once and had several challenges
I also switched to Lightning stack at same time. Polish wasnt working. I was gettign s-maxage of a year (which is horrible for a website) and couldnt figure out why
I went back to hybrid (as I needed to change htaccess to handle CacheControl), put back breeze and the Cloudflare plgin.. refreshed all of the cache’s… and everntually i was getting webp images from CF, my maxage and s-maxage settings were correct. All was good in the world.
Not sure if it was the lightning stack? well i know lightning would not allow me to set cachecontrol easily… but in the end i got to a place where it all works.