Skip to content

Registros TXT y verificaciones ​

Hasta ahora usaste registros que llevan a algún lado: A lleva a una IP, CNAME a otro nombre, MX a un servidor de correo. El registro TXT es distinto: no lleva a ningún lado, solo guarda texto. Y ese texto resulta ser una de las piezas más usadas de todo el DNS: con él demuestras que el dominio es tuyo (Google, Microsoft, Meta, Stripe…) y con él se publican SPF, DKIM y DMARC, las tres reglas que deciden si tu correo llega a la bandeja o a spam.

En esta lección aprenderás qué es exactamente un TXT, cómo funcionan las verificaciones de dominio, las reglas de comillas y longitud (las famosas cadenas de 255 caracteres) y cómo convivir con muchos TXT en el mismo nombre sin romper nada.

Concepto ​

Analogía: el tablero de avisos de tu casa ​

Imagina que tu dominio mitienda.com es una casa. Los registros A y MX son como la dirección y el buzón: le dicen a la gente a dónde ir. El registro TXT es el tablero de corcho en la puerta, donde pegas notitas:

  • "Sí, esta casa es de Erick" (verificación de Google).
  • "Solo el cartero de Google y el de mi hosting pueden dejar cartas a mi nombre" (SPF).
  • "Si alguien manda cartas falsas a mi nombre, tíralas a la basura y mándame un reporte" (DMARC).

Cualquiera puede leer el tablero (el DNS es público), pero solo el dueño puede pegar notas (porque solo él entra al panel de DNS). Esa es justo la idea de las verificaciones: si alguien logra pegar una nota con un código secreto que le dio Google, demuestra que controla el dominio.

txt
                 mitienda.com  (la "casa")
   ┌───────────────────────────────────────────────┐
   │  A      → 203.0.113.10        (la dirección)  │
   │  MX     → smtp.google.com     (el buzón)      │
   │  TXT    → tablero de avisos:                  │
   │     📌 "google-site-verification=abc123..."    │
   │     📌 "v=spf1 include:_spf.google.com ~all"   │
   │     📌 "MS=ms48213377"                         │
   └───────────────────────────────────────────────┘

Qué contiene técnicamente un TXT ​

Un registro TXT tiene las mismas partes que cualquier registro:

CampoEjemploQué significa
Nombre@, _dmarc, google._domainkeyEn qué "nombre" se pega la nota
TipoTXTTexto libre
Contenido"v=spf1 include:_spf.google.com ~all"El texto en sí
TTLAuto (300 s en Cloudflare)Cuánto lo guardan en caché los resolvers

El DNS no interpreta el contenido: para el servidor DNS es solo texto. Quien lo interpreta es el programa que lo consulta: Google lee su código de verificación, Gmail lee tu SPF, etc.

Nombres especiales con guion bajo ​

Muchos TXT no van en la raíz (@) sino en nombres que empiezan con _. El guion bajo indica "esto no es un sitio web, es un dato de servicio":

Nombre en CloudflareNombre completoPara qué
@mitienda.comVerificaciones y SPF
_dmarc_dmarc.mitienda.comPolítica DMARC
google._domainkeygoogle._domainkey.mitienda.comLlave DKIM de Google
_acme-challenge_acme-challenge.mitienda.comValidación de certificados SSL por DNS
_github-pages-challenge-usuario_github-pages-challenge-usuario.mitienda.comVerificar dominio en GitHub Pages

Nombre corto vs nombre completo

En Cloudflare escribes el nombre corto (_dmarc) y el panel le agrega .mitienda.com solo. Si escribes _dmarc.mitienda.com, Cloudflare también lo entiende. Lo que nunca debes hacer es escribir _dmarc.mitienda.com.mitienda.com (pasa en otros paneles que agregan el dominio aunque ya lo hayas puesto). Si al guardar ves el dominio repetido, corrígelo.

Cómo funcionan las verificaciones de dominio ​

Cuando un servicio te pide "verifica tu dominio", el flujo siempre es el mismo:

