anchor-has-content
anchor-has-content rule
Keywords: anchor-has-content, accessibility, ESLint rule, WCAG, a11y, React accessibility
Require content in anchor elements. This rule is part of eslint-plugin-react-a11y and provides LLM-optimized error messages with fix suggestions.
Quick Summary
| Aspect | Details |
|---|---|
| WCAG Criterion | 2.4.4 Link Purpose |
| Severity | Error/Warning (accessibility) |
| Auto-Fix | 💡 Suggestions available |
| Category | Accessibility |
| ESLint MCP | ✅ Optimized for ESLint MCP integration |
Rule Details
This rule helps ensure WCAG 2.4.4 compliance by enforcing: Require content in anchor elements
Why This Matters
| Issue | Impact | Standard |
|---|---|---|
| ♿ Accessibility | Screen reader and assistive technology users affected | WCAG 2.4.4 |
| ⚖️ Legal | ADA/Section 508 compliance risk | Legal Requirement |
| 🔍 SEO | Search engines prefer accessible sites | Best Practice |
Examples
❌ Incorrect
// Violation of anchor-has-content
// See rule source for specific examples✅ Correct
// Compliant with anchor-has-content
// See rule source for specific examplesConfiguration
// eslint.config.js
{
rules: {
'react-a11y/anchor-has-content': 'error'
}
}WCAG 2.1 Compliance
This rule helps satisfy:
- 2.4.4 Link Purpose: Require content in anchor elements
Related Rules
- See RULES.md for all accessibility rules
Further Reading
- WCAG 2.4.4 - WCAG guidelines
- WebAIM - Accessibility resources
- MDN Accessibility - MDN documentation
Version
This rule is available in eslint-plugin-react-a11y v1.0.0+
Known False Negatives
The following patterns are not detected due to static analysis limitations:
Dynamic Variable References
Why: Static analysis cannot trace values stored in variables or passed through function parameters.
// ❌ NOT DETECTED - Prop from variable
const propValue = computedValue;
<Component prop={propValue} /> // Computation not analyzedMitigation: Implement runtime validation and review code manually. Consider using TypeScript branded types for validated inputs.
Imported Values
Why: When values come from imports, the rule cannot analyze their origin or construction.
// ❌ NOT DETECTED - Value from import
import { getValue } from './helpers';
processValue(getValue()); // Cross-file not trackedMitigation: Ensure imported values follow the same constraints. Use TypeScript for type safety.