ARIA Landmark Auditor avatar

ARIA Landmark Auditor

Pricing

Pay per usage

Go to Apify Store
ARIA Landmark Auditor

ARIA Landmark Auditor

Audit one public page for semantic HTML and ARIA landmark structure. Checks main, navigation, banner, contentinfo, repeated unlabeled landmarks, score, and accessibility recommendations.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Sanskar Jaiswal

Sanskar Jaiswal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

Fetches one public page and audits its semantic HTML and ARIA landmark structure. It checks for a single main landmark, repeated landmarks that need accessible labels, and duplicate banner or contentinfo landmarks.

Use cases

  • Accessibility QA for page templates, product pages, landing pages, and checkout flows.
  • SEO and technical QA during site launches or migrations.
  • Scheduled monitoring for CMS templates where landmark regressions can affect many pages.
  • Developer-tool pipelines that need one structured JSON result per page.

Input

FieldTypeRequiredDescription
startUrlstringyesPublic HTTP or HTTPS page URL to audit. Credentials and private network targets are rejected.
timeoutSecondsintegernoPage request timeout from 3 to 30 seconds. Default is 10.
maxLandmarksintegernoMaximum landmark detail objects to include in output. Default is 100.

Output

The actor pushes one dataset item per run.

FieldTypeDescription
inputUrlstringOriginal URL from input.
normalizedInputUrlstringInput URL after adding a default HTTPS scheme if omitted.
finalUrlstringFinal fetched URL after safe redirects.
statusinteger or nullHTTP status code, or null when the fetch failed.
okbooleanTrue when the page fetched successfully and scored at least 90.
checkedAtstringISO timestamp for the audit.
landmarkCountintegerTotal semantic or ARIA landmarks found.
mainCountintegerCount of main or role="main" landmarks.
navigationCountintegerCount of nav or role="navigation" landmarks.
bannerCountintegerCount of header or role="banner" landmarks.
contentinfoCountintegerCount of footer or role="contentinfo" landmarks.
complementaryCountintegerCount of aside or role="complementary" landmarks.
searchCountintegerCount of role="search" landmarks.
formLandmarkCountintegerCount of role="form" landmarks.
regionCountintegerCount of role="region" landmarks.
unlabeledRepeatedCountintegerRepeated navigation, complementary, form, region, or search landmarks without aria-label or aria-labelledby.
landmarksarraySampled landmark objects with tag, role, explicit role, label, id, and class name.
unlabeledRepeatedLandmarksarraySampled repeated landmarks that need labels.
scoreintegerAccessibility readiness score from 0 to 100.
gradestringLetter grade from A to F.
issuesarrayHuman-readable problems found.
recommendationsarrayActionable fixes.
errorstring or nullFetch or validation error, if any.

Example input

{
"startUrl": "https://example.com",
"timeoutSeconds": 10,
"maxLandmarks": 100
}

Example output

{
"inputUrl": "https://example.com",
"normalizedInputUrl": "https://example.com/",
"finalUrl": "https://example.com/",
"status": 200,
"ok": false,
"checkedAt": "2026-07-17T00:00:00.000Z",
"landmarkCount": 4,
"mainCount": 1,
"navigationCount": 2,
"bannerCount": 1,
"contentinfoCount": 0,
"complementaryCount": 0,
"searchCount": 0,
"formLandmarkCount": 0,
"regionCount": 0,
"unlabeledRepeatedCount": 1,
"landmarks": [
{ "tag": "nav", "role": "navigation", "explicitRole": null, "label": "Primary", "id": null, "className": null }
],
"unlabeledRepeatedLandmarks": [
{ "tag": "nav", "role": "navigation", "explicitRole": null, "label": null, "id": null, "className": null }
],
"score": 90,
"grade": "A",
"issues": ["1 repeated landmark(s) lack accessible labels"],
"recommendations": ["Add aria-label or aria-labelledby to repeated navigation, search, form, complementary, or region landmarks."],
"error": null
}

Security

This actor only fetches public HTTP and HTTPS URLs. It rejects URL credentials, localhost and private IP literals, hostnames that resolve to private IP ranges, and redirects to private targets. Response bodies are capped at 2 MB.

Pricing

EventSuggested priceNotes
Actor start$0.005Charged once per run.
Page audited$0.01Charged per dataset item pushed.

FAQ

Does this run a browser?

No. It fetches HTML and parses landmark elements and roles. This keeps runs fast and inexpensive.

Does it validate every WCAG rule?

No. It focuses on landmark structure. Use it alongside broader accessibility scanners when you need full WCAG coverage.

Can it audit private staging sites?

No. Private network targets are blocked for SSRF safety. Use public staging URLs only.

What should a good page have?

Most pages should have one main landmark and clear labels for repeated navigation, search, form, complementary, or region landmarks.