txt
1. Tú:      "Quiero usar mitienda.com en tu servicio"
2. Servicio: "Demuéstralo. Pega este código en tu DNS:
              google-site-verification=Xk29fa..."
3. Tú:      (creas el TXT en Cloudflare)
4. Servicio: consulta el DNS público de mitienda.com
              ¿Aparece mi código?  ── sí ──► ✅ Verificado
                                    └─ no ──► ❌ "No encontramos el registro"

Puntos importantes:

  • El código es único para tu cuenta. Nadie más puede reutilizarlo.
  • No borres el TXT después de verificar. Muchos servicios revisan periódicamente y, si desaparece, pierdes la verificación (Google Search Console lo hace).
  • Algunos servicios permiten verificar con CNAME en lugar de TXT. Usa el que te pidan; ambos demuestran lo mismo.

Las verificaciones más comunes ​

ServicioTipoNombreContenido (ejemplo)
Google Search Console / WorkspaceTXT@google-site-verification=Xk29faQ...
Microsoft 365TXT@MS=ms48213377
Meta (Facebook / Instagram Business)TXT@facebook-domain-verification=7p3k...
Zoho MailTXT@zoho-verification=zb12345678.zmverify.zoho.com
Apple (Apple Business, Sign in with Apple)TXT@apple-domain-verification=Ab12...
Stripe (dominios de métodos de pago, correo con tu dominio)TXT o CNAMELo que indique el panelCopia exacto lo que muestre Stripe
BrevoTXT@brevo-code:9f8e7d...
Let's Encrypt (validación DNS-01)TXT_acme-challengeToken temporal

Los valores cambian

Los prefijos de la tabla son reales, pero cada servicio puede cambiar su formato. Copia siempre exactamente lo que te muestre su panel, incluido el nombre del host. Si te piden un nombre raro como _vercel o xyz123._domainkey, ese nombre es parte de la verificación.

Paso a paso: verificar mitienda.com en Google Search Console ​

Este es el caso más común y el que ilustra todos los demás.

  1. Entra a Google Search Console y pulsa Agregar propiedad.
  2. Elige el tipo Dominio (no "Prefijo de URL"). La propiedad de dominio cubre http, https, www y todos los subdominios, y solo se verifica por DNS.
  3. Escribe mitienda.com y pulsa Continuar. Google te muestra un texto como:
    txt
    google-site-verification=Xk29faQb81LmN0pQrS7tUvWxYz-AbCdEfGhIjKlMn
    Cópialo completo con el botón de copiar (no lo transcribas a mano).
  4. En otra pestaña abre el panel de Cloudflare: elige tu cuenta → mitienda.com → DNS → Records (Registros) → Add record (Agregar registro). El nombre del menú puede variar un poco según la versión del panel, pero siempre está dentro de la sección DNS.
  5. Llena el formulario:
    txt
    Type:    TXT
    Name:    @
    Content: google-site-verification=Xk29faQb81LmN0pQrS7tUvWxYz-AbCdEfGhIjKlMn
    TTL:     Auto
  6. Pulsa Save (Guardar).
  7. Comprueba desde tu computadora (siguiente sección) que el registro ya es público.
  8. Vuelve a Search Console y pulsa Verificar. Con Cloudflare normalmente funciona en menos de un minuto.

Buena práctica

Si la verificación falla, no la repitas diez veces seguidas. Primero consulta el DNS tú mismo. Si tu consulta no muestra el código, el problema está en tu registro; si sí lo muestra, espera unos minutos (el servicio puede tener caché) y vuelve a intentar.

Comprobar registros TXT ​

powershell
# Todos los TXT de la raíz
nslookup -type=txt mitienda.com

# Preguntando directo a Cloudflare (1.1.1.1) para saltarte la caché del router
nslookup -type=txt mitienda.com 1.1.1.1

# TXT de un nombre especial
nslookup -type=txt _dmarc.mitienda.com 1.1.1.1

# Alternativa de PowerShell, con salida más limpia
Resolve-DnsName mitienda.com -Type TXT -Server 1.1.1.1
bash
# Todos los TXT de la raíz
dig +short mitienda.com TXT

