Skip to content

CNAME y el apex ​

Los registros A apuntan a direcciones. Pero muchas plataformas modernas (Vercel, Netlify, Shopify, GitHub Pages) no te dan una IP fija: te dan un nombre como cname.vercel-dns.com. Para eso existe el CNAME. Y con él llega una de las reglas más confusas del DNS: "la raíz no puede ser CNAME". Aquí vas a entender por qué, cómo Cloudflare lo resuelve y cómo conectar tu dominio a las plataformas más populares.

Concepto ​

La analogía: el desvío de llamadas ​

Un CNAME (Canonical Name, nombre canónico) es un alias: dice "este nombre es en realidad ese otro nombre; ve a preguntar por él".

Es como un desvío de llamadas: marcas al número de la oficina y el sistema te dice "este número se desvía al celular de Ana". Tú no sabes el número final; solo sabes a quién se desvía. Si Ana cambia de celular, el desvío sigue funcionando sin que nadie tenga que actualizar nada.

txt
Consulta: www.mitienda.com, tipo A

www.mitienda.com      CNAME   mitienda.com        ← "pregunta por mitienda.com"
mitienda.com          A       203.0.113.10        ← respuesta final

El resolver sigue la cadena y entrega 203.0.113.10

A vs CNAME ​

A / AAAACNAME
Apunta aUna IPOtro nombre
Valor de ejemplo203.0.113.10mitienda.com, cname.vercel-dns.com
Cuándo usarloTienes una IP fija (hosting, VPS)La plataforma te da un nombre o la IP puede cambiar
Si la IP de destino cambiaTienes que editar el registroNo haces nada: el destino se actualiza solo
¿Puede ir en la raíz @?SíNo (salvo flattening, ver abajo)
¿Puede convivir con otros registros en el mismo nombre?SíNo

Valor de un CNAME: nombre, nunca IP

Un CNAME siempre apunta a un nombre de dominio. CNAME www 203.0.113.10 es un error (muchos paneles ni lo dejan guardar). Si tienes una IP, usa A.

La regla de oro: el CNAME no convive con nadie ​

Según la especificación del DNS (RFC 1034), si un nombre tiene un CNAME, no puede tener ningún otro registro: ni A, ni MX, ni TXT, ni otro CNAME.

¿Por qué? Porque un CNAME significa "todo lo que preguntes sobre este nombre, pregúntalo allá". Si además hubiera un TXT propio, el resolver no sabría a quién creerle.

txt
✘ MAL (conflicto)                       ✔ BIEN
CNAME  www   mitienda.com               CNAME  www     mitienda.com
TXT    www   "verificacion=123"         TXT    _verif  "verificacion=123"
                                        (o el TXT en otro nombre que pida el servicio)

En Cloudflare, si intentas crear un registro que choca con un CNAME existente, te mostrará un error del tipo "An A, AAAA, or CNAME record with that host already exists".

Por qué la raíz no puede ser CNAME ​

La raíz mitienda.com (el apex) siempre tiene registros obligatorios:

  • NS: los nameservers (sin ellos, el dominio no existe).
  • SOA: la ficha técnica de la zona.
  • Normalmente también MX (correo) y TXT (SPF, verificaciones).

Si pusieras CNAME @ cname.vercel-dns.com, estarías violando la regla anterior: el nombre mitienda.com tendría CNAME y NS, SOA, MX... Imposible.

txt
 mitienda.com  (apex)
 ├── NS    ana.ns.cloudflare.com     ← obligatorio
 ├── NS    bob.ns.cloudflare.com     ← obligatorio
 ├── SOA   ...                       ← obligatorio
 ├── MX    smtp.google.com           ← correo
 ├── TXT   v=spf1 ...                ← SPF
 └── CNAME cname.vercel-dns.com      ✘ prohibido: el CNAME no convive con nadie

Si un panel te deja poner CNAME en la raíz

Algunos paneles antiguos lo permiten y entonces el correo deja de funcionar de forma intermitente (porque los resolvers siguen el CNAME y ya no encuentran tus MX). Si ves un CNAME en la raíz en un proveedor que no hace flattening, cámbialo por A.

