Cloudflare Pages is a public, global CDN site — built to be found and to scale. A private link is built to reach a named audience and nobody else. They solve opposite halves of "I made a page, now what." Here's the honest fit for each, where the backend boundary sits, and how to pick in one question.
You pushed a branch, Cloudflare built it, and now there's a production URL sitting on the open web. That's the right ending for a marketing site. It's the wrong ending for a proposal three people were supposed to see. The question that actually decides the tool isn't "static or framework" or "free or paid" — it's who is supposed to find this. Cloudflare Pages and a private link answer that one question in opposite directions, and most of the confusion between them dissolves the moment you say the answer out loud.
Cloudflare Pages is a reach engine. You connect a Git repo (or upload a build), Cloudflare builds your framework if it needs building, and serves the result from its global edge network on a public, indexable URL. The whole design assumes the page wants an audience — fast delivery to anyone, anywhere, at any scale, with caching tuned for traffic you can't predict.
A private link is a delivery channel. You drop a self-contained HTML file (or a zip), get an unguessable URL, and send it to the people you choose. It's hidden from search by default, opens with no account on the viewer's end, and can carry a password or a self-destruct date. The design assumes the page is going to three people, and the rest of the internet has no reason to find it.
Same input shape — a page. The divergence is entirely about what happens after the URL exists: broadcast to many, or hand to a few.
This isn't a knock list. Cloudflare Pages is excellent at a category of work a private link deliberately doesn't touch:
If your page is any of these, stop reading and use Cloudflare Pages. The tools aren't competing for that work.
The other half of the sentence — the work where "public, indexable, global" is the wrong default:
The thread running through all of these: the page isn't trying to be discovered. Putting it on a public production URL solves a problem you don't have and creates one you do — a finished-looking page, findable by anyone, indexed, sitting on the open web when it was only ever meant for a named audience.
If the page is going to a few specific people, you don't need a deploy pipeline. Drop the HTML and get an unguessable link — no account to start. The password and expiry controls come with the free account when you want them.
Cloudflare Pages defaults to public + indexable + edge-cached because the design intent is reach. A private link defaults to noindex + unguessable + viewer-needs-no-account because the design intent is delivery. Neither default is wrong — each is wrong only if you pick the tool that doesn't match your actual job.
Two defaults are worth calling out specifically:
Narrow on purpose. A private-link host doesn't build frameworks, doesn't run Functions or Workers, doesn't give you a Git deploy pipeline, and doesn't serve CDN-class bandwidth for a viral public launch. For any of those, Cloudflare Pages is the right shape, and the html-hosting page is honest about where the static slice ends. The narrow scope is exactly what lets a private link ship default-private without ever trading against discovery — because it was never trying to be discovered.
Should people who don't have the link be able to find this page?
That's the decision. Both tools are coherent in their own direction. The work is matching the page to the right half of the sentence — reach, or delivery — and refusing to put a page meant for three people onto a URL built for the world.
A private link and a public deploy are the two ends of one dial: how findable the page should be. A job-by-job map of where each endpoint fits, plus the in-between cases most real work actually lands in.
Vercel Drop turns a dragged file into a live production URL on a major platform. miinideck turns one into a private link for specific people. Both fit 'drag a file, get a URL' — and were built for opposite jobs. When each fits, where the overlap is narrow.
Two tools that both turn a dragged file into a URL. One is designed for public deploy testing; the other for private one-recipient delivery. When each fits, where the overlap is real.
miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.