Saltar al contenido
Aback Tools Logo

Cómo Detectar y Corregir Errores de YAML: Sintaxis, Indentación y Validación

Cómo detectar y corregir errores de YAML: por qué la indentación y los tabs rompen el parsing, cómo leer los mensajes del parser, peligros de las claves duplicadas, anclas y alias, y un flujo de validación en cinco pasos para Kubernetes, Docker Compose y archivos de CI.

DH
Tutorials & How-Tos12 min de lectura2,700 palabras

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.

#1Causa de errorLa indentación siempre es la culpable
0Tabs permitidosLa especificación los prohíbe como indentación
< 1sTiempo de validaciónLocal en el navegador, sin subidas

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

Los mensajes de error de YAML varían significativamente según el parser. PyYAML, js-yaml, gopkg.in/yaml.v3 de Go y Psych de Ruby producen todas redacciones distintas para el mismo error subyacente. Las categorías de error de esta guía son independientes del lenguaje — una vez entiendes la categoría, puedes corregir el problema sin importar qué parser uses.

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

Muchos desarrolladores pegan YAML de sitios de documentación, mensajes de Slack o respuestas de Stack Overflow. Estas fuentes convierten frecuentemente espacios en tabs durante el copiado. Pega siempre primero en un editor de texto plano o en un validador online cuando trabajes con YAML copiado.

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 errorMensaje típico del parserCausa raízCorrección
Indentación"could not find expected :"Bloque indentado en nivel incorrectoAlinear al padre + 2 espacios
Carácter de tab"character that cannot start token"Tab usado en lugar de espacioReemplazar todos los tabs por espacios
Dos puntos sin comillas"mapping values not allowed here"Dos puntos en valor de cadena desnudoEntrecomillar el valor
Clave duplicadaSilencioso o definido por implementaciónLa misma clave aparece dos veces en el bloqueEliminar o renombrar el duplicado
Alias no definido"found undefined alias"* referencia a un & ancla no declaradaDeclarar el ancla antes del alias
Escalar multilíneaEl parser se detiene a mitad de bloqueIndicador de bloque escalar incorrectoUsar | para literal, > para plegado
Coerción booleanaTipo incorrecto en tiempo de ejecuciónyes/no/on/off en modo YAML 1.1Entrecomillar 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.

- Mejor práctica de interpretación de errores de YAML

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

Al depurar, reduce el archivo al mínimo que aún reproduzca el error. Comenta o elimina bloques grandes hasta que el error desaparezca, luego vuelve a añadir el último bloque eliminado para aislar la sección exacta. El [Validador YAML](/tools/data/validators/yaml-validator) lo hace rápido — pega un archivo parcial para comprobarlo sin ejecutar ninguna herramienta local.

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.

1

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.

2

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.

3

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.

4

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.

5

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.

Open tool

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

Las claves duplicadas en ConfigMaps y Secrets de Kubernetes son particularmente peligrosas. El YAML se parsea con éxito, kubectl apply acepta el recurso, pero solo uno de los valores duplicados se almacena. El valor descartado causa una mala configuración silenciosa en el pod que lo consume. Ejecuta siempre el [Detector de Claves Duplicadas YAML](/tools/data/validators/yaml-duplicate-key-detector) antes de aplicar YAML de infraestructura.

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

Para proyectos específicos de Kubernetes, combina yamllint para sintaxis YAML con kubeval o kubeconform para validación de esquema. Las dos herramientas cubren categorías de error distintas: yamllint captura problemas de espacios y sintaxis, mientras que kubeval captura nombres de campo incorrectos, campos requeridos faltantes y desajustes de tipo contra el esquema de la API de Kubernetes.

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.

Open tool

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.

Preguntas frecuentes

Indentation mistakes are by far the most common cause - YAML uses whitespace to define structure, so a block indented by three spaces instead of two creates a completely different document than intended. The second most common cause is tabs: the YAML spec forbids tab characters as indentation, but many text editors insert them silently. After those two, missing colons, unquoted special characters, and duplicate keys account for the majority of YAML parsing failures encountered in real-world configs.

The Aback Tools YAML Validator processes your document entirely in your browser with no upload required. Paste your YAML, click Validate, and every error is reported with a line number and a description of what the parser expected. For deeper audits - finding duplicate keys that pass basic validation, or checking anchor and alias references - the YAML Duplicate Key Detector and YAML Anchors and Aliases Validator on the same platform cover those categories.

YAML parsers report the line where they gave up trying to interpret the document, not always the line where the original mistake was made. For example, if you omit a closing colon on line 15, the parser may not notice until line 20 when the next key arrives in an unexpected context. Always look at the 5-10 lines above the reported error line to find the actual source of the problem. An indentation error on a parent block will cascade and surface as an error on a child key lines later.

Yes, and they are one of the hardest bugs to spot because tabs and spaces look identical in most editors. The YAML specification explicitly forbids tab characters for indentation - only space characters (U+0020) are valid. If your editor is configured to expand tabs to spaces, you are safe. If it inserts literal tab characters, the YAML parser will throw a "found character that cannot start any token" or similar error. Enable visible whitespace in your editor or use a validator to catch this instantly.

This error almost always means a colon was placed where the parser did not expect a mapping key. The most frequent cause is an unquoted string value that contains a colon - for example, writing url: https://example.com:8080 without quotes causes the parser to interpret 8080 as a mapping key inside the value. Fix it by quoting the value: url: "https://example.com:8080". A stray colon on a comment-looking line or a misindented key also triggers this error.

A duplicate key error occurs when the same key appears more than once in the same mapping block. The YAML spec says behaviour is undefined for duplicate keys, so different parsers handle it differently: some throw an error, others silently keep the last value, and others keep the first. The dangerous case is silent overwriting - your file parses without an error, but one of the values is ignored. Use the YAML Duplicate Key Detector to find these before they cause runtime bugs in production configs.

This error means the parser expected a colon to separate a mapping key from its value but found something else. The most common cause is a string key that contains special characters (like #, *, :, or &) without being quoted. Wrap the key in double quotes: "key:with:colons": value. A missing colon after a block mapping indicator or a key on a flow mapping line that was not closed before the next key also triggers this message. Check the reported line and the line immediately above it.

Yes. GitHub Actions parses workflow YAML files before executing any jobs. A syntax error in a workflow file causes the run to fail immediately at the parse stage with an "Invalid workflow file" message that references the problematic line. Tab-versus-space errors and misaligned steps are the most common culprits in Action workflows. Run your workflow YAML through the Aback Tools YAML Validator before pushing, or use the GitHub Actions Workflow Validator for workflow-specific structural checks beyond basic YAML syntax.

ShareXLinkedIn