La solución: CNAME flattening, ALIAS y ANAME ​

Como mucha gente necesita apuntar la raíz a plataformas que solo dan un nombre, los proveedores DNS inventaron un truco: tú escribes un CNAME en la raíz, pero el servidor DNS responde con un A.

txt
 Lo que tú configuras en Cloudflare:
   CNAME  @  mitienda.netlify.app

 Lo que hace Cloudflare por dentro, en cada consulta:
   1. Resuelve mitienda.netlify.app → 75.2.60.5
   2. Responde al mundo:  mitienda.com  A  75.2.60.5

 Lo que ve el mundo: un A normal. Las reglas del DNS se respetan.
ProveedorCómo se llama
CloudflareCNAME flattening (automático en la raíz, en todos los planes)
DNSimple, NS1ALIAS
DNS Made Easy, Easy DNSANAME
Amazon Route 53Alias record (solo hacia recursos de AWS)
Netlify DNS, Vercel DNSLo hacen solos al usar su DNS
cPanel, la mayoría de registradoresNo lo soportan: en la raíz usa A

En Cloudflare es automático

Si en Cloudflare creas CNAME con nombre @, el flattening se aplica solo. Verás el registro como CNAME en el panel, pero dig mitienda.com A devolverá IP. Además, si el registro está proxied (naranja), lo que responderá serán las IP de Cloudflare. En planes de pago puedes activar el flattening también en subdominios (DNS → Settings → CNAME flattening), aunque casi nunca hace falta.

www vs sin www ​

Tienes dos nombres: mitienda.com y www.mitienda.com. Ambos deben funcionar, pero uno debe ser el principal y el otro debe redirigir a él (con un 301). Si los dos muestran el sitio sin redirigir, Google los ve como contenido duplicado y las cookies de sesión pueden comportarse raro.

OpciónA favorEn contra
Sin www (mitienda.com)Más corto y modernoLa raíz no admite CNAME (resuelto con flattening)
Con www (www.mitienda.com)Puede usar CNAME sin trucos; las cookies de la raíz no se mandan a otros subdominiosMás largo de escribir

Cualquiera está bien. Lo importante es elegir uno y redirigir el otro.

Configuración típica en Cloudflare (sitio en cPanel, principal sin www) ​

txt
Tipo    Nombre   Valor            Proxy
----------------------------------------------
A       @        203.0.113.10     Proxied (naranja)
CNAME   www      mitienda.com     Proxied (naranja)

Y la redirección www → sin www se hace de alguna de estas formas:

  1. En Cloudflare (recomendado, no toca el servidor): Rules → Redirect Rules (o Rules → Overview → Create rule → Redirect Rule; existe también una plantilla "Redirect from WWW to root"). El nombre de la sección puede variar ligeramente. Lo verás en detalle en Cloudflare a fondo.
  2. En el servidor con .htaccess (Apache/cPanel):
apache
# .htaccess en la carpeta pública del sitio
# Redirige www.mitienda.com → mitienda.com conservando la ruta
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.mitienda\.com$ [NC]
RewriteRule ^(.*)$ https://mitienda.com/$1 [R=301,L]

La redirección necesita DNS

Para redirigir www, el nombre www tiene que existir en el DNS (y estar en naranja si usas reglas de Cloudflare). Si borras el registro de www, la regla nunca se ejecuta y el visitante ve "no se encuentra el sitio".

