Why video is the wrong workload for a WordPress host
A course page is a few hundred kilobytes of HTML. A lesson video is often hundreds of megabytes, and every student who watches it pulls that file again. On a managed WordPress plan, that traffic is counted against the same server bandwidth and disk allowances that serve your checkout and lesson pages.
WP Engine's support article on reducing bandwidth and storage usage advises against looping videos and says to consider hosting the videos on YouTube, Vimeo, or with another provider. Kinsta's overage documentation, as published on 13 October 2026, lists server bandwidth overage at $0.50 per GB and disk space overage prorated at $2 per GB per month. Those rates are reasonable for a web page; they are expensive for a video library.
Hypothetical cost math using Kinsta's published rate: a 500 MB lesson watched 400 times is about 200 GB of transfer. If that transfer were served from the server and fell outside your plan allowance, 200 GB at $0.50 per GB would be $100 for one lesson in one month. The same file also occupies disk on every backup and staging copy.
What the video platforms charge, from their own pricing pages
Cloudflare Stream and Bunny Stream publish usage pricing. They meter differently, so compare them with your own catalogue rather than headline rates. Cloudflare counts minutes; Bunny counts gigabytes. Vimeo plan prices were not readable from Vimeo's pages on 13 October 2026, so they are omitted here; check the live checkout before committing.
- Cloudflare example: a 20-hour course is 1,200 minutes, which needs two 1,000-minute storage increments, or $10 per month. If 300 students each watch the full 1,200 minutes, that is 360,000 minutes delivered, or $360 in that month.
- Bunny example: Bunny's own calculator example on its pricing page, 300 GB of video with 50 GB of monthly traffic and one replication point, shows $4.5 per month on the Standard tier and $3.25 on the Volume tier.
- Minutes-based billing rewards high-bitrate video; gigabyte-based billing rewards efficient encodes. Estimate both from your real watch time.
| Platform | Storage | Delivery | Other published terms |
|---|---|---|---|
| Cloudflare Stream | $5 per month for each 1,000 minutes of storage capacity, prepaid | $1 per 1,000 minutes delivered | Ingress and encoding are always free; no additional egress fees |
| Bunny Stream | From $0.01 per GB | From $0.005 per GB | $1 monthly minimum; no transcoding fees; no security fees |
| Vimeo | Not verified | Not verified | Specific-domain embedding is available on all plans except Free and Basic |
Domain restriction is not the same as members-only access
Moving video off the host only helps if strangers cannot lift the embed. The platforms offer two different controls, and course sites usually need both.
Domain restriction limits where the player will load. Vimeo's help centre documents a Specific domains embed setting, available on all plans except Free and Basic, with up to 50 domains per video. Cloudflare's Stream documentation says embed codes can be used on any domain by default and that its Allowed Origins feature lets you specify which origins are allowed for playback.
Signed playback limits who can load it. Cloudflare documents that by default a video can be viewed by anyone with just a video id, and that once a video requires signed URLs it can no longer be accessed publicly with only that id. Bunny documents embed view token authentication as the default mechanism to prevent other sites from embedding your videos, and separate CDN token authentication at the Pull Zone level for direct video URLs.
Domain restriction stops another website from embedding your lesson. It does not stop someone from sharing the lesson page itself if your page protection fails. Signed or token-authenticated playback, generated only for a logged-in member, ties each view to your access rules.
Who should move video off the host, and who can wait
| Situation | Recommendation | Reason |
|---|---|---|
| Paid lessons with self-uploaded MP4 files in the media library | Move to a video platform before the next host change | Every view counts as server bandwidth and every backup carries the files |
| Videos already on Vimeo or another platform but embeddable anywhere | Keep the platform; turn on domain restriction or signed playback | The cost problem is solved; the leak problem is not |
| A handful of short free preview clips | Can stay, but watch bandwidth after launches | Low volume rarely matters until a promotion spikes it |
| Live cohorts or webinars | Out of scope for on-demand platforms covered here | Live delivery is priced separately |
Move video before you move hosts
Moving video first makes the WordPress migration smaller, faster to copy, and quicker to restore. Treat it as its own project with an acceptance check.
- Inventory every lesson that links to a file in wp-content/uploads, including videos referenced inside LearnDash lesson settings rather than the post body.
- Upload to the platform, record each new video ID against the lesson, and turn on domain restriction or signed playback before replacing any embed.
- Add your staging domain to the allowed list while testing, then remove it after cutover so the staging copy cannot serve lessons publicly.
- Log in as a test member and confirm playback on each lesson type; log out and confirm the player refuses to load.
- Only after playback is accepted, remove the old files from uploads so backups and the migration copy shrink.
- Re-check host bandwidth for the next full billing period to confirm the drop.
Questions before you decide
Is domain restriction alone enough for paid lessons?
It stops other websites from embedding the player, but Cloudflare documents that a Stream video can be viewed by anyone with its video id unless signed URLs are required. Pair domain restriction with signed or token-authenticated playback.
Does Cloudflare Stream charge for uploading or encoding?
Cloudflare's Stream pricing page states that ingress and encoding are always free; you pay for stored minutes and delivered minutes.
Sources & verification
Product details and prices can change. Check the linked provider before buying.
- WP Engine: Reduce bandwidth and storage usage Accessed 13 Oct 2026
- Kinsta: WordPress hosting overages Accessed 13 Oct 2026
- Cloudflare: Stream pricing Accessed 13 Oct 2026
- Cloudflare: Securing your Stream Accessed 13 Oct 2026
- Bunny.net: Stream pricing Accessed 13 Oct 2026
- Bunny.net: Stream security Accessed 13 Oct 2026
- Vimeo: Embed privacy settings Accessed 13 Oct 2026
Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.