Get a static site from a dist folder to a custom domain without the SPA fallback, the trailing-slash loop, or an empty #root. Print this beside wrangler.
Walk it in order. Do not attach the custom domain until workers.dev (or the preview host) serves the files you expect.
This is first host, not a WordPress exit. Cutover, redirects, and Row Level Security (RLS) live on the edge migration checklist.
flowchart LR
D["Build dist"] --> W["wrangler deploy"]
W --> P["Proof host"]
P --> C["Custom domain"]
C --> H["curl the HTML"]

A marketing site that must rank is files in dist. It is not a Node origin. Copy the knobs, then change Your project name.
| Knob | Set this | If you guess |
|---|---|---|
| assets.directory | ./dist after the Vite (or other) build | You upload the repo root, or nothing useful |
| not_found_handling | 404-page | single-page-application returns index.html for junk URLs. Soft 404s. Thin pages. |
| html_handling | drop-trailing-slash | auto-trailing-slash 307s /blog/slug to /blog/slug/. Google skips indexing. |
| main / fetch handler | Omit it for a static assets Worker | You debug a script that only needed to serve files |
Search “Cloudflare website URL” and you will mix three hostnames. The brand URL is the only one clients should see.
Hosting does not fix an empty #root. Curl the custom domain with JavaScript off. You should read the article, not a chat widget and a title.