ARIA Landmark Auditor
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
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
| Field | Type | Required | Description |
|---|---|---|---|
startUrl | string | yes | Public HTTP or HTTPS page URL to audit. Credentials and private network targets are rejected. |
timeoutSeconds | integer | no | Page request timeout from 3 to 30 seconds. Default is 10. |
maxLandmarks | integer | no | Maximum landmark detail objects to include in output. Default is 100. |
Output
The actor pushes one dataset item per run.
| Field | Type | Description |
|---|---|---|
inputUrl | string | Original URL from input. |
normalizedInputUrl | string | Input URL after adding a default HTTPS scheme if omitted. |
finalUrl | string | Final fetched URL after safe redirects. |
status | integer or null | HTTP status code, or null when the fetch failed. |
ok | boolean | True when the page fetched successfully and scored at least 90. |
checkedAt | string | ISO timestamp for the audit. |
landmarkCount | integer | Total semantic or ARIA landmarks found. |
mainCount | integer | Count of main or role="main" landmarks. |
navigationCount | integer | Count of nav or role="navigation" landmarks. |
bannerCount | integer | Count of header or role="banner" landmarks. |
contentinfoCount | integer | Count of footer or role="contentinfo" landmarks. |
complementaryCount | integer | Count of aside or role="complementary" landmarks. |
searchCount | integer | Count of role="search" landmarks. |
formLandmarkCount | integer | Count of role="form" landmarks. |
regionCount | integer | Count of role="region" landmarks. |
unlabeledRepeatedCount | integer | Repeated navigation, complementary, form, region, or search landmarks without aria-label or aria-labelledby. |
landmarks | array | Sampled landmark objects with tag, role, explicit role, label, id, and class name. |
unlabeledRepeatedLandmarks | array | Sampled repeated landmarks that need labels. |
score | integer | Accessibility readiness score from 0 to 100. |
grade | string | Letter grade from A to F. |
issues | array | Human-readable problems found. |
recommendations | array | Actionable fixes. |
error | string or null | Fetch 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
| Event | Suggested price | Notes |
|---|---|---|
| Actor start | $0.005 | Charged once per run. |
| Page audited | $0.01 | Charged 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.