HTML semántico y formulario bien etiquetado: la interfaz que todo agente ya lee
Antes de cualquier herramienta para agentes, existe una interfaz que todos ellos ya leen: el HTML. Etiqueta ligada al campo, botón de verdad, región principal, título, idioma y texto alternativo. Es estable, sirve para el lector de pantalla y para el agente, y no depende de un navegador experimental. En esta clase arreglas la página de ejemplo hasta dejar la verificación en cero.
Objetivo: corregir etiquetas, botón, regiones y alt hasta que arvore.mjs no encuentre ningún problema en tu copia de la página.
01 · Seis arreglos, de la página vieja a la nueva
Haz clic en cada uno. Todos aparecen en la verificación de arvore.mjs.
3Regionesmain, h1Regiones. marca el contenido principal y un
dice de qué trata la página. El agente separa la tarea del menú y del pie de página.
4IdiomalangIdioma. indica en qué idioma está el texto. Los lectores de pantalla pronuncian bien; las herramientas de lectura saben qué están leyendo.5ImagenaltImagen. Toda con contenido recibe un alt que describe lo que muestra. La imagen decorativa lleva alt="" y desaparece del árbol.6Resultadorole=statusResultado. La respuesta del formulario va en un
Haz clic en cada bloque del diagrama para ver qué hace.
Elemento nativo primero: button, label, main. ARIA solo donde el HTML no tiene el elemento correcto.
02 · El formulario arreglado
El fragmento que cambió de antes.html a depois.html. El formulario funciona solo, para personas y para cualquier agente que opera la pantalla.
Fragmento · kit/site/depois.htmlCopiar
<html lang="pt-BR">
…
<main>
<h1>Agendar revisão</h1>
<img src="bike.svg" width="60" height="40" alt="Bicicleta na bancada da oficina">
<form id="agendar" aria-describedby="ajuda">
<p id="ajuda">Escolha o serviço e o dia. A oficina confirma por e-mail.</p>
<label for="nome">Seu nome</label>
<input id="nome" name="nome" autocomplete="name" required>
<label for="servico">Serviço</label>
<select id="servico" name="servico" required>
<option value="">Escolha</option>
<option value="basica">Revisão básica</option>
<option value="completa">Revisão completa</option>
</select>
<label for="data">Data</label>
<input id="data" name="data" type="date" required>
<button type="submit">Agendar</button>
<output id="resultado" role="status" aria-live="polite"></output>
</form>
</main>
Terminal · verificar depois.htmlCopiar
cd ~/projetos/formacao-webmcp-base-v72/kit
node arvore.mjs depois; echo "saída: $?"
Salida capturada (19/10/2026)Error común: arreglar con ARIA en el div
Ejemplo del repositorio
## árvore de acessibilidade · 15 linhas · 415 bytes
- main:
- heading "Agendar revisão" [level=1]
- img "Bicicleta na bancada da oficina"
- paragraph: Escolha o serviço e o dia. A oficina confirma por e-mail.
- text: Seu nome
- textbox "Seu nome"
- text: Serviço
- combobox "Serviço":
- option "Escolha" [selected]
- option "Revisão básica"
- option "Revisão completa"
- text: Data
- textbox "Data"
- button "Agendar"
- status
## conferência · http://127.0.0.1:PORTA/depois.html
problemas: 0
saída: 0
Ahora todo tiene rol y nombre: heading, img con descripción, los tres campos, el button "Agendar" y el status para la respuesta. El árbol creció de 182 a 415 bytes, y la verificación da cero.
Poner role="button" y aria-label en el div en el que se hace clic hace que el árbol muestre un botón, pero no recibe foco con el teclado ni se activa con Enter sin más JavaScript, y no envía el formulario. arvore.mjs sigue marcando <div> clicável que não é botão, a propósito: cámbialo por button.
03 · Tu copia para arreglar
Copia antes.html a una carpeta tuya y verifica: 10 problemas. Después edita la copia hasta llegar a cero. arvore.mjs acepta la ruta de cualquier .html.
- campo #servico sem <label>
- campo #data sem <label>
problemas: 10
saída: 1
Las tres últimas líneas de la revisión de la copia, antes del arreglo. La lista completa está en la lección 2.
04 · Práctica
Dejar la copia en cero y llevar el arreglo a tu sitio.
E1 · Dejar la copia en cero
20 min
Edita /tmp/oficina/antes.html con los seis arreglos, sin mirar depois.html. Ejecuta el arvore.mjs en cada cambio y mira cómo se acorta la lista.
Listo cuando:node arvore.mjs /tmp/oficina/antes.html → problemas: 0 y saída: 0.
E2 · El formulario sigue funcionando
5 min
Ejecuta el tres-jeitos.mjs en tu copia arreglada: el agente tiene que encontrar los tres campos y el botón por el nombre y leer el resultado.
Listo cuando:node tres-jeitos.mjs /tmp/oficina/antes.html → línea 2 · operar con controles na árvore · 0 sem nome y saída: 0.
E3 · Un arreglo en tu sitio
30 min
En la página de tu sitio de la lección 2, aplica los arreglos (empieza por las etiquetas y el botón) en una copia local o en un entorno de pruebas. Publica cuando la revisión baje.
Listo cuando:node arvore.mjs en la página (copia o publicada) muestra problemas: menor que el número que anotaste en la lección 2.
05 · Prueba de la lección
Pregunta 1 de 4
¿Cuál es la forma correcta de dar nombre a un campo de texto de un formulario?competencia
AUn elemento label ligado al campo con el forBUn placeholder con el nombre del campo dentroCUn atributo title en el input con el nombreDUn texto en negrita justo encima del campo
Correcto
El label ligado con el for se convierte en el nombre accesible y queda visible. El placeholder desaparece al escribir y un texto suelto encima del campo no queda ligado a él.
No es esa
El label ligado con el for se convierte en el nombre accesible y queda visible. El placeholder desaparece al escribir y un texto suelto encima del campo no queda ligado a él.Repasar: Seis arreglos, de la página vieja a la nueva
Pregunta 2 de 4
¿Por qué cambiar el div clicable por un button, en vez de poner role="button" en el div?
APorque role="button" está prohibido por la spec de WebMCPBPorque el div hace la página mucho más lenta en el celularCPorque el agente solo lee elementos que tienen id propioDPorque button ya trae foco, teclado y envío
Correcto
Elemento nativo primero: button recibe foco, se activa con Enter y envía el form. El role solo cambia lo que muestra el árbol; lo demás tendrías que programarlo.
No es esa
Elemento nativo primero: button recibe foco, se activa con Enter y envía el form. El role solo cambia lo que muestra el árbol; lo demás tendrías que programarlo.Repasar: El formulario arreglado
Pregunta 3 de 4
La respuesta del formulario aparece en un div cualquiera. ¿Qué cambia al usar
ANada para el agente; solo cambia el color del texto en la pantallaBEl agente encuentra el resultado por el rol statusCEl formulario pasa a ser una tool de WebMCP registradaDEl resultado pasa a ir al servidor MCP del sitio
Correcto
status es un rol del árbol: el agente lee ahí lo que pasó después del clic. No tiene nada de WebMCP; es HTML estable.
¿Este arreglo de HTML depende de un origin trial o de un flag en Chrome?competencia
ASí, solo funciona con el token del origin trial publicadoBSí, necesita el flag enable-webmcp-testing activadoCNo: es HTML estable, leído por agentesDSolo en Edge 150, que tiene el origin trial abierto
Correcto
Etiqueta, botón, regiones y alt son HTML de siempre. Es la base estable; lo experimental es el WebMCP.