Automated Scan Tools — Complete Guide
In this tutorial, you will learn about Automated Scan Tools. We cover key concepts, practical examples, and best practices to help you master this topic.
Automated scan tools are the first phase of any Accessibility audit, using axe-core, Lighthouse, and WAVE to rapidly identify technical violations across all in-scope pages before manual evaluation begins.
What You'll Learn
You will configure automated scans for audit use, batch scan multiple pages, filter results by WCAG criteria, interpret findings in audit context, and export results for report integration.
Why It Matters
Automated scans provide the foundation of an audit. They catch technical violations (missing alt text, insufficient contrast, missing labels) that would waste manual testing time. They also provide quantitative metrics for tracking improvement.
Real-World Use
An auditor scans 30 pages with axe-core CLI in a batch script. The scan completes in 3 minutes, finding 142 violations across all pages. The auditor groups violations by type, identifies the 5 most common patterns, and begins manual testing with this knowledge.
Automated Scan Workflow
flowchart TD A[URL List] --> B[Batch Scan] B --> C[axe-core] B --> D[Lighthouse] B --> E[WAVE] C --> F[Aggregate Results] D --> F E --> F F --> G[Group by Pattern] G --> H[Identify Common Issues] H --> I[Manual Testing Focus]
Batch Scanning
Create a script that runs automated scans across all in-scope URLs and aggregates results.
#!/bin/bash
# Batch scan script for audit
URLS=(
"https://example.com"
"https://example.com/about"
"https://example.com/products"
"https://example.com/contact"
)
for url in "${URLS[@]}"; do
echo "Scanning: $url"
npx axe "$url" --save "results/$(echo $url | sed 's/[^a-zA-Z0-9]/_/g').json"
done
// Aggregate results across multiple pages
const fs = require('fs');
const path = require('path');
function aggregateResults(resultsDir) {
const files = fs.readdirSync(resultsDir);
const allViolations = {};
files.forEach(file => {
const data = JSON.parse(fs.readFileSync(path.join(resultsDir, file)));
data.violations.forEach(v => {
if (!allViolations[v.id]) {
allViolations[v.id] = {
rule: v.id,
help: v.help,
impact: v.impact,
occurrences: 0,
pages: []
};
}
allViolations[v.id].occurrences++;
allViolations[v.id].pages.push({
url: data.url,
selector: v.nodes[0]?.target?.join(' ')
});
});
});
return Object.values(allViolations).sort((a, b) => b.occurrences - a.occurrences);
}
const aggregated = aggregateResults('./results');
console.table(aggregated.map(r => ({
rule: r.rule,
occurrences: r.occurrences,
impact: r.impact
})));
<!-- Automated scan finding example -->
<!-- axe-core would flag this -->
<button class="icon-btn">
<span class="icon">X</span>
</button>
<!-- Missing accessible name -->
Common Mistakes
- Running scans only on the homepage
- Not configuring tool rules to match audit scope
- Ignoring the context of automated findings
- Not deduplicating issues across pages
- Saving results without metadata (URL, date, tool version)
- Running scans before pages fully load (SPA issues)
- Not documenting which tool found which issue
Practice and Challenge
Practice 1: Write a bash script to batch scan 5 URLs with axe-core. Practice 2: Aggregate scan results from multiple pages into one report. Practice 3: Group violations by WCAG criterion across all pages. Practice 4: Identify the top 3 most common violation types. Practice 5: Compare axe-core and Lighthouse results for the same page.
Challenge: Create an automated scan pipeline that scans 20 pages of a sample site, aggregates results by WCAG criterion, generates a summary report with violation counts per page and per criterion, and identifies which issues are unique to specific page templates.
FAQ
Mini Project
Build a scan result aggregator that takes a folder of axe-core JSON results and produces: a summary table of violations by type, a per-page violation count chart, a list of unique violations with affected pages, and a comparison against the previous scan showing new and fixed issues.
What's Next
Manual Review Process covers the manual review phase of accessibility audits.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro