AgentStack
SKILL verified MIT Self-run

Rgaa Links

skill-mteelokee-rgaa-accessibility-audit-rgaa-links · by MTeelokee

Audit a web page for RGAA v4.1.2 Theme 6 – Links accessibility compliance. Checks that every link is explicit (its purpose can be understood from its text alone or from context) and that every link has a non-empty accessible name. Use this skill when someone asks to check link accessibility, verify RGAA Theme 6, audit link texts, or check for empty or ambiguous links on a website.

No reviews yet
0 installs
13 views
0.0% view→install

Install

$ agentstack add skill-mteelokee-rgaa-accessibility-audit-rgaa-links

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No 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.

Are you the author of Rgaa Links? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

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:

  1. Links with no accessible name at all (critical)
  2. Links with generic/ambiguous text (important)
  3. 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.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.