AgentStack
SKILL verified MIT Self-run

Rgaa Information Structure

skill-mteelokee-rgaa-accessibility-audit-rgaa-information-structure · by MTeelokee

Audit a web page for RGAA v4.1.2 Theme 9 – Information structure accessibility compliance. Checks that headings are used to structure information, the document structure is coherent (header/nav/main/footer landmarks), lists use proper markup (ul/ol/dl), and quotations are correctly marked up. Use this skill when someone asks to check heading structure, landmark regions, semantic HTML structure, R…

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

Install

$ agentstack add skill-mteelokee-rgaa-accessibility-audit-rgaa-information-structure

✓ 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 Information Structure? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

RGAA Information Structure Accessibility Audit (Theme 9)

Audits a web page against the 4 criteria of RGAA v4.1.2 Theme 9: Information Structure.

Audit procedure

Step 1: Gather structural data

(() => {
  const structure = {};

  // Headings hierarchy
  structure.headings = [];
  document.querySelectorAll('h1,h2,h3,h4,h5,h6,[role="heading"]').forEach(el => {
    const level = el.tagName?.match(/H(\d)/)?.[1] || el.getAttribute('aria-level');
    structure.headings.push({
      level: parseInt(level),
      text: el.textContent.trim().substring(0, 80),
      tag: el.tagName.toLowerCase(),
      ariaLevel: el.getAttribute('aria-level'),
      isHidden: getComputedStyle(el).display === 'none' || getComputedStyle(el).visibility === 'hidden',
      ariaHidden: el.getAttribute('aria-hidden')
    });
  });

  // Landmark regions
  structure.landmarks = [];
  const landmarkSelectors = {
    'banner': 'header, [role="banner"]',
    'navigation': 'nav, [role="navigation"]',
    'main': 'main, [role="main"]',
    'contentinfo': 'footer, [role="contentinfo"]',
    'complementary': 'aside, [role="complementary"]',
    'search': '[role="search"], search',
    'form': '[role="form"]',
    'region': '[role="region"]'
  };

  Object.entries(landmarkSelectors).forEach(([type, selector]) => {
    document.querySelectorAll(selector).forEach(el => {
      structure.landmarks.push({
        type: type,
        tag: el.tagName.toLowerCase(),
        role: el.getAttribute('role'),
        ariaLabel: el.getAttribute('aria-label'),
        ariaLabelledby: el.getAttribute('aria-labelledby'),
        text: el.textContent.trim().substring(0, 40)
      });
    });
  });

  // Lists
  structure.lists = {
    ul: document.querySelectorAll('ul').length,
    ol: document.querySelectorAll('ol').length,
    dl: document.querySelectorAll('dl').length,
    liOutsideList: document.querySelectorAll('li:not(ul > li):not(ol > li):not(menu > li)').length,
    dtOutsideDl: document.querySelectorAll('dt:not(dl > dt)').length,
    ddOutsideDl: document.querySelectorAll('dd:not(dl > dd)').length,
    roleList: document.querySelectorAll('[role="list"]').length,
    roleListitem: document.querySelectorAll('[role="listitem"]').length
  };

  // Quotations
  structure.quotations = {
    blockquote: document.querySelectorAll('blockquote').length,
    q: document.querySelectorAll('q').length,
    cite: document.querySelectorAll('cite').length
  };

  return JSON.stringify(structure, null, 2);
})()

Step 2: Evaluate criteria

Criterion 9.1 – Information is structured by appropriate use of headings.

Check heading hierarchy:

  • There should be at least one `` on the page
  • Heading levels should not skip (e.g., h1 → h3 without h2)
  • Headings should reflect the actual content organization
  • Content sections should start with a heading
  • Headings should not be empty

Criterion 9.2 – Document structure is coherent.

Check landmarks/sectioning:

  • The page has a ` or [role="banner"]`
  • The page has a ` or [role="navigation"]` (at least one)
  • The page has a ` or [role="main"]` (exactly one)
  • The page has a ` or [role="contentinfo"]`
  • Multiple landmarks of the same type have distinguishing aria-label values
  • The `` is not nested inside another landmark (except the document itself)
  • Content outside landmarks should be minimal

Criterion 9.3 – Lists are correctly structured.

  • Unordered lists use ` > `
  • Ordered lists use ` > `
  • Definition lists use ` > + `
  • No ` outside of , , or `
  • No ` or outside of `
  • [role="list"] contains [role="listitem"] children
  • Visual lists (items separated by line breaks or commas) that represent a list of items should use proper list markup

Criterion 9.4 – Quotations are correctly marked up.

  • Block quotations use ``
  • Inline quotations use ``
  • ` and ` are not used for non-quotation purposes (like indentation)
  • The cite attribute references the source when applicable

Step 3: Generate report

Present the heading tree visually (indented by level), list all landmarks, and flag any structural issues.

WCAG references: 9.1.3.1 (A), 9.2.4.1 (A), 9.2.4.6 (AA), 9.2.4.10 (AAA)

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.