# Preguntando directo a un resolver público
dig @1.1.1.1 +short mitienda.com TXT
dig @8.8.8.8 +short mitienda.com TXT

# TXT de un nombre especial
dig +short _dmarc.mitienda.com TXT

# Preguntando al nameserver autoritativo (la "fuente de la verdad")
dig @ana.ns.cloudflare.com +short mitienda.com TXT

Una salida típica de dig +short mitienda.com TXT sería:

txt
"google-site-verification=Xk29faQb81LmN0pQrS7tUvWxYz-AbCdEfGhIjKlMn"
"v=spf1 include:_spf.google.com ~all"
"MS=ms48213377"
"facebook-domain-verification=7p3kq9z0x1y2w3v4u5t6"

Fíjate: cuatro TXT en el mismo nombre @, y es totalmente válido.

Autoritativo vs resolver

Si preguntas a ana.ns.cloudflare.com (tu nameserver) ves lo que hay ahora mismo en la zona. Si preguntas a 8.8.8.8 puedes ver una versión en caché hasta que venza el TTL. Cuando un cambio "no aparece", compara ambas respuestas: si el autoritativo ya lo tiene, solo es cuestión de esperar.

Varios TXT en el mismo nombre ​

Un nombre puede tener todos los TXT que quieras. Cada uno es un registro separado. Lo correcto es crear un registro por cada servicio:

txt
Tipo  Nombre  Contenido
TXT   @       "google-site-verification=Xk29fa..."      ← registro 1
TXT   @       "MS=ms48213377"                           ← registro 2
TXT   @       "facebook-domain-verification=7p3k..."    ← registro 3
TXT   @       "v=spf1 include:_spf.google.com ~all"     ← registro 4

Lo que no debes hacer es meter todo en un solo registro:

txt
❌ TXT @ "google-site-verification=Xk29fa... MS=ms48213377 v=spf1 include:_spf.google.com ~all"

Así ningún servicio encuentra su código, porque cada uno busca un registro que empiece con su prefijo.

Las excepciones: SPF y DMARC ​

Aunque puede haber muchos TXT, hay dos reglas estrictas:

ReglaPor qué
Un solo TXT que empiece con v=spf1 por nombreSi hay dos, el receptor devuelve permerror y el SPF falla para todos. Se combinan en uno solo (lección de SPF).
Un solo TXT que empiece con v=DMARC1 en _dmarcCon dos, el receptor ignora DMARC como si no existiera (lección de DMARC).

El error número uno al agregar un servicio de correo

Contratas Mailchimp, te dice "agrega este SPF" y creas un segundo TXT con v=spf1. Desde ese momento, el SPF de todo tu dominio queda roto, incluido el de Google Workspace. Antes de crear un SPF, busca si ya existe uno y edítalo.

Comillas y longitud: las cadenas de 255 ​

Esta es la parte técnica que confunde a casi todo el mundo, así que vamos despacio.

Las comillas ​

En el formato de zona DNS (el que usan los servidores), el contenido de un TXT va entre comillas: "v=spf1 -all". Las comillas no son parte del texto, solo lo delimitan, igual que en programación "hola" es el texto hola.

En Cloudflare puedes escribir el contenido con o sin comillas y funciona igual:

txt
Content: v=spf1 include:_spf.google.com ~all        ← Cloudflare las agrega
Content: "v=spf1 include:_spf.google.com ~all"      ← también válido

Algunas versiones del panel muestran un aviso recomendando poner comillas; no pasa nada si lo haces. Lo que sí rompe el registro es mezclarlas mal:

txt
❌ "v=spf1 include:_spf.google.com ~all          (falta la comilla de cierre)
❌ ""v=spf1 include:_spf.google.com ~all""       (comillas dobles duplicadas)
❌ “v=spf1 include:_spf.google.com ~all”         (comillas tipográficas de Word)

Copiar desde Word, WhatsApp o un PDF

Esos programas cambian las comillas rectas " por comillas curvas “ ” y a veces agregan espacios invisibles. Copia los valores desde el panel original del servicio o pégalos primero en un editor de texto plano (Bloc de notas, VS Code).

El límite de 255 caracteres ​

El estándar DNS dice que un TXT está formado por una o varias cadenas (character-strings) y que cada cadena mide como máximo 255 bytes. Un registro puede tener varias cadenas seguidas; al leerlo, el programa que lo consulta (por ejemplo, el verificador de DKIM) las une sin espacios.

txt
Un TXT con una sola cadena (corto):
  "v=spf1 include:_spf.google.com ~all"

Un TXT con dos cadenas (largo, p. ej. una llave DKIM de 2048 bits):
  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5x...(hasta 255)"
  "Qk7v2...resto de la llave...IDAQAB"

Lo que lee el receptor:
  v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5x...Qk7v2...IDAQAB

¿Qué significa para ti en Cloudflare?

  • Pega el valor completo en una sola línea. Cloudflare lo divide automáticamente en cadenas de 255 al publicarlo.
  • Si el servicio te da el valor ya dividido en trozos con comillas ("parte1" "parte2"), también puedes pegarlo así; Cloudflare respeta los trozos.
  • Lo que nunca debes hacer es dividirlo tú en dos registros TXT distintos: serían dos notas separadas, no una nota larga.

Cuando consultes un TXT largo con dig, lo verás partido:

txt
$ dig +short google._domainkey.mitienda.com TXT
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5x..." "Qk7v2...IDAQAB"

Ese espacio entre "..." "..." es solo cómo dig muestra las dos cadenas; el receptor las une sin espacio. Está bien.

¿Y el tamaño total?

Además de las cadenas de 255, hay límites prácticos al tamaño total: Cloudflare acepta contenidos de TXT de hasta 2048 caracteres, y respuestas DNS muy grandes (muchos TXT largos en el mismo nombre) pueden necesitar TCP. Para el uso normal (verificaciones, SPF, una llave DKIM de 2048 bits) no te vas a topar con esos límites.

Casos de uso reales ​

Caso 1: el cliente quiere Search Console, Meta y Workspace ​

La zona TXT de mitienda.com queda así:

txt
Tipo  Nombre              Contenido
TXT   @                   google-site-verification=Xk29fa...
TXT   @                   facebook-domain-verification=7p3kq9z0x1...
TXT   @                   v=spf1 include:_spf.google.com ~all
TXT   google._domainkey   v=DKIM1; k=rsa; p=MIIBIjANBgkq...IDAQAB
TXT   _dmarc              v=DMARC1; p=none; rua=mailto:dmarc@mitienda.com

Nota que el código de Google Workspace y el de Search Console son el mismo tipo (google-site-verification). Si verificas ambos con cuentas distintas tendrás dos TXT google-site-verification con códigos diferentes, y está bien.

Caso 2: "Verifiqué hace un año y hoy Search Console dice que perdí el acceso" ​

Casi siempre es porque alguien "limpió" el DNS y borró TXT que parecían basura, o porque se cambiaron los nameservers a otro proveedor y no se copiaron los TXT. Solución: vuelve a crear el TXT (Search Console te muestra el código otra vez en Configuración → Usuarios y permisos → Propietarios verificados, la ruta puede variar).

Caso 3: limpiar TXT viejos con seguridad ​

Antes de borrar un TXT pregúntate:

  1. ¿Empieza con v=spf1, v=DKIM1, v=DMARC1? No lo borres sin entender el correo del dominio.
  2. ¿Es una verificación (*-verification=, MS=)? Pregunta al cliente si todavía usa ese servicio. Si ya no lo usa, puedes borrarlo.
  3. ¿No sabes qué es? Busca el prefijo en internet. Anota el registro en un archivo antes de borrarlo, por si hay que restaurarlo.

Exporta la zona antes de tocar nada

En Cloudflare, dentro de DNS → Records hay una opción para exportar la zona (Import and Export / Exportar). Descarga el archivo antes de cualquier limpieza grande: es tu respaldo.

