For Founders, Webflow designers, Marketing leads · Intermediate · Informational · Solves: Slow Webflow homepage on mobile, Lighthouse scores used as sales theater, Chat widgets and tag manager wrecking INP
Key takeaways
- Do not treat a 40-to-90 Lighthouse slide as evidence. Use Search Console field data on real templates.
- LCP on Webflow is usually an oversized hero. Do not lazy-load it.
- Fonts, IX2 page-load motion, and third-party scripts are the usual INP tax.
- Reserve image and embed space or CLS will keep failing after you compress files.
The keyword plan wanted a headline about taking Webflow sites from 40 to 90. That number is a sales story I will not invent. I do not have a published before-and-after dataset that says every Webflow build I touch jumps from a 40 Lighthouse score to a 90. Lab scores also move when you test from a different location, throttle, or cache state. Treating a single Lighthouse screenshot as a case study is how agencies lie with a green circle.
What I will do is explain the Webflow performance work that actually shows up in Lighthouse and, more importantly, in field data. Google uses Core Web Vitals from real users. Search Console is the report that matters. PageSpeed Insights is a lab plus a field snapshot. If you only chase a 90 on a cold Lighthouse run, you will strip the site into something nobody can market, then watch INP stay ugly because Tag Manager is still a junk drawer.
The current metrics are LCP, INP, and CLS. Google's overview is web.dev Core Web Vitals. Run PageSpeed Insights on the live templates you care about, then compare the field section to Search Console.
Field data versus a Lighthouse screenshot
Lighthouse is a controlled test. It is useful for finding oversized images, blocking CSS, and ridiculous JavaScript. It is not a promise of rankings. Field data is the Chrome User Experience Report sample for your origin or URL group. A site can pass Lighthouse on an empty homepage and fail LCP on the blog template that actually gets traffic.
Measure the templates, not one vanity URL: home, a CMS item with a real hero, a long marketing page with interactions, and whatever you run ads to. Mobile is the default conversation. If desktop looks fine and mobile LCP is late, you do not have a 'performance win.' You have a desktop screenshot.
If the only evidence is a Lighthouse 90 on staging with the chat widget removed, you do not have a result. You have a demo.
LCP: the hero is usually the problem
Largest Contentful Paint is almost always a big image, a heading that waits on a font, or a hero that is assembled by JavaScript after the first paint. On Webflow, the usual pattern is a full-bleed background image uploaded at several thousand pixels, served without a compressed modern format, and then covered by a gradient overlay that does not change the fact that the browser still downloaded the file.
Google's LCP documentation is the definition. Optimize the actual LCP element. Guessing 'make everything lazy' will delay the hero and make LCP worse.
- Identify the LCP element in the Performance panel or in PageSpeed Insights.
- Export or replace that image at a sensible max width for its display size.
- Use Webflow's responsive image settings. Do not paste a 4x PNG into a 420px column.
- Avoid background-image for the LCP photo when an img tag can carry width, height, and srcset.
- Do not lazy-load the hero. Lazy-load below-the-fold assets.
- If a video or Lottie is the largest element, that is a design decision, not a compression setting.
Webflow's CDN helps once the file is not absurd. It will not invent missing dimensions. It will not crop a 6 MB slider into a good LCP. Replace sliders that autoplay multiple full-screen images. One still image with a short headline outperforms a carousel that exists to make the Designer feel expensive.
Background videos are a separate LCP trap. A muted autoplay loop looks cheap in a sales deck and expensive in bytes. If the video is decorative, a poster image as the LCP element is usually the adult choice. If the video is the product, host it on a player that does not download the full file before first paint, and accept that this template may never look like a marketing-site Lighthouse demo. That is a tradeoff you document, not a score you fake.
Lottie and other JSON animations can become the largest element even when they look like a small icon on the artboard. If PageSpeed Insights says the LCP node is a canvas or SVG animation, replace it on mobile with a still frame. Keep the motion on desktop if brand insists. Core Web Vitals are evaluated per experience. Mobile field data is the one companies argue about after a redesign.
Fonts: three families is already a tax
Custom fonts block or shift text depending on how they load. Multiple weights, a display font plus a body font plus an icon font, and a Typekit kit you forgot to subset will delay LCP and cause CLS when fallback metrics do not match.
- Two families maximum on most marketing sites, with a real reason for the second.
- Limit weights. You probably do not need 100 through 900.
- Prefer font-display behaviors that do not hide text forever.
- If you use Google Fonts via a runtime request, you added a third-party connection. Self-host or use Webflow's font hosting when you can.
- Match fallback metrics so the swap does not shove the H1 down the page.
I would rather have a system font stack that loads instantly than a boutique typeface that makes the first paragraph invisible for a second. If brand insists on the typeface, subset it and stop loading unused glyphs.
IX2, interactions, and INP
Webflow interactions are easy to stack. Scroll animations, page load sequences, parallax, and 'animate every card on enter' all compete with the main thread. Interaction-to-Next-Paint cares about how long the page stays busy after a tap or click. A beautiful IX2 timeline that runs on every scroll is a latency budget you are spending without a conversion reason.
Read INP on web.dev. Then turn off page-load animations on mobile if they delay first input. Then delete interactions on elements that are not in the viewport and do not change the offer.
Custom JS in project settings is the other INP bucket. Sliders, smooth-scroll libraries, marquee clones, and leftover jQuery plugins from a cloneable will hurt more than another 50ms of Webflow's own runtime. Profile on a mid phone, not on your workstation with 50 tabs and a fan that never spins.
Third-party scripts
This is where 'we optimized Webflow' usually fails in production. The Designer file is acceptable. Then marketing adds Tag Manager, two pixels, a chatbot, a scheduling embed on every page, Hotjar, a cookie banner that loads three vendors, and an A/B tool. Lighthouse will punish you. Field INP will punish you more.
- Inventory every script in GTM and in project custom code. If nobody owns it, it goes.
- Load chat and social widgets after idle, or only on pages that need them.
- Do not put a calendar iframe in the global footer if the CTA is a link to a booking page.
- Cookie banners should not inject the entire ad stack before consent logic finishes.
- Measure INP before and after each removal. Do not remove analytics you actually use.
I will not quote a fake 'we cut 400ms' number. You will see the difference in the unused-JavaScript audit and in the field INP percentile if third parties were the bottleneck. If they were not, stop blaming Tag Manager and go back to the hero image.
Scheduling embeds deserve a special mention because they show up on every 'book a call' site. An iframe in the hero on every CMS template is a tax on readers who are not booking. Link to a dedicated booking page, or load the embed after a click. The conversion path can stay short without making the blog pay for Cal.com or HubSpot meetings on first paint.
Cookie consent layers are required in many markets. They are also a layout and script problem. If the banner shifts the whole page down after hydration, you bought CLS. If it loads five advertising vendors before the user has chosen, you bought INP. Fix the implementation. Do not 'turn off GDPR' on a staging Lighthouse run and call it optimization.
CLS: reserve space or watch the page jump
Cumulative Layout Shift on Webflow often comes from images without dimensions, fonts swapping late, cookie banners pushing content, or embeds that load a different height than the placeholder. Collection lists that inject items after a filter also shift, but that is usually after input, which is a different CLS pattern.
Google's CLS article is the scoring model. Set width and height on images. Give embeds a min-height. Do not inject a 120px announcement bar after first paint.
IX2 can cause CLS if an animation moves layout rather than transform. Animate transform and opacity. Do not animate top, left, or height on the LCP block if you can avoid it. Sticky navs that change height on scroll are a classic own-goal.
Webflow's navbar and dropdowns are fine when they occupy a reserved height. They fail when a utility bar, a language switcher, and a promo strip all stack in and then collapse at different breakpoints. Pick a nav height. Keep it. If you need a promo, put it in a space that already exists or accept the shift as a product choice, not an accident you will 'fix in CSS later.'
A checklist, not a 40-to-90 case study
Use this on a live Webflow site this week. Capture Search Console CWV and one PageSpeed Insights run per template first, so you are not arguing from memory.
- Compress and correctly size the LCP image. Stop lazy-loading it.
- Remove unused font weights and extra families.
- Delete decorative IX2 on mobile page load.
- Kill third-party scripts that do not have an owner.
- Reserve image and embed space to stabilize CLS.
- Re-test the same URLs on mobile. Ignore a homepage-only lab score.
Some sites will then show a much healthier Lighthouse report. Some will not, because the remaining work is a video hero, a client-mandated chatbot, or a template that should not have been a single 4,000px page. Those are product decisions. Performance work cannot launder them into a 90.
Performance is one slice of Webflow SEO. Canonicals, CMS fields, and redirects still sit in Webflow SEO: what the platform does well and where it breaks. If a vendor is selling you a rebuild, read how to choose a Webflow agency before you pay for another hero video. And if the page is fast but nobody books, that is conversion-focused web design, not another round of Lighthouse theater.
If you want this checklist applied to a specific Webflow project, send the live URL and a Search Console screenshot of Core Web Vitals. I will tell you whether the bottleneck is images, fonts, IX2, or third parties, without inventing a score you cannot defend.
Implementation table
| Fix | Problem | What to change | Metric | Tool |
|---|---|---|---|---|
| LCP image | Huge hero, lazy-loaded or background-only | Correct dimensions, compressed file, eager load the LCP media. | LCP in field and lab | PageSpeed Insights |
| Script diet | GTM, chat, and leftover pixels on every template | Remove unowned tags. Load chat only where needed. | INP percentile | Search Console CWV |
| Layout reserve | Images and banners shifting the page | Width/height on images, min-height on embeds, no late announcement bars. | CLS | CrUX / Search Console |
Webflow feels heavy on a phone and the lab score is a distraction?
Send the live URL and Search Console CWV. I will point at LCP, fonts, IX2, or third parties without a fake 40-to-90 story.
Book a performance review