Paso a paso: crear un CNAME en Cloudflare ​

  1. En dash.cloudflare.com, elige mitienda.com.
  2. Ve a DNS → Records → Add record.
  3. Type: CNAME.
  4. Name: www (o @ para la raíz con flattening).
  5. Target: el nombre de destino, por ejemplo mitienda.com o cname.vercel-dns.com (sin https://, sin barras, sin rutas).
  6. Proxy status: depende de la plataforma (ver tabla de abajo).
  7. Save.

Error común: pegar una URL en el destino

El destino de un CNAME es un nombre, no una URL. Incorrecto: https://mitienda.netlify.app/. Correcto: mitienda.netlify.app.

Apuntar tu dominio a plataformas populares ​

Los valores siguientes son los que publican estas plataformas al momento de escribir esto. Siempre copia los que te muestre el panel de la plataforma, porque a veces los cambian o te dan uno personalizado.

Vercel ​

En Vercel: proyecto → Settings → Domains → Add y escribe mitienda.com.

txt
Tipo    Nombre   Valor                    Proxy en Cloudflare
-------------------------------------------------------------
A       @        76.76.21.21              DNS only (gris)
CNAME   www      cname.vercel-dns.com     DNS only (gris)

Vercel también puede darte un CNAME personalizado (algo como abc123.vercel-dns-017.com); si te lo muestra, úsalo.

Netlify ​

En Netlify: Domain management → Add a domain.

txt
Tipo    Nombre   Valor                    Proxy en Cloudflare
-------------------------------------------------------------
CNAME   @        mitienda.netlify.app     DNS only (gris)   ← flattening
CNAME   www      mitienda.netlify.app     DNS only (gris)

(Si tu DNS no hace flattening, Netlify te indica usar A @ 75.2.60.5.)

GitHub Pages ​

En el repositorio: Settings → Pages → Custom domain, escribe mitienda.com y activa Enforce HTTPS cuando esté disponible.

txt
Tipo    Nombre   Valor                     Proxy en Cloudflare
-------------------------------------------------------------
A       @        185.199.108.153           DNS only (gris)
A       @        185.199.109.153           DNS only (gris)
A       @        185.199.110.153           DNS only (gris)
A       @        185.199.111.153           DNS only (gris)
CNAME   www      tuusuario.github.io       DNS only (gris)

Opcionalmente, los AAAA 2606:50c0:8000::153 a 2606:50c0:8003::153. El CNAME de www apunta a tuusuario.github.io, sin el nombre del repositorio.

Shopify ​

En Shopify: Configuración → Dominios → Conectar dominio existente.

txt
Tipo    Nombre   Valor                    Proxy en Cloudflare
-------------------------------------------------------------
A       @        23.227.38.65             DNS only (gris)
CNAME   www      shops.myshopify.com      DNS only (gris)

¿Naranja o gris con estas plataformas? ​

PlataformaRecomendaciónPor qué
Vercel, Netlify, GitHub PagesGris (DNS only)Ya tienen su propia red global (CDN) y emiten su propio SSL; con naranja puedes tener errores al emitir el certificado o caché duplicada
ShopifyGrisShopify lo exige para emitir SSL y validar el dominio
Tu hosting cPanel o VPSNaranjaAquí Cloudflare sí aporta: caché, protección, SSL gratis

Buena práctica

Agrega un comentario a cada registro en Cloudflare ("Vercel - web principal", "Shopify - tienda"). Dentro de un año, tú o el siguiente desarrollador lo agradecerán.

Cadenas de CNAME ​

Un CNAME puede apuntar a otro CNAME, que apunta a otro... El resolver los sigue todos:

bash
dig www.mitienda.com +noall +answer
txt
www.mitienda.com.          300  IN  CNAME  tienda-mx.netlify.app.
tienda-mx.netlify.app.      20  IN  CNAME  apex-loadbalancer.netlify.com.
apex-loadbalancer.netlify.com. 20 IN A     75.2.60.5

Funciona, pero cada salto agrega una consulta. Evita cadenas largas hechas por ti mismo, y nunca hagas bucles (a → b y b → a).

Comprobar CNAME ​

bash
# ¿Es CNAME y a dónde apunta?
dig +short www.mitienda.com CNAME

# Toda la cadena hasta la IP
dig www.mitienda.com +noall +answer

# La raíz con flattening: debe dar IPs, no CNAME
dig +short mitienda.com A
dig +short mitienda.com CNAME     # vacío = correcto en la raíz
powershell
nslookup -type=CNAME www.mitienda.com 1.1.1.1
nslookup www.mitienda.com 1.1.1.1
# En la salida verás "Aliases: www.mitienda.com" si es un CNAME

Resolve-DnsName www.mitienda.com

Si el registro está en naranja

Un CNAME proxied en Cloudflare no se ve como CNAME desde fuera: Cloudflare responde directamente con sus propias IP. Si quieres ver el CNAME real con dig, ponlo en gris temporalmente o revisa el panel.

Casos reales ​

Caso 1: "Netlify dice que mi dominio no está bien configurado" ​

Revisa con dig +short mitienda.com A. Si salen IP de Cloudflare (104.21..., 172.67...) es porque el registro está en naranja. Ponlo en gris y espera unos minutos para que Netlify valide y emita su certificado.

Caso 2: "No puedo agregar el TXT de verificación en www" ​

www ya tiene un CNAME y no puede tener más registros. Revisa qué nombre exacto pide el servicio: casi siempre es en la raíz (@) o en un nombre especial como _vercel o _github-pages-challenge-tuusuario. Lo verás en TXT y verificaciones.

Caso 3: "Quería apuntar mitienda.com/blog a otro servidor" ​

El DNS solo trabaja con nombres, no con rutas. No existe un registro para /blog. Opciones: usar un subdominio (blog.mitienda.com con su propio registro) o configurar un proxy inverso en el servidor o con Cloudflare Workers.

Ejercicios ​

  1. ¿Qué tipo de registro usarías en cada caso? a) www hacia la raíz, b) @ hacia un VPS 198.51.100.25, c) docs hacia mitienda.gitbook.io, d) @ hacia mitienda.netlify.app en Cloudflare.
  2. Tu compañero tiene CNAME www mitienda.com y quiere agregar MX www .... ¿Puede?
  3. Escribe la zona para: sitio principal en Vercel (raíz y www), tienda en Shopify en tienda.mitienda.com y blog en el hosting cPanel 203.0.113.10 en blog.mitienda.com. Indica naranja o gris.
  4. Explica con tus palabras qué hace el CNAME flattening de Cloudflare.
  5. ¿Qué está mal en CNAME tienda https://shops.myshopify.com/?
