Accessibility Audit
Run comprehensive accessibility audit (WCAG 2.1) on Webflow pages - checks buttons, forms, links, focus states, headings, keyboard navigation, and generates detailed reports with fixes. Runs entirely headlessly against a page ID — no Designer connection required. Excludes image alt text (covered by asset-audit skill).
- Skill ID
- webflow/webflow-skills/accessibility-audit
- Publisher
- webflow
- Repository
- webflow-skills
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
webflow/webflow-skills/accessibility-auditInstalls these files- SKILL.md
What this skill tells the agent
Accessibility Audit
Comprehensive WCAG 2.1 accessibility audit for Webflow pages with detailed issue detection and actionable fixes.
Important Note
ALWAYS use Webflow MCP tools for all operations:
- Use Webflow MCP's
webflow_guide_toolto get best practices before starting - Use Webflow MCP's
data_sites_toolwith actionlist_sitesto identify available sites - Use Webflow MCP's
data_sites_toolwith actionget_siteto retrieve site details - Use Webflow MCP's
data_pages_toolwith actionlist_pagesto get all pages and their page IDs - Use Webflow MCP's
data_element_toolwith actionget_all_elements(passing the page ID directly) to get detailed element information - Use Webflow MCP's
data_element_toolwith actionset_attributesto fix accessibility issues - Use Webflow MCP's
element_snapshot_toolto get visual previews of elements — this is a Designer tool and requires a Designer connection if used - DO NOT use any other tools or methods for Webflow operations
- All tool calls must include the required
contextparameter (15-25 words, third-person perspective) - No Designer connection is required for the audit or fixes.
data_element_tooloperates headlessly on any page ID fromlist_pages. Designer is only needed if you choose to useelement_snapshot_toolfor optional visual previews.
Instructions
Phase 1: Site & Page Selection
- Get site information: Use Webflow MCP's
data_sites_toolwith actionlist_sitesto identify target site - Ask for page selection:
- If user provides page ID, use it directly
- Otherwise, use
data_pages_toolwith actionlist_pagesto show available pages - Let user select which page(s) to audit
- Confirm audit scope: Ask user what to check:
- Full audit (all accessibility checks)
- Critical issues only (WCAG Level A)
- Specific categories (forms, buttons, navigation, etc.)
Phase 2: Element Extraction & Analysis
- Extract all elements: Use
data_element_toolwith actionget_all_elements, passing the target page's ID from Phase 1, for detailed analysis — no Designer connection needed
- Set
include_style_properties: trueto check focus styles - Set
include_all_breakpoint_styles: falseto minimize data
- Parse element data: Identify interactive and content elements:
- Buttons (Button, LinkBlock with button role)
- Links (TextLink, Link, LinkBlock)
- Form inputs (Input, Select, Textarea)
- Headings (Heading elements with levels)
- Interactive divs/spans (check for onClick or interactive roles)
- Images (Image elements) - SKIP for this audit
- Extract attributes for each element:
- ARIA attributes (aria-label, aria-describedby, role, tabIndex)
- DOM attributes (id, domId, href, type, placeholder)
- Text content
- Style properties (outline, border for focus states)
- Element metadata (canHaveAttributes, tag name)
Phase 3: Accessibility Checks
Critical Issues (Must Fix - WCAG Level A)
- Icon-only buttons without labels (WCAG 4.1.2)
- Find: Button elements with no text content
- Check: Missing
aria-labeloraria-labelledby - Impact: Screen readers cannot identify button purpose
- Fix: Add
aria-labelattribute with descriptive text
- Form inputs without labels (WCAG 1.3.1)
- Find: Input, Select, Textarea elements
- Check: Missing associated label or
aria-label - Impact: Users don't know what input is for
- Fix: Add
aria-labelor associate with<label>usingid
- Non-semantic click handlers (WCAG 2.1.1)
- Find: Div or Span elements (identified by element type)
- Check: Interactive behavior without proper role/keyboard support
- Impact: Not keyboard accessible, screen readers miss interactivity
- Fix: Add
role="button",tabIndex="0", suggest using real<button>
- Links without destination (WCAG 2.1.1)
- Find: Link elements with no
hrefattribute - Check: Links that only use onClick without href
- Impact: Not keyboard accessible, breaks browser features
- Fix: Add proper
hrefor convert to button
Serious Issues (Should Fix - WCAG Level AA)
- Focus outline removed without replacement (WCAG 2.4.7)
- Find: Elements with
outline: nonestyle - Check: No visible alternative focus indicator
- Impact: Keyboard users can't see focus
- Fix: Add visible focus style (border, box-shadow, background change)
- Missing keyboard handlers (WCAG 2.1.1)
- Find: Elements with onClick handlers
- Check: Missing onKeyDown for Enter/Space keys
- Impact: Not usable with keyboard alone
- Fix: Add keyboard event handlers
- Touch target too small (WCAG 2.5.5)
- Find: Clickable elements (buttons, links)
- Check: Width or height < 44px
- Impact: Hard to tap on mobile devices
- Fix: Increase padding or min-width/min-height to 44px
Moderate Issues (Consider Fixing)
- Heading hierarchy problems (WCAG 1.3.1)
- Find: Heading elements (h1-h6)
- Check: Skipped levels (h1 → h3, skipping h2)
- Impact: Confusing document structure
- Fix: Use proper sequential heading levels
- Positive tabIndex (WCAG 2.4.3)
- Find: Elements with tabIndex > 0
- Check: Disrupts natural tab order
- Impact: Confusing keyboard navigation
- Fix: Use tabIndex="0" or "-1" only, let natural DOM order work
- Role without required attributes (WCAG 4.1.2)
- Find: Elements with ARIA roles
- Check: Missing required ARIA attributes (e.g., role="button" without tabIndex)
- Impact: Incomplete accessibility semantics
- Fix: Add required attributes for role
Phase 4: Issue Categorization & Scoring
- Categorize all findings:
- Critical: Must fix (blocks access)
- Serious: Should fix (significantly impacts usability)
- Moderate: Consider fixing (improves experience)
- Calculate accessibility score (0-100):
- Start at 100
- Critical issue: -10 points each
- Serious issue: -5 points each
- Moderate issue: -2 points each
- Minimum score: 0
- Generate severity summary:
- Total issues found
- Breakdown by severity
- Most common issue types
- Pages/sections most affected
Phase 5: Report Generation
- Create detailed report with specific format: ``` ═══════════════════════════════════════════════════ ACCESSIBILITY AUDIT: [Page Name] ═══════════════════════════════════════════════════
CRITICAL (X issues) ─────────────────── [A11Y] Element: Button "Submit" Issue: Button missing accessible name Location: Form section, element ID: {component: "abc", element: "xyz"} Current: <button><CloseIcon /></button> Fix: Add aria-label="Close" WCAG: 4.1.2 Name, Role, Value
[A11Y] Element: Input field Issue: Form input without label Location: Contact form, element ID: {component: "def", element: "uvw"} Current: <input type="email" /> Fix: Add aria-label="Email address" or associate with <label> WCAG: 1.3.1 Info and Relationships
SERIOUS (X issues) ────────────────── [A11Y] Element: Link "Read more" Issue: Focus outline removed without visible alternative Location: Blog section Current: outline: none Fix: Add visible focus style (e.g., border: 2px solid blue) WCAG: 2.4.7 Focus Visible
MODERATE (X issues) ─────────────────── [A11Y] Element: Heading Issue: Heading hierarchy skipped (h1 → h3) Location: Article section Current: <h3>Subsection</h3> after <h1>Title</h1> Fix: Change to <h2> or add intermediate h2 WCAG: 1.3.1 Info and Relationships
═══════════════════════════════════════════════════ SUMMARY ─────────────────────────────────────────────────── Total Issues: X
- Critical: X issues
- Serious: X issues
- Moderate: X issues
More from webflow
Use this skill in a project
Open any RiverX project, search the Skills panel for webflow/webflow-skills/accessibility-audit, and install it in one click.
