# Interactive elements carry accessible names for AI agents

- **Pattern:** `ab-002624` (`geo-readiness.ai-readable-structure.agent-accessible-interactives`)
- **Severity:** low
- **Lifecycle:** active
- **Last modified:** 2026-06-10
- **Canonical URL:** https://auditbuffet.com/patterns/ab-002624
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-002624)

## Why it matters

This check is about agent operability, not search citation. AI agents that operate a browser on a user's behalf navigate your UI the way screen readers do. OpenAI's developer guidance is explicit: "ChatGPT Atlas uses ARIA tags—the same labels and roles that support screen readers—to interpret page structure and interactive elements. To improve compatibility, follow WAI-ARIA best practices." Google's generative-AI guide likewise describes browser agents "inspecting the DOM structure, and interpreting the accessibility tree." An icon-only button with no accessible name is invisible to those agents: a user who asks their assistant to sign up, check pricing, or run your product hits a wall your human visitors never see. The same fix serves disabled users — accessibility work now does double duty.

## Severity rationale

Low because unnamed controls degrade agent-driven interactions on the affected elements without affecting whether the site's content is found or cited.

## Remediation

Give every interactive element an accessible name. Native semantics count — `<button>Submit</button>` is already named; the failures are icon-only buttons, unlabeled inputs, and clickable divs.

```tsx
// Icon-only button: name it
<button aria-label="Copy audit prompt">
  <CopyIcon aria-hidden="true" />
</button>

// Input: associate a label
<label htmlFor="email">Email</label>
<input id="email" type="email" />
```

For full coverage (roles, states, keyboard interaction), the Accessibility WCAG audit goes much deeper — this check covers only the naming floor agents need.

## Detection

- **ID:** `agent-accessible-interactives`
- **Severity:** `low`
- **What to look for:** Scan component and page source under `src/app` and `src/components` (or the framework equivalent) for interactive element **source sites**: each distinct `<button>`, `<a>`, `<input>`, `<select>`, `<textarea>`, or element with an interactive role/onClick in the source code counts once, regardless of how many times it renders. For each source site, determine whether it has an accessible name: visible text content, `aria-label`, `aria-labelledby`, an associated `<label>`, `alt` on an image button, or a `title` as last resort. Native semantics count — a `<button>` with text children is named. Count-and-report: "X of Y interactive element source sites have accessible names."
- **Pass criteria:** Count all interactive element source sites and the subset with accessible names. At least 90% must have accessible names (a house threshold, not a vendor number — vendors say "follow WAI-ARIA best practices" without quantifying). Report even on pass: `"Y interactive source sites scanned, X named (Z%) — unnamed: [list or none]."`
- **Fail criteria:** More than 10% of interactive element source sites lack accessible names, or any primary conversion control (sign-up, checkout, main CTA) is unnamed regardless of the percentage. Report: `"X of Y interactive source sites lack accessible names (Z%, threshold 90%): [element — file]"`.
- **Do NOT pass when:** the percentage clears 90% but the main CTA is an icon-only or image-only control with no name — the elements agents most need are weighted by importance, not just count.
- **Skip (N/A) when:** The project has no interactive UI (static content site, API-only project). Note: `"No interactive elements found — agent operability not applicable."`
- **Detail on fail:** Frame as agent operability, never search visibility: `"3 of 14 interactive source sites are unnamed icon-only buttons (copy, share, menu) — per OpenAI's guidance, Atlas-style agents interpret controls through ARIA labels and roles; these are invisible to them (and to screen readers)."`
- **Cross-reference:** This check is the naming floor only. The Accessibility WCAG audit covers roles, states, keyboard interaction, and contrast in depth — fixes there satisfy this check automatically.
- **Remediation:** Name the unnamed controls:

  ```tsx
  <button aria-label="Run the free Stack Scan">
    <PlayIcon aria-hidden="true" />
  </button>
  ```

---

## External references

- external openai-publishers-faq — https://help.openai.com/en/articles/12627856-publishers-and-developers-faq
- external google-ai-optimization-guide — https://developers.google.com/search/docs/fundamentals/ai-optimization-guide
- external wai-aria — https://www.w3.org/WAI/ARIA/apg/

Taxons: findability

HTML version: https://auditbuffet.com/patterns/ab-002624