Ver solución
  1. a) CNAME www mitienda.com (o A). b) A @ 198.51.100.25. c) CNAME docs mitienda.gitbook.io. d) CNAME @ mitienda.netlify.app: en Cloudflare se aplica flattening automático.
  2. No: un nombre con CNAME no puede tener otros registros. Tendría que reemplazar el CNAME de www por A/AAAA (y aun así, recibir correo en @www.mitienda.com es raro; normalmente el MX va en la raíz).
  3. Zona:
txt
Tipo    Nombre   Valor                   Proxy
-------------------------------------------------------
A       @        76.76.21.21             Gris (Vercel)
CNAME   www      cname.vercel-dns.com    Gris (Vercel)
CNAME   tienda   shops.myshopify.com     Gris (Shopify)
A       blog     203.0.113.10            Naranja (cPanel)

(Además, blog.mitienda.com debe agregarse como dominio en cPanel, y tienda.mitienda.com en Shopify.)

  1. Permite poner un CNAME en la raíz: Cloudflare resuelve el destino por dentro y responde al mundo con registros A/AAAA, así se respeta la regla de que la raíz no puede ser CNAME.
  2. El destino de un CNAME debe ser un nombre de dominio: sin https:// y sin / al final. Correcto: CNAME tienda shops.myshopify.com.

Resumen ​

  • CNAME = alias: un nombre apunta a otro nombre, nunca a una IP ni a una URL.
  • Un nombre con CNAME no puede tener ningún otro registro.
  • Por eso la raíz no puede ser CNAME (tiene NS, SOA, MX, TXT).
  • CNAME flattening (Cloudflare), ALIAS o ANAME permiten "CNAME en la raíz" respondiendo A por dentro.
  • Elige www o sin www como principal y redirige el otro con 301.
  • Vercel, Netlify, GitHub Pages y Shopify: copia los valores de su panel y usa nube gris.
  • El DNS trabaja con nombres, no con rutas: /blog no se resuelve con DNS.
  • Siguiente: Subdominios y puertos: cómo sabe el servidor qué sitio y qué puerto entregar.

Academia Web — aprende, copia y construye.