Copy-paste DNS instructions and where they break
Webflow, Ghost, Framer, Resend, and Postmark all ask customers to copy DNS records by hand. Where that breaks, and what to do about it.
Last reviewed 2026-09-29. Vendors change their pages, so check the links. To correct something, open an issue on GitHub.
Verdict
Manual instructions work when a few people follow them carefully. They break at volume, because each customer has to copy exact values into an interface you don’t control. The fix is to take the copying away, so the answer is a different flow and not a better page.
These are good docs for a hard problem. The failures below come from the task, not from the writing.
Five real setups
| Product | What the customer adds | What the vendor warns about |
|---|---|---|
| Webflow | An A record, a CNAME for www, and a TXT verification record. Sites created earlier may use two A records | Some providers want the root domain instead of @. Some need a trailing dot on a CNAME. Propagation can take up to 48 hours. There are two possible sets of records that can differ from site to site |
| Ghost(Pro) | A CNAME for www plus an A record at the root, or a single CNAME for a blog subdomain | A root CNAME is supported by only some DNS providers, and may interfere with email |
| Framer | Two A records at the root and a CNAME for www | Has a separate guide for each of six registrars |
| Resend | MX and SPF TXT records on a send subdomain, plus DKIM | Omit your domain from the record values. Do not use the same priority for multiple records. Includes a field-by-field mapping table for Cloudflare |
| Postmark | A DKIM TXT record and a Return-Path CNAME | Verification can take up to 48 hours. In DigitalOcean the TXT value must be surrounded in quotes. Has tutorials for each common host |
Where they break
The same problems show up across all five.
- Field names differ by registrar. One wants @ for the host and another wants the bare domain (Webflow).
- Registrars change what you type. Some add the domain name to the host, or need a trailing dot (Webflow, Resend).
- Values are long and exact. DKIM values are long keys.
- Quoting rules vary. A TXT value must be in quotes at one registrar and must not be at another (Postmark, DigitalOcean guide).
- Some records can’t exist together. A CNAME can’t share a name with other records, and some registrars can’t put one at the root (Ghost).
- Then the customer waits. Vendors say it can take up to 48 hours, and the customer has no way to tell a wait from a mistake (Webflow, Postmark).
Several vendors ship a variant for each registrar to cope. That is a lot of maintenance for a page the customer reads once.
When manual is fine
If you have a handful of customers, a clear page and a Verify button is the right amount of engineering. If your customers are technical and use one registrar, it may be enough for a long time.
What DomainKit changes
For customers on Cloudflare or Vercel, DomainKit removes the copying. The customer connects their account, sees the exact records in a table, and presses one button. DomainKit writes them and keeps checking public DNS until they resolve.
It doesn’t change anything for customers on other providers. They still need instructions.
Keep a manual path
Keep your instruction page as the fallback. Your requirements are plain values, so the same
declaration can drive both the automatic flow and a table for manual entry. When a plan exists,
Plan.renderInstructions renders it as copyable lines.
/** What a review screen needs: the writes, the conflicts, and whether apply can run at all. */
export const review = (plan: Plan.Model) => ({
writes: Plan.writes(plan),
conflicts: Plan.conflicts(plan),
applicable: Plan.isApplicable(plan),
digest: plan.digest,
expiresAt: plan.expiresAt,
instructions: Plan.renderInstructions(plan),
});The custom domain guide shows where this fits in the whole flow.
FAQ
Are copy-paste instructions bad?
No. They work, and they’re the only option for a provider you can’t write to. They cost more as your customer count grows.
Does DomainKit remove the need for instructions?
Only for Cloudflare and Vercel. Keep instructions for everything else.
Won't a customer still be nervous about connecting an account?
Possibly. DomainKit shows every record before anything changes and writes only what the customer approves, which is the answer to that worry.
Sources
All accessed 29 September 2026.
- https://help.webflow.com/hc/en-us/articles/33961239562387-Manually-connect-a-custom-domain
- https://ghost.org/help/using-custom-domains/
- https://www.framer.com/help/articles/how-to-connect-a-custom-domain/
- https://resend.com/docs/dashboard/domains/cloudflare
- https://resend.com/docs/dashboard/domains/introduction
- https://postmarkapp.com/support/article/resources-for-adding-dkim-and-return-path-records-to-dns-for-common-hosts-and-dns-providers
- https://postmarkapp.com/support/article/1017-adding-dkim-and-return-path-records-to-digitalocean
- https://postmarkapp.com/support/article/1091-how-do-i-set-up-dkim-for-postmark