A CNAME aliases a name, not an address
www.example.com
CNAME record
cdn.provider.net
target hostname
192.0.2.10
A record, final answer
Why Is My CNAME Record Not Propagating? Real Causes and Verification Steps
You configure a new subdomain for your web application, content delivery network (CDN), or third-party SaaS platform, create a CNAME record pointing to target.provider.com, and click save. Yet hours later, browser visits return connection errors, third-party domain verification checks report that the record cannot be detected, and online lookup tools return empty results. When a CNAME record appears 'stuck', the breakdown is rarely a mysterious delay in global DNS routing—it is almost always an RFC specification conflict, resolver negative caching, or a control panel misconfiguration.
A CNAME aliases a name, not an address
www.example.com
CNAME record
cdn.provider.net
target hostname
192.0.2.10
A record, final answer
The Canonical Name Specification (RFC 1034 & RFC 1912)
The Canonical Name (CNAME) resource record type is defined in RFC 1034 Section 3.6.2 and RFC 1035. Unlike an A record, which directly binds a hostname to an IPv4 address, a CNAME binds an alias label to another domain name (the canonical name). When a recursive resolver queries a CNAME, it must 'chase' the alias: it reads the CNAME response, queries the canonical target, and returns the final target's address records to the client.
Cause 1: The Zone Apex Prohibition (RFC 1912 Section 2.4)
The single most frequent reason a CNAME fails to work is attempting to configure it on the zone apex (also known as the naked root domain, e.g., example.com rather than sub.example.com).
Under RFC 1912 Section 2.4, if a CNAME record exists at a node, no other data may exist for that node. A CNAME cannot coexist with any other resource record type on the same label. However, the root apex of every DNS zone requires an SOA (Start of Authority) record and an NS (Nameserver) record by definition. If a domain uses email, it also requires an MX record on the root apex.
Because an apex domain must have SOA and NS records, placing a standard CNAME at example.com violates fundamental DNS protocol rules. Modern DNS management interfaces handle this in one of three ways: they reject the entry with an error, silently ignore it, or provide a proprietary virtual record type.
| Provider Solution | Record Feature Name | How It Works Technically | RFC Compliant? |
|---|---|---|---|
| Cloudflare | CNAME Flattening | Authoritative nameserver queries the CNAME target internally and answers public queries with synthesized A/AAAA records | Yes (Emits standard A records) |
| AWS Route 53 | Alias Record | Internal pointer to AWS resources (ALB, CloudFront, S3) answered dynamically with A/AAAA records | Yes (Emits standard A records) |
| DNS Made Easy / Constellix | ANAME Record | Nameserver monitors target IP and synthesizes A records at the zone apex | Yes (Emits standard A records) |
| Standard Registrar | Apex CNAME (Raw) | Direct CNAME published alongside SOA/NS records | NO (Violates RFC 1912; breaks MX and nameservers) |
Cause 2: Negative Caching and the SOA Minimum TTL (RFC 2308)
A very common human behavioral trap occurs during DNS configuration: an administrator types app.example.com into their browser before creating the CNAME record in their DNS provider dashboard. The browser issues a lookup, the recursive resolver queries the authoritative nameserver, and the authoritative nameserver responds with NXDOMAIN (or NODATA).
Under RFC 2308, recursive resolvers do not merely cache positive answers; they also cache negative answers. The duration of this negative cache is dictated by the SOA Minimum TTL field specified in the zone's Start of Authority record. If your domain's SOA Minimum TTL is set to 3,600 seconds (1 hour) or 86,400 seconds (24 hours), your ISP resolver and local OS will continue returning NXDOMAIN for hours even if you add the CNAME record 30 seconds later.
Cause 3: Conflicting Records on the Same Subdomain
Because RFC 1912 forbids a CNAME from coexisting with other records on the same label, you cannot have both an A record and a CNAME record for blog.example.com. Similarly, you cannot have a TXT record and a CNAME on the same label. If an old parking A record or a legacy verification TXT record remains on that subdomain from a prior deployment, the DNS control panel may accept the CNAME while the authoritative DNS daemon refuses to serve it, or resolvers may reject the malformed zone.
Cause 4: The Canonical Target Does Not Resolve
A CNAME record contains no IP address data. It is purely a directional signpost. If you point store.example.com to shops.myshopify.com, but there is a typo in the target (e.g., shops.myshopfy.com), or the destination SaaS provider has not yet provisioned an A record for that tenant hostname, the lookup chain terminates in NXDOMAIN or SERVFAIL.
# 1. Query your authoritative nameserver directly (bypasses recursive caches):
$ dig @ns1.yourprovider.com CNAME app.example.com +norecurse
;; ANSWER SECTION:
app.example.com. 300 IN CNAME target.cdnprovider.com.
# 2. Query the canonical target's address records:
$ dig A target.cdnprovider.com +short
198.51.100.45
# 3. Perform a recursive trace from root hints:
$ dig CNAME app.example.com +traceCause 5: Cloudflare Proxying Masks CNAME Responses
If your domain uses Cloudflare and you create a CNAME record with the orange-cloud proxy enabled, Cloudflare terminates the CNAME lookup at its edge. When a public user queries dig CNAME app.example.com, Cloudflare returns Cloudflare Anycast A/AAAA records rather than the CNAME string. Many domain verification tools mistakenly report 'CNAME record not found' because they specifically query for the CNAME record type rather than checking resolution.
Key takeaway
When a CNAME seems stuck, verify that it is not placed on the zone apex (use CNAME flattening or Alias records instead), remove any conflicting A/TXT records on the same subdomain, and query your authoritative nameserver directly to bypass local negative caching.
Check your result and continue troubleshooting
Use the cname lookup tool to inspect the public DNS data relevant to this guide. Record the hostname, query type, resolver and time so you can compare results after a change. This is a DNS check, not a guarantee of worldwide propagation or successful application delivery.
For the underlying behavior and current configuration guidance, consult the official reference. Provider dashboards can change; use the values shown for your own domain rather than copying an example into production.
Need to check a domain's public DNS addresses? Use the Domain IP Lookup tool.
Free tools for this topic
Frequently asked questions
Related reading
The records you will meet in nearly every zone
Difference Between CNAME and A Record: When to Use Each
The decision comes down to one question: do you control the IP address, or does someone else? Plus the root-domain rule that trips everyone up.
A CNAME aliases a name, not an address
www.example.com
CNAME record
cdn.provider.net
target hostname
192.0.2.10
A record, final answer
CNAME Chains Explained: How DNS Aliases Resolve
Understand how CNAME records create alias chains, how resolvers reach A and AAAA addresses, and what to check when a chain breaks.
"Propagation" is really just caches expiring
0 min
you save the change
0-5 min
your DNS host updates
up to TTL
old answer still cached
after TTL
everyone sees the new one
Nothing is pushed anywhere: each cache just stops reusing its copy
DNS Propagation Explained: Why Changes Take Time
Nothing propagates anywhere. Understanding what actually happens during the wait tells you exactly how long it will take and how to shorten it.