Install
$ agentstack add skill-mteelokee-rgaa-accessibility-audit-rgaa-links ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
RGAA Links Accessibility Audit (Theme 6)
Audits a web page against the 2 criteria of RGAA v4.1.2 Theme 6: Links.
Audit procedure
Step 1: Gather link data
(() => {
const links = [];
document.querySelectorAll('a[href], [role="link"]').forEach(el => {
const img = el.querySelector('img');
const svg = el.querySelector('svg');
const ariaLabel = el.getAttribute('aria-label');
const ariaLabelledby = el.getAttribute('aria-labelledby');
const title = el.getAttribute('title');
const textContent = el.textContent.trim();
// Compute accessible name
let accessibleName = '';
if (ariaLabelledby) {
const ids = ariaLabelledby.split(/\s+/);
accessibleName = ids.map(id => document.getElementById(id)?.textContent.trim() || '').join(' ');
} else if (ariaLabel) {
accessibleName = ariaLabel;
} else if (textContent) {
accessibleName = textContent;
} else if (img && img.alt) {
accessibleName = img.alt;
} else if (title) {
accessibleName = title;
}
links.push({
href: el.getAttribute('href')?.substring(0, 120),
tag: el.tagName.toLowerCase(),
visibleText: textContent.substring(0, 80),
accessibleName: accessibleName.substring(0, 120),
hasImage: !!img,
imgAlt: img?.getAttribute('alt'),
hasSvg: !!svg,
svgTitle: svg?.querySelector('title')?.textContent,
ariaLabel: ariaLabel,
ariaLabelledby: ariaLabelledby,
title: title,
isEmptyLink: !accessibleName.trim(),
context: el.closest('p, li, td, th, h1, h2, h3, h4, h5, h6')?.textContent.trim().substring(0, 150)
});
});
return JSON.stringify(links.slice(0, 80), null, 2);
})()
Step 2: Evaluate criteria
Criterion 6.1 – Every link is explicit (except in special cases).
A link is explicit if its purpose can be determined from one of the following:
- The link text alone (best)
- The link text combined with its context: the enclosing sentence, paragraph, list item, table cell, or the associated heading, plus aria-label or title attribute
Check for problematic patterns:
- Generic text: "click here", "read more", "learn more", "link", "here" → ❌ unless context makes it clear
- Image-only links where the alt text is generic → ❌
- Links whose visible text and aria-label convey different destinations → ⚠️ Warning (aria-label should start with the visible text per WCAG 2.5.3)
Special cases: ambiguity is acceptable if the link context (sentence, paragraph, list item, heading, table cell, or table headers) makes the destination clear.
Criterion 6.2 – Every link has a non-empty accessible name.
Check that every ` and [role="link"]` element has a computed accessible name that is not empty. Failing patterns:
- `` (empty link)
- `` (image link with empty alt, no other text)
...without aria-label or `` in SVG- `` (only empty elements)
Step 3: Generate report
List all problematic links with their current accessible name (or lack thereof), the issue detected, and a recommended fix. Group issues by type:
- Links with no accessible name at all (critical)
- Links with generic/ambiguous text (important)
- Links with mismatched visible text and aria-label (warning)
WCAG references: 9.1.1.1 (A), 9.2.4.4 (A), 9.2.5.3 (A), 9.4.1.2 (A)
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: MTeelokee
- Source: MTeelokee/rgaa-accessibility-audit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.