Domains and Subdomains
Framer preview links always use https://*.framer.app. You can set a custom or free .framer domain up in Settings → Domain.
Note: If you have previously set up a custom .framer domain (eg. mytestsite.framer.website) you will need to remove this. Once this is removed you will be able to add your domain to the custom domain field.
Configuring a Custom Domain
To configure a ‘naked’ or ‘apex’ domain (yourdomain.com), you’ll need to set up two A records and one CNAME (for the redirect) in your DNS settings with the following values.

Depending on your DNS provider the name is either the full domain, or an “@”. Similarly for the subdomain, it will be either the full domain or just “www”.
Also make sure to delete any other A and AAAA records if they are set for domain, because those will interfere with the A records set for Framer.
Configuring a Custom Subdomain
To configure a subdomain (subdomain.yourdomain.com or subdomain.your.domain.com), you can set up a CNAME record in your DNS settings. Please note that some DNS providers may require you to add a dot or period at the end. (sites.framer.app.). The name for the CNAME record will be either the full domain, or just the “subdomain” part, depending on your DNS provider.

Confirming Changes (Propagation)
Depending on your DNS record TTL it may take up to 48 hours for your domain’s new DNS records to propagate and your site to appear world wide. Please note that this process usually takes less than 48 hours (often less than one). Once your domain has been connected, any user will be able to access your website through the connected domain.
The TTL (or time to live) is something you typically can set per record. It tells other servers how long to remember the result (in seconds). Historically this would be something like a day (86400) but these days it’s typically a few minutes (300). Be aware that some server don’t respect low values and can decide to do a minimum and slow updates down. This can be common at larger / worser internet service providers and there is no way to find out what they exactly do. In that case, you’d be well off using a public DNS server like 1.1.1.1.
Domain Providers
In order to publish your Framer website to a custom domain purchased through a web hosting service, you’ll need to add it to your project and setup DNS records for it in your domain provider. Purchase a domain through a web hosting service, such as Google Domains or GoDaddy. Once you have a custom domain, go to the Domains page in your Site Settings and select Connect a domain you own.
After inputing your domain, replace your DNS records with the Framer DNS records provided below in the web hosting service you have purchased your domain from. Domain registrars and hosting companies typically have their own custom panel for DNS management, but this can typically be done under Domain Settings > DNS Records. Listed below is a list of support articles for the most commonly used domain registrars:
Gandi: Adding A Records and a CNAME
Cloudflare: Adding A Records and a CNAME
Troubleshooting
Please make sure to remove all other A and AAAA records. They can take precedence over the ones you set up and point to the wrong server.
Mind the dot. Some providers require you to add a . behind your domain name in the CNAME record. You can spot it when your domain name ends up looking like some combination in your record: www.yourdomain.com.sites.framer.app.
You can debug your DNS settings with a tool like https://www.nslookup.io/.
Domain Taken
If you get an error that your domain is already taken, you likely have another project that is using it. Remove the domain in that specific project and add it to the one you want. If that’s not working contact support.

Advanced
These are instructions for technical folks. You can share them with your developer if you have an advanced setup and need to debug.
We use the command line tool dig in combination with the public dns server 1.1.1.1 and the example domain blixt.nyc.
Check A records (apex domain only)
Executing "dig +short @1.1.1.1 blixt.nyc A" should print only these two addresses:
52.223.52.2
35.71.142.77
Check that it does not contain any additional IPv4 addresses in the response.
Check for no AAAA records (apex domain only)
Confirm that the DNS name does not have any AAAA (IPv6) records.
The output of "dig +short @1.1.1.1 blixt.nyc AAAA" should be empty.
Check the CAA record (apex domain only)
Confirm that DNS CAA record(s) for the domain either do not exist, or explicitly allow "letsencrypt.org" to issue certificates.
The output of "dig +short @1.1.1.1 blixt.nyc CAA" should be empty, or contain "0 issue "letsencrypt.org"".
Check CNAME (sub-domain only)
Confirm that the DNS name points to sites.framer.app.
Execute "dig +short @1.1.1.1 www.blixt.nyc CNAME", and verify that the output is exactly "sites.framer.app." (note the trailing .!)