Catalog/Dialog has no accessible name
SEO issue

Dialog has no accessible name: how to fix it

A dialog without an accessible name confuses screen readers and AI agents. Learn how to name modals correctly and pass Agent-readiness checks.

95
audited sites affected

What it means

A dialog is an interactive overlay (modal, popup, or panel) that lacks an accessible name. The name can come from an explicit aria-label or aria-labelledby attribute, or from visible text content inside the dialog. Without it, screen readers announce the dialog as an unnamed region and crawlers can't identify its purpose.

Why it matters

An unnamed dialog breaks the DOM tree that Googlebot and screen readers both consume. This can cause the dialog's content to be treated as boilerplate or duplicate rather than main content, reducing its indexing weight. For AI retrieval, unnamed dialogs are harder to extract and cite because the system can't determine what the overlay is actually about.

How to fix it

  1. Add an aria-label attribute with a descriptive name: <div role="dialog" aria-label="Newsletter signup">...
  2. Or use aria-labelledby pointing to the heading that names the dialog: <div role="dialog" aria-labelledby="dialog-title">
  3. Ensure the dialog has visible text (not just an icon) so the accessible name is also visible to users.
  4. Verify the dialog is focusable and keyboard-operable (tab to enter, Escape to dismiss).

Example

Before — HTML
<div role="dialog">
  <button>×</button>
  ...
</div>
After — HTML
<div role="dialog" aria-labelledby="dlg-title">
  <h2 id="dlg-title">Newsletter signup</h2>
  <button aria-label="Close">×</button>
  ...
</div>

Name the dialog with aria-labelledby (pointing to its heading) or aria-label so screen readers and agents can announce what it is.

When it's not a problem

If the dialog is purely decorative (e.g., a loading spinner or a full-screen background overlay with no interactive content), you can use aria-hidden="true" or role="presentation" and the warning becomes a false alarm. Also fine when the dialog is triggered by a button and the button itself carries the accessible name via aria-label or visible text.

How Crawlinx detects it

We check elements with role="dialog" for an accessible name from aria-label, aria-labelledby, or inner text. Dialogs with none are counted and reported.

How common is it?

95 audited sites in our corpus currently show this issue. The breakdowns below show which platforms, gatekeepers, verticals and countries are most exposed.

Breakdowns

CMS

View breakdown →

Category

View breakdown →

Related
Catalog Invalid ARIA role Control has no accessible name Category CMS Heading levels skip a level No llms.txt for AI agents No main landmark for AI agents

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →