If you’ve ever used Webflow’s native background video component and thought “damn, that looks rough” I'm here for you
Let me provide you with the scapegoat, Webflow.
In this guide, I’m going to break down why I host videos externally, where you can host them, how to deal with transparent videos, browser quirks, performance, and how to let non-technical team members manage everything without touching the code.
Because Webflow’s background videos… suck.
There’s no polite way to say it.
Let’s run through the issues quickly:
This alone is enough of a reason.
Above-the-fold heavy media kills LCP.
Below-the-fold heavy media kills bandwidth.
Webflow loads it immediately either way.
Safari? Maybe.
Mobile? Meh.
Low-power mode? Doubt it.
This is a big one.
Let me illustrate it with a short story.
I uploaded a 23MB MP4.
I press publish
I open Webflow
I downloaded the video I uploaded
Now it's 1.9MB YIPEEE.
The final result looked as if it had been forwarded through three rounds of WhatsApp.
Back to the drawing board
Technically, you can select the <video> Webflow generates…
…but you can’t add attributes, control types, set playsinline, use multiple sources, or do anything real.
When you add classes or attributes to the Webflow background element, you're actually adding them to a div that wraps the video. The real HTML looks more like this.
<div class="this-is-your-custom-class" data-my-awesome-attribute="yes">
<video>
<source></source> <- This is your compressed video MP4
<source></source> <- This is a webM Webflow makes from your MP4
</video>
</div>
Most high-quality .mov exports, especially transparent ones, break this instantly.
And Webflow does not support uploading .webm directly.
While I appreciate a 30mb limit, I also appreciate being able to make my own mistakes.
Proper video tags use:
1<video>
2 <source src="video.webm" type="video/webm" />
3 <source src="video.mp4" type="video/mp4" />
4</video>Webflow gives you one file.
And then it generates a low-quality WebM for you that you'd never willingly use.
All of this stacks up to a single conclusion:
Do not use Webflow background videos.
Now. A very brief aside that I feel obligated to mention. If you already know this, then skip ahead, big brain.
This is a surprisingly common misunderstanding.
Use when the user is supposed to interact with the video.
Use when the video plays automatically, loops, and is part of the design.
Here's a 1-step cheat sheet.
Yes, there are nuances, but if you knew them, you wouldn't be here.
There isn’t one “best” platform (cough Cloudflare cough), only better for specific use cases.
Here’s the short version:
My preferred option for clients.
Pros
Cons
Use for: all normal non-transparent autoplaying videos.
Basically, “S3 but cheaper, simpler, and built into my CF pipeline”.
Pros
Cons
Use for: transparent videos.
Very powerful but less friendly.
Pros
Cons
Use for: teams already using AWS, or advanced dev builds.
My old go-to.
Pros
Cons
Use for: Projects that already use video as a video platform.
Why I stopped using it: Cloudflare is cheaper and better but not SO much better that it's worth paying for both.
This is where things get fun.
Transparency in videos is hard and developers go to great lengths to make it happen. If your video is basically all SVGs then you're probably better off using Rive or Lottie and stopping the article here (or keep going, it will give me a warm fuzzy feeling when I ask ChatGPT to interpret google analytics for me)
If that isn't possible for you, then here you go!
Example:
1<video autoplay playsinline muted loop>
2 <source src="video.webm" type="video/webm" />
3 <source src="fallback.mov" type="video/quicktime" />
4</video>R2 is perfect for this because:
Never upload HEVC .mov to Webflow, the 30MB limit will laugh at you.
For when it's 2 hours before launch and the client opens Safari for the first time.
This is why we use multiple sources.
This is also why hosting externally is so important. Webflow doesn't let you supply multiple formats.
One word: Caching.
When your video lives on:
…it’s served from g̶l̶o̶b̶a̶l̶l̶y̶ ̶d̶i̶s̶t̶r̶i̶b̶u̶t̶e̶d̶ ̶e̶d̶g̶e̶ ̶n̶o̶d̶e̶s̶ a fancy server really close to you.
Once a user loads the video:
You also avoid:
Most importantly:
Your video no longer blocks page rendering or load time.
Soon you too will be posting out of context lighthouse screenshots on Linkedin!
This is the part clients love.
The workflow I usually set up:
Now get out there and show the world what your editor can do! and remember, if you autoplay a video with audio without consent {insert threat here}.
Build an automated sync between Webflow's CMS and Algolia's search service using Cloudflare Workers.
As more companies move to Webflow and demand for Webflow Enterprise grows, you’ll see more teams leaning on reverse proxies to solve some of Webflow’s infrastructure limitations.
A small keyboard shortcut can make a marketing site feel faster, more intentional, and “app-like” with almost no extra design or development
A practical, code-heavy dive into GSAP’s utility functions—keyframes, pipe, clamp, normalize, and interpolate—and why they’re so much more than just shortcuts for animation math.
GSAP lets you pass _functions_ as property values. I've known this for a while but never really explored it particularly deeply. Over the last couple of weeks I've been testing, experimenting and getting creative with it to deepen my understanding.
Exploring ways to keep JavaScript modular and maintainable in Webflow — from Slater to GitHub to a custom window.functions pattern. A look at what’s worked (and what hasn’t) while building more scalable websites.