Hero Video Only Earns Its Keep When the Poster Carries LCP
Hero video only earns its keep when the poster carries LCP, mobile stays still, and autoplay stays muted — otherwise ship stills plus disciplined motion.
Put a video background on the homepage only when the poster image can carry Largest Contentful Paint, mobile gets a still (or click-to-play), and the loop stays muted, short, and compressed. If any of those fail, the video is usually hurting trust and conversions more than it is helping the brand. Film energy on the web is often stills plus disciplined motion — not a 20MB autoplay file. This spoke sits under Websites That Feel Like Films; for motion systems and production constraints, read Motion Systems That Ship and Motion That Survives Production rather than reinventing craft theory here.
The short answer
- Poster image first: the visible still should be the LCP candidate, not the video decode.
- Default mobile to a still or click-to-play; autoplay background video is a desktop privilege you earn.
- Autoplay in the browser effectively requires muted (and usually
playsinline); sound-on autoplay is a non-starter. - Honor
prefers-reduced-motion: reducewith a static hero — no debate. - If the loop exists to “feel premium,” try a graded still + GSAP/CSS motion before you pay the video tax.
Go / no-go for homepage hero video
Use this as a hard gate before you encode anything.
| Condition | Go | No-go |
|---|---|---|
| Poster is a real optimized image that paints fast | Required | “Video will be the LCP” as the plan |
| Mobile strategy is still or tap-to-play | Required | Same autoplay file as desktop |
| File is a short muted loop, compressed hard | Required | Full music video as background |
| Reduced-motion users get a still | Required | Motion with no escape |
| Brand moment needs footage you cannot imply with a still | Valid reason | “Competitors use video” |
| You measured field LCP after adding it | Required before keeping it | Lab green on Wi-Fi desktop only |
If you cannot check every Required row, ship the still.
Core Web Vitals numbers (verified)
As documented on web.dev/vitals (stable Core Web Vitals set; page last updated October 31, 2024, thresholds still the published “good” targets as of this writing in August 2026):
| Metric | What it measures | “Good” target (p75) |
|---|---|---|
| LCP (Largest Contentful Paint) | Loading — when main content likely appeared | ≤ 2.5 seconds |
| INP (Interaction to Next Paint) | Responsiveness to taps/clicks/keys | ≤ 200 milliseconds |
| CLS (Cumulative Layout Shift) | Unexpected layout movement | ≤ 0.1 |
Google evaluates these at the 75th percentile of real-user field data, typically across a rolling ~28-day window in CrUX / Search Console. Lab Lighthouse scores are useful for debugging; they are not the compliance score.
Hero video threatens LCP when the browser treats a late video frame as the largest element, or when a massive download delays the poster. It threatens INP when main-thread work and third-party players jank the first tap. It threatens CLS when the video or player UI resizes the hero after paint. Reserve width/height (or aspect-ratio boxes) so the fold does not jump.
For broader performance craft without killing design, see Lighthouse Without Killing Design.
The poster must carry LCP
Practical pattern that usually wins:
- Hero region is an image (
<img>or CSS background) with a properly sized, compressed poster — modern formats (AVIF/WebP) when your pipeline supports them. - Video sits on top or underneath only after the poster is ready; many implementations keep the poster visible until
canplay/ first frame, then crossfade. - Preload the poster, not a giant MP4.
fetchpriority="high"belongs on the LCP image candidate. - Give the media box explicit dimensions to protect CLS.
- Confirm in field tools (CrUX / RUM / Search Console) which element is LCP on mobile after launch — not only in your laptop DevTools.
If LCP is the <video> element waiting on network, you lost the plot. The still should win the race.
Mobile rule
Phones are where musician and brand traffic often converts (follow, tour, merch, contact). They are also where autoplay background video hurts most: data caps, thermal throttling, smaller CPUs, and impatient thumbs.
Default policy I recommend:
| Viewport | Hero media | Interaction |
|---|---|---|
| Mobile (default) | High-quality still matching the film grade | Optional “Play” for a short clip or music video embed below |
| Tablet | Still, or light loop only if field LCP stays good | Prefer tap-to-play for anything with sound |
| Desktop | Muted loop allowed if budgets pass | Never sound-on autoplay |
“But it looks so good on my phone on Wi-Fi” is not a field test. Check mid-tier Android on LTE. If the loop stutters or the fold arrives late, cut video on mobile without apology.
Autoplay, muted, and playsinline
Browser reality (HTML media behavior — verify against current MDN / browser docs if you implement):
- Autoplay with sound is widely blocked.
- Muted autoplay is commonly allowed, especially with
playsinlineon iOS. - User-gesture play is the reliable path for anything with audio.
- Background loops should be mute, loop, no controls chrome, and short.
| Approach | Use when | Avoid when |
|---|---|---|
| Muted autoplay loop | Atmosphere, desktop, poster-first | Storytelling that needs audio |
| Click-to-play | Music videos, interviews, trailers | You wanted wallpaper and got a player UI instead |
| No video | Most service and many artist homes | You are forcing footage to justify a shoot |
Autoplay is not required for a premium site. It is optional seasoning.
prefers-reduced-motion
If the user asks for less motion, give them the poster and stop. No slow fade loop, no “subtle” Ken Burns on a huge file, no delayed video injection that still moves the frame.
Minimum:
@media (prefers-reduced-motion: reduce) {
.hero-video { display: none; }
.hero-poster { display: block; }
}
Also pause or never load the media element in JS when that media query matches. Accessibility is part of craft — see Accessibility as Craft for the wider bar; here the rule is binary: reduced motion means still hero.
File size discipline (practical, not mystical)
There is no single universal megabyte law published as a Core Web Vital. There is physics: every megabyte competes with your LCP image, fonts, and hydration.
Budgets I use as starting discipline for background loops (adjust per project; measure field LCP after):
| Asset | Starting budget | Notes |
|---|---|---|
| Poster image | Often well under a few hundred KB in a modern format at hero dimensions | This is the LCP candidate |
| Mobile | 0 KB video by default | Still only |
| Desktop loop | Low single-digit MB after compression, short duration, limited resolution | If you need 15MB+, you are shipping a film, not a texture |
| Multiple sources | One well-encoded file beats three huge fallbacks | Extra sources multiply waste if mis-preloaded |
Encode for the crop you show. A vertical phone crop does not need a 4K landscape master. Loop under ~5–8 seconds when the job is atmosphere. Strip audio tracks entirely for background files.
If the file only works at cinema bitrate, it does not belong in the hero. Host the film on YouTube/Vimeo/Mux with a poster and a play button.
When stills plus motion beat video
Video is the wrong tool when:
- The brand moment is color, type, and composition — not footage
- You need crisp product or press photography
- Tour / follow / merch CTAs must win in the first viewport
- You cannot afford the encoding and QA pass every release cycle
- Reduced-motion and data-sensitive users are a large slice of the audience
Stills + motion patterns that still feel like a release campaign:
- Graded hero photograph with a slow opacity or scale within CLS-safe limits
- GSAP-timed type and CTA entrance after LCP
- Short hover or scrub previews on desktop work grids — not the LCP element
- Click-to-play music video module below the fold
That is the same cinema standard as the pillar, without taxing every visit. Deep craft lives in Motion Systems That Ship; this post is only the go/no-go.
How to know video is hurting conversions (not just Lighthouse)
Lighthouse red is a hint. Business symptoms matter more:
- Mobile bounce or rage-taps up after adding the loop (watch session tools if you have them)
- Field LCP regresses past ~2.5s at p75 on phone in Search Console / CrUX
- Play/CTA clicks fall because the fold is busy or late
- Fans on cellular complain the homepage “doesn’t load”
- Battery / heat complaints on long sessions (more common with always-on loops)
Compare a two-week window with video on desktop-only vs sitewide autoplay. Keep the version that protects the primary action — follow, tour, contact, listen — not the version that wins taste arguments in the studio.
Decision tree you can run this week
- Write the homepage job in one sentence (listen / tour / contact / merch).
- Design the fold as a still that already sells that job.
- Ask: does motion add information footage alone can provide?
- If no → ship still + light motion system.
- If yes → poster-first, desktop muted loop, mobile still, reduced-motion still.
- Measure field LCP/INP/CLS for 28 days; be ready to delete the loop.
Oliver Malcolm–style film energy can still be a graded frame and disciplined motion. Video is optional.
Implementation checklist before the file ships
- Poster exported at hero crop, compressed, modern format when possible
- Explicit width/height or aspect-ratio on the media box
- Video
mutedloopplaysinlinepreload="none"or metadata-only — neverpreload="auto"on a hero loop by default - Desktop media query or JS gate before fetching the MP4/WebM
- Mobile never downloads the loop on first paint
-
prefers-reduced-motion: reducenever fetches or plays video - No third-party player chrome in the LCP region
- Field LCP element confirmed as the poster after release
- Primary CTA remains tappable within the first viewport on a mid-tier phone
preload="auto" on a background hero is how you accidentally spend the user’s bandwidth before they see your name. Be stingy.
Artist-site specifics
Musician homepages often want the video treatment because the campaign film feels like the identity. Fair. Still separate jobs:
| Job | Better media |
|---|---|
| Identity / atmosphere | Graded still or short muted desktop loop |
| Watch the video | Click-to-play module with chapter art |
| Listen now | DSP smart link / embed — not a 1080p loop |
| Tour dates | Live dates module — video should not bury it |
If the homepage job is “next show” or “presave,” a looping teaser that delays those CTAs is working against the release. Put the film where fans choose it.
FAQ
Is autoplay always required?
No. Autoplay is optional atmosphere. Many strong artist and brand homepages convert on a still fold with a clear listen or tour action. If you autoplay, keep it muted and poster-first.
How large can the file be?
As small as you can make it while looking intentional — start in the low single-digit megabytes for desktop background loops and verify field LCP. If you need a large film file, do not use it as an autoplay background; use click-to-play.
Should mobile get video at all?
Default to no for background autoplay. Offer a still that matches the grade, and put playable video behind an explicit tap when the footage matters.
Click-to-play vs background loop?
Use background loops for silent texture on desktop when budgets pass. Use click-to-play for music videos, narratives, and anything with sound or longer runtime.
How does this interact with Core Web Vitals?
Video mostly risks LCP (late largest element / heavy downloads), INP (main-thread and player jank), and CLS (resizing media). Keep the poster as LCP, reserve space, and confirm p75 field metrics — good targets remain LCP ≤ 2.5s, INP ≤ 200ms, CLS ≤ 0.1 per web.dev.
When is a still stronger than a loop?
When the still already carries brand and CTA, when mobile performance slips, when reduced-motion matters, or when the loop is decorative ego. A sharp frame plus craft motion often beats a soft autoplay wallpaper.
CTA
Film-grade sites earn motion — they do not tax every fan with a hero download.
Explore /websites or book a sprint at /contact?intent=websites-sprint.