YAML es el lenguaje de configuración de la infraestructura moderna — ejecuta tus GitHub Actions, tus manifiestos de Kubernetes, tus stacks de Docker Compose y tus pipelines de CI/CD. También es uno de los formatos más propensos a errores al escribirlo a mano, porque un solo espacio desalineado, un tab invisible o dos puntos sin comillas producen un fallo duro de parsing o un documento silenciosamente incorrecto. Esta guía cubre cada categoría de error de YAML, cómo leer los mensajes que producen los parsers y la forma más rápida de detectar y corregir cada uno.
Por qué los errores de YAML son difíciles de depurar
YAML deriva su estructura completamente de los espacios en blanco. No hay corchetes, no hay llaves, no hay delimitadores de bloque explícitos — solo niveles de indentación y dos puntos. Esto hace que YAML sea notablemente legible cuando es correcto y notablemente frustrante cuando no lo es, porque el mismo carácter que organiza tus datos puede destruirlos silenciosamente si está una columna desviado.
El parser reporta dónde se rindió, no dónde cometiste el error
La dificultad central de los mensajes de error de YAML es que los parsers reportan la línea donde dejaron de poder interpretar el documento — no la línea donde se cometió el error original. Dos puntos faltantes en la línea 15 pueden no aparecer como error hasta la línea 22, cuando la siguiente clave llega en un contexto inesperado. Esto significa que casi siempre necesitas mirar varias líneas por encima del error reportado para encontrar la causa real.
- Los errores de indentación se cascada — un bloque padre mal indentado hace que cada clave hija reporte error
- Los caracteres de tab se ven idénticos a los espacios pero provocan un fallo de parsing en cualquier parser conforme a la especificación
- Las claves duplicadas pasan silenciosamente las comprobaciones de sintaxis básicas — un valor se sobrescribe sin ninguna advertencia
- Los caracteres especiales sin comillas como :, #, * y & cambian el significado del documento inesperadamente
- Las anclas y alias fallan silenciosamente si un alias referencia a una ancla inexistente en el mismo archivo
Note
La versión de YAML importa
La mayoría de las herramientas modernas apuntan a YAML 1.2, que endureció varias reglas de parsing que YAML 1.1 permitía. Por ejemplo, YAML 1.1 trataba yes, no, on y off como valores booleanos; YAML 1.2 no. Si tu configuración usa estas cadenas desnudas y tu validador reporta coerción de tipo inesperada, la discrepancia de versión de YAML es la causa. Comprueba siempre qué versión de la especificación implementa tu parser en tiempo de ejecución.
Errores de sintaxis de YAML más comunes
Los errores de YAML caen en un pequeño número de categorías repetitivas. Reconocer la categoría a partir del mensaje de error — o de la apariencia visual del archivo — reduce el tiempo de diagnóstico de minutos a segundos.
Errores de indentación
YAML requiere indentación consistente. La especificación no obliga a un número concreto de espacios, pero cada nivel debe estar indentado más que su padre por la misma cantidad dentro de ese bloque. Mezclar indentación de dos y cuatro espacios en el mismo archivo, o indentar un elemento de secuencia un espacio menos que su hermano, producirá un error de «indentación inesperada» o «no se pudo encontrar la entrada de bloque esperada». La práctica más segura es dos espacios por nivel en todo el archivo.
Caracteres de tab en lugar de espacios
La especificación de YAML prohíbe explícitamente los caracteres de tab como indentación. La mayoría de los parsers lanzan un error de «carácter encontrado que no puede iniciar ningún token» o «carácter de tab presente al inicio de una línea» cuando encuentran uno. El problema es invisible en la mayoría de editores a menos que actives una opción de «mostrar espacios» o «renderizar espacios». Configura tu editor para expandir siempre los tabs a espacios en archivos .yaml y .yml para eliminar esta categoría por completo.
Warning
Cadenas sin comillas con caracteres especiales
YAML reserva varios caracteres para propósitos estructurales: dos puntos, almohadilla, asterisco, ampersand, signo de exclamación, pipe, mayor que, corchetes y llaves. Cuando cualquiera de estos caracteres aparece en un valor de cadena sin comillas, el parser puede malinterpretarlos como tokens de sintaxis. La manifestación más común es un valor de URL como https://example.com:8080 que provoca un error de «valores de mapeo no permitidos aquí» porque el :8080 se parsea como una nueva clave de mapeo. Entrecomilla cualquier valor de cadena que contenga estos caracteres.
| Tipo de error | Mensaje típico del parser | Causa raíz | Corrección |
|---|---|---|---|
| Indentación | "could not find expected :" | Bloque indentado en nivel incorrecto | Alinear al padre + 2 espacios |
| Carácter de tab | "character that cannot start token" | Tab usado en lugar de espacio | Reemplazar todos los tabs por espacios |
| Dos puntos sin comillas | "mapping values not allowed here" | Dos puntos en valor de cadena desnudo | Entrecomillar el valor |
| Clave duplicada | Silencioso o definido por implementación | La misma clave aparece dos veces en el bloque | Eliminar o renombrar el duplicado |
| Alias no definido | "found undefined alias" | * referencia a un & ancla no declarada | Declarar el ancla antes del alias |
| Escalar multilínea | El parser se detiene a mitad de bloque | Indicador de bloque escalar incorrecto | Usar | para literal, > para plegado |
| Coerción booleana | Tipo incorrecto en tiempo de ejecución | yes/no/on/off en modo YAML 1.1 | Entrecomillar la cadena: "yes" |
Cómo leer los mensajes de error de YAML
Los mensajes de error de YAML son notoriamente lacónicos. Entender cómo decodificar los dos o tres datos que sí proporcionan ahorra un tiempo considerable de depuración. Cada mensaje de parser contiene una referencia de línea y columna, una descripción de lo que se esperaba y, a veces, una descripción de lo que se encontró en su lugar.
Un error en la línea 30, columna 1, normalmente significa que el problema empezó en la línea 20. Lee hacia arriba.
Las tres partes de un error de parser
- Línea y columna: apunta a dónde falló el parsing, no necesariamente donde está el error — mira 5-10 líneas más arriba
- Token esperado: qué buscaba el parser — «se esperaba un valor de mapeo» significa que esperaba dos puntos tras una clave
- Token encontrado: qué encontró realmente el parser — «se encontró una entrada de secuencia de bloque» significa que se topó con un elemento de lista - donde esperaba una clave
Decodificar patrones de mensajes comunes
"could not find expected ':'" significa que el parser leyó una clave de mapeo pero llegó al final de la línea o a un token que no eran dos puntos antes de encontrar el separador. La clave puede contener un carácter reservado que terminó el token de clave antes de tiempo, o los dos puntos se omitieron accidentalmente. "mapping values are not allowed here" significa que un : apareció en un contexto donde el parser no estaba en un bloque de mapeo — típicamente causado por una URL o cadena de versión sin comillas. "found duplicate key" lo elevan los parsers estrictos (yaml.v3 de Go, ruamel.yaml) cuando el mismo nombre de clave aparece más de una vez en un bloque — un cambio de configuración donde la clave antigua no se eliminó.
Tip
Cómo detectar y corregir errores de YAML paso a paso
El camino más rápido de un archivo YAML roto a uno funcional es un flujo de trabajo estructurado y consciente de las categorías, en lugar de una revisión visual línea por línea. Estos cinco pasos cubren cada escenario común.
Valida primero el documento bruto
Abre el Validador YAML y pega tu documento completo. Si el validador reporta errores, anota los números de línea y las categorías de mensaje antes de hacer ningún cambio. Corregir un error a la vez y revalidar después de cada corrección evita introducir accidentalmente nuevos problemas mientras corriges los originales.
Corrige errores de indentación y tabs
Activa la renderización de espacios visibles en tu editor (VS Code: View → Render Whitespace → All). Reemplaza cada tab por dos espacios. Asegúrate de que cada bloque hijo esté indentado exactamente dos espacios más que su padre. Los elementos de secuencia (-) cuentan como un nivel de indentación: el contenido después de - debe ir en la misma línea o indentado dos espacios en la línea siguiente. Revalida después de este paso antes de continuar.
Entrecomilla las cadenas con caracteres especiales
Revisa cada valor de cadena sin comillas que contenga dos puntos, almohadillas, asteriscos, ampersands, signos de exclamación o pipes. Envuélvelos entre comillas dobles. Presta especial atención a URLs, cadenas de versión como v2.0:latest y valores que empiezan por llave o corchete (que se parsearían como colecciones de flujo, no como cadenas). Después de entrecomillar, revalida para confirmar que los errores de mapeo están resueltos.
Comprueba las claves duplicadas
Ejecuta el Detector de Claves Duplicadas YAML sobre el mismo documento. Las claves duplicadas pasan la validación de sintaxis básica pero sobrescriben valores silenciosamente en tiempo de ejecución — la mayoría de herramientas de CI/CD y Kubernetes aplican el último valor visto, mientras que otras aplican el primero. Cualquiera de las dos conductas es peligrosa. Elimina o renombra cualquier duplicado que el detector encuentre.
Valida anclas y alias si los usas
Si tu YAML usa & anclas y * alias — comunes en archivos de values de Helm, playbooks de Ansible y configs complejas de Docker Compose — ejecuta el Validador de Anclas y Alias YAML. Comprueba que cada alias referencia a un ancla declarada, que no existen merge-keys circulares y que los nombres de ancla siguen convenciones consistentes.
Validador YAML
Pega cualquier documento YAML y obtén reportes instantáneos de errores de sintaxis y estructura con números de línea y columna — corre enteramente en tu navegador, nada se sube.
Errores de YAML por tipo de archivo
Diferentes tipos de archivos YAML atraen diferentes patrones de error. Conocer qué errores son más comunes en cada tipo de archivo te permite comprobar primero lo correcto en lugar de escanear todo el documento.
Workflows de GitHub Actions
Los workflows de GitHub Actions fallan en la etapa de parsing antes de que cualquier job se ejecute, haciendo de los errores de YAML lo primero que hay que corregir. Los errores más comunes son on: tratado como booleano (true) porque on es un booleano de YAML 1.1 — entrecomíllalo como "on" o usa el nombre completo del trigger. Los bloques run: de pasos con scripts de shell multilínea que usan el indicador de bloque escalar incorrecto (plegado > en lugar de literal |) también causan errores silenciosos donde los saltos de línea se colapsan. Usa | para scripts de shell multilínea. El Validador de Workflows de GitHub Actions comprueba tanto la sintaxis YAML como las reglas estructurales específicas del workflow en una pasada.
Manifiestos de Kubernetes
Los errores de YAML de Kubernetes típicamente implican errores profundos de indentación anidada — un bloque containers indentado bajo spec por cuatro espacios cuando los bloques circundantes usan dos, o un bloque resources.limits colocado en el nivel de anidamiento incorrecto. El servidor API de Kubernetes los reporta como errores de validación de campos, no como errores de sintaxis YAML, porque kubectl apply primero parsea el YAML con éxito y luego valida el esquema del objeto. Usa el Validador de Kubernetes para capturar problemas tanto de YAML como de esquema antes de aplicar. El Resaltador de Diffs para Configs JSON/YAML es útil para comparar manifiestos entre entornos.
Archivos de Docker Compose
Los errores de docker-compose.yml de Docker Compose son más comúnmente errores de indentación en las definiciones de servicios, mapeos de puertos sin comillas como 3000:3000 (los dos puntos provocan un error del parser salvo que se entrecomillen o se escriban como elemento de secuencia), y valores de variables de entorno que contienen signos de igual o almohadillas sin entrecomillar. Entrecomilla siempre los valores de variables de entorno. El Validador de Docker Compose valida tanto la estructura YAML como el esquema específico de Compose.
Archivos values.yaml de Helm
Los archivos values.yaml de Helm frecuentemente usan anclas YAML para configuración DRY — y los errores relacionados con anclas son comunes tras reestructurar. El Validador de Values de Helm valida la sintaxis específica de Helm, mientras que la Herramienta de Diff de Deriva YAML de Values de Helm te ayuda a comparar valores entre releases para capturar la deriva introducida por una edición reciente.
Playbooks de Ansible
Los playbooks de Ansible combinan YAML estándar con expresiones de plantilla Jinja2 usando llaves dobles alrededor de nombres de variables. Las llaves dobles no son sintaxis YAML, pero aparecen dentro de valores de cadena YAML. Si una expresión Jinja aparece como el valor entero de una clave sin entrecomillar, el parser YAML de Ansible trata la llave de apertura como el inicio de un mapeo de flujo. Entrecomilla siempre cualquier valor YAML que empiece por llaves dobles. El Validador de Ansible maneja tanto la capa YAML como la Jinja2 de la validación de playbooks.
Categorías avanzadas de errores de YAML
Más allá de la sintaxis básica, varias características de YAML tienen sus propias categorías de error que requieren enfoques diagnósticos específicos. Son menos comunes pero tienden a ser más difíciles de diagnosticar sin las herramientas adecuadas.
Claves duplicadas — pérdida silenciosa de datos
Las claves duplicadas son la categoría de error de YAML más peligrosa porque no provocan un fallo de parsing en la mayoría de los parsers. Cuando refactorizas un archivo de configuración y añades un nuevo valor para una clave sin eliminar el antiguo, ambas claves coexisten en el texto bruto. Según el parser, gana el primer o el último valor — PyYAML y js-yaml usan silenciosamente la última aparición, mientras que yaml.v3 de Go reporta un error. El resultado es un archivo de configuración que se ve correcto al leerlo pero se comporta en tiempo de ejecución de forma distinta a la esperada.
Warning
Errores de anclas y alias
Las anclas YAML (&name) te permiten definir un valor una vez y referenciarlo en otra parte con un alias (*name). Los errores ocurren cuando un alias referencia a un ancla declarada más tarde en el archivo (las referencias hacia adelante no están permitidas en YAML), cuando dos anclas comparten el mismo nombre (la segunda sobrescribe silenciosamente la primera), o cuando una merge key (<<: *alias) se usa sobre un nodo que no es un mapeo. Estos errores son invisibles para los validadores básicos — solo un validador que rastree específicamente las declaraciones de anclas y las referencias de alias los capturará.
Desajustes de sustitución de variables de entorno
Docker Compose, GitHub Actions y Ansible soportan todos la sustitución de variables de entorno dentro de los valores YAML. Cuando la variable de entorno no está establecida en el momento del parsing, la sustitución falla, usa una cadena vacía o recurre a un valor por defecto — dependiendo de la sintaxis usada. Un documento YAML que valida correctamente en CI puede fallar en producción porque falta una variable de entorno requerida. La Herramienta de Vista Previa de Sustitución de Env de YAML te permite previsualizar el documento YAML expandido con un conjunto específico de valores de variables antes del despliegue.
- $VAR sin valor por defecto: falla silenciosamente si VAR no está establecida — sustituye una cadena vacía
- Sintaxis ${VAR:-default}: recurre a "default" si VAR no está establecida — prueba ambas rutas
- Sintaxis ${VAR:?error message}: lanza un error explícito si VAR no está establecida — preferido para variables requeridas
- Sustituciones sin comillas que empiezan por llave: el parser trata las sustituciones de variables como mapeos de flujo — entrecomilla siempre
Prevenir errores de YAML a largo plazo
Corregir errores individuales de YAML es rápido una vez conoces la categoría. Prevenir que lleguen a producción requiere un pequeño conjunto de hábitos consistentes y comprobaciones automatizadas.
Configuración del editor
Configura tu editor para usar indentación de dos espacios en archivos YAML, insertar espacios en lugar de tabs y activar los espacios visibles. En VS Code, instala la extensión YAML de Red Hat que proporciona comprobación de sintaxis en tiempo real, validación de esquema (para Kubernetes, GitHub Actions y otros formatos con JSON Schemas publicados) y autocompletado. Añade un archivo .editorconfig a tu proyecto para forzar estas configuraciones en cada miembro del equipo sin importar la configuración local de su editor.
- Ajustes de .editorconfig para YAML: indent_style = space, indent_size = 2, trim_trailing_whitespace = true
- VS Code: instala la extensión YAML (Red Hat) — valida esquema y sintaxis en tiempo real
- IDEs de JetBrains: activa el soporte YAML y establece el nivel de inspección en Warning para errores estructurales
- Vim/Neovim: usa yaml-language-server vía nvim-lspconfig para diagnósticos en línea
- Prettier: formatea YAML de forma consistente — previene la deriva de espacios e indentación entre miembros del equipo
Validación automatizada en CI/CD
Añade un paso de linting de YAML a tu pipeline de CI que se ejecute en cada pull request que toque cualquier archivo .yaml o .yml. yamllint es la herramienta CLI estándar — valida sintaxis, comprueba claves duplicadas, aplica límites de longitud de línea y captura problemas de coerción de cadenas truthy. Configúralo con un archivo .yamllint.yaml en la raíz de tu proyecto y añádelo como hook de pre-commit o como paso de CI que se ejecute antes de cualquier job de despliegue.
Tip
Disciplina de revisión de código
Los diffs de YAML en la revisión de código son engañosamente fáciles de aprobar sin capturar errores. La indentación de dos espacios frente a cuatro parece una preferencia de formato pero cambia la estructura del documento. Una clave movida a un nivel de indentación distinto cambia su bloque padre. Usa el Resaltador de Diffs para Configs JSON/YAML para revisar los cambios de YAML semánticamente — muestra qué claves se añadieron, eliminaron o cambiaron por valor en lugar de por diff de línea bruta, haciendo los cambios estructurales inmediatamente visibles.
Resaltador de Diffs para Configs JSON/YAML
Compara dos archivos de configuración YAML a nivel de ruta de clave para capturar cambios estructurales, claves movidas y actualizaciones de valor — mejor que los diffs de línea bruta para la revisión de infraestructura.
Key takeaways
- La indentación y los caracteres de tab causan la mayoría de los errores de YAML — configura tu editor para usar espacios y mostrar los espacios en blanco.
- Los errores de los parsers de YAML apuntan a dónde falló el parsing, no a dónde se cometió el error — mira siempre 5-10 líneas por encima de la línea reportada.
- Las claves duplicadas son la categoría de error más peligrosa porque parsean con éxito pero sobrescriben valores silenciosamente en tiempo de ejecución.
- Las cadenas sin comillas que contienen dos puntos, almohadillas, asteriscos o llaves se malinterpretan como tokens estructurales de YAML — entrecomíllalas siempre.
- Usa el Validador YAML para errores de sintaxis, el Detector de Claves Duplicadas YAML para sobrescrituras silenciosas y el Validador de Anclas y Alias YAML para problemas de anclas.
- Añade yamllint a tu pipeline de CI y un .editorconfig a tu proyecto para evitar que los errores de YAML lleguen a la revisión de código.
- Los validadores específicos por tipo de archivo (Kubernetes, Docker Compose, GitHub Actions, Ansible) capturan errores de esquema que la validación de sintaxis YAML sola no puede.