Errores comunes ​

SíntomaCausa probableSolución
"No encontramos el registro TXT"Lo creaste en el registrador y los NS apuntan a CloudflareCréalo en la zona del proveedor al que apuntan los NS (lección 3)
El TXT aparece en ana.ns.cloudflare.com pero no en 8.8.8.8Caché del resolverEspera el TTL; usa TTL bajo para pruebas
Nombre duplicado: @.mitienda.com o mitienda.com.mitienda.comEscribiste el dominio completo en un panel que lo agregaDeja solo @ o el nombre corto
SPF "falla" desde que agregaste otro servicioDos TXT v=spf1Combínalos en uno (SPF)
DKIM inválidoSe coló un espacio o salto de línea al pegar la llaveVuelve a copiar desde el panel original, en una sola línea

Ejercicios ​

  1. Consulta los TXT de google.com y de github.com. ¿Cuántos tienen? ¿Puedes identificar alguna verificación y el SPF?
  2. Tu cliente te pide verificar mitienda.com en Meta. Ya existen estos TXT en @: un google-site-verification y un SPF. Escribe exactamente qué registro crearías en Cloudflare.
  3. Un compañero creó esto. ¿Qué está mal?
    txt
    TXT  @  "v=spf1 include:_spf.google.com ~all"
    TXT  @  "v=spf1 include:servers.mcsv.net ~all"
  4. Te dan una llave DKIM de 410 caracteres. ¿La divides en dos registros TXT? ¿Cómo la pegas en Cloudflare?
  5. Search Console no verifica. Escribe los dos comandos (uno de Windows y uno de dig) que usarías para saber si el problema es tu registro o la caché.
Ver solución
  1. Windows: nslookup -type=txt google.com 1.1.1.1. Linux/macOS: dig +short google.com TXT. Verás varias verificaciones (google-site-verification, facebook-domain-verification, MS=, etc.) y un registro v=spf1 .... Los valores cambian con el tiempo.
  2. Un registro nuevo, sin tocar los existentes:
    txt
    Type:    TXT
    Name:    @
    Content: facebook-domain-verification=EL_CODIGO_QUE_TE_DIO_META
    TTL:     Auto
  3. Hay dos registros SPF en el mismo nombre. El receptor devuelve permerror y el SPF falla. Se debe dejar uno solo combinando los mecanismos: v=spf1 include:_spf.google.com include:servers.mcsv.net ~all (en la siguiente lección verás que, para Mailchimp, en muchos casos ni siquiera hace falta).
  4. No. Es un solo registro TXT. En Cloudflare pegas el valor completo en una sola línea en el campo Content; Cloudflare lo divide en cadenas de 255 automáticamente. Dos registros serían dos llaves inválidas.
  5. Preguntando al autoritativo y a un resolver público:
    powershell
    nslookup -type=txt mitienda.com ana.ns.cloudflare.com
    bash
    dig @8.8.8.8 +short mitienda.com TXT
    Si el autoritativo muestra el código y 8.8.8.8 no, es caché: espera. Si el autoritativo tampoco lo muestra, el registro está mal creado o en la zona equivocada.

Resumen ​

  • Un TXT guarda texto; el DNS no lo interpreta, lo interpreta quien lo consulta.
  • Las verificaciones consisten en pegar un código único en un TXT (a veces CNAME) para demostrar que controlas el dominio. No las borres después.
  • Puede haber muchos TXT en el mismo nombre: uno por servicio. Pero solo un SPF por nombre y un DMARC en _dmarc.
  • Las comillas delimitan el texto; en Cloudflare son opcionales. Cuidado con las comillas curvas al copiar.
  • Cada cadena de un TXT mide máximo 255 caracteres; los valores largos se dividen en varias cadenas dentro del mismo registro. Cloudflare lo hace solo.
  • Comprueba con nslookup -type=txt y dig +short ... TXT, preguntando al autoritativo cuando haya dudas.
  • Siguiente: SPF: quién puede enviar correo por ti.

Academia Web — aprende, copia y construye.