Website SEO & Accessibility Auditor avatar

Website SEO & Accessibility Auditor

Pricing

from $5.00 / 1,000 audited website pages

Go to Apify Store
Website SEO & Accessibility Auditor

Website SEO & Accessibility Auditor

Audit public website pages for SEO metadata, accessibility basics, HTTP errors, and content quality issues.

Pricing

from $5.00 / 1,000 audited website pages

Rating

0.0

(0)

Developer

sky zhong

sky zhong

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Audit public website pages for practical SEO and accessibility problems without browser automation, logins, cookies, or external APIs. The Actor follows same-site links, optionally reads XML sitemaps, and writes one transparent result per audited page.

What you get

Each dataset row includes:

  • HTTP status, final URL, content type, response size, and load time
  • title, meta description, H1 count, canonical URL, HTML language, robots directives, and indexability
  • Open Graph fields and detected JSON-LD types
  • missing image alt attributes
  • buttons and links without detectable accessible names
  • form controls without detectable labels
  • skipped heading levels
  • internal and external link counts
  • a 0–100 SEO score, a 0–100 accessibility score, and detailed issue codes

The OUTPUT record in the default key-value store contains aggregate status codes, average scores, top issues, failed pages, duplicate titles, and duplicate meta descriptions.

Common use cases

  • audit a new landing page before launch
  • monitor a marketing site for missing SEO metadata
  • find repeated titles and descriptions after a migration
  • create a first-pass accessibility backlog for developers
  • schedule a recurring website health check and export results as JSON, CSV, XML, or Excel through Apify
  • call the Actor from an API, Make, Zapier, or an AI agent that needs structured web-quality data

Quick start

Use this input in Apify Console or through the API:

{
"startUrls": [{ "url": "https://example.com/" }],
"maxPages": 50,
"maxCrawlDepth": 1,
"discoverSitemaps": true,
"respectRobotsTxt": true,
"includeSubdomains": false,
"maxConcurrency": 5,
"delayMs": 300,
"requestTimeoutSecs": 30
}

For one-page checks, set maxCrawlDepth to 0. For a broader crawl, increase it gradually and keep maxPages at a predictable limit.

Input reference

FieldDefaultPurpose
startUrlsrequiredOne or more public HTTP(S) start pages
maxPages50Hard cap across all sites, from 1 to 500
maxCrawlDepth1Same-site link depth, from 0 to 5
discoverSitemapstrueRead Sitemap: entries and try /sitemap.xml
respectRobotsTxttrueCheck robots rules before fetching pages
includeSubdomainsfalseInclude child subdomains of each start hostname
includePatterns[]Optional shell-style URL allow patterns
excludePatterns[]Optional shell-style URL deny patterns
maxConcurrency5Concurrent workers across sites
delayMs300Minimum request spacing per origin
requestTimeoutSecs30Timeout for each request

Scoring methodology

The SEO score starts at 100 and applies documented deductions for non-2xx responses, missing or unusually sized titles and descriptions, missing or multiple H1 headings, missing canonical, language and viewport metadata, and noindex directives.

The accessibility score starts at 100 and applies bounded deductions for missing page language, image alt attributes, accessible button/link names, form labels, and heading-order skips. Empty alt="" is reported separately but is not automatically treated as an error because it can be correct for decorative images.

Scores are prioritization aids, not guarantees. Every deduction is backed by a visible issue code in the same dataset row.

Pricing

This Actor is designed for pay per event billing. Apify's synthetic apify-default-dataset-item event is charged once when one page-level result is written to the default dataset. The source includes a suggested launch price of $0.005 per page; the live event and price must be confirmed in the Actor's Apify Console monetization settings. Do not add a second custom per-page event, because that would charge the same result twice.

Users control cost with maxPages and Apify's maximum charge per run. When the spending limit is reached, the Actor stops gracefully.

Safety and responsible use

  • Only public HTTP and HTTPS targets are supported.
  • Localhost, private, loopback, link-local, reserved, multicast, and other non-public addresses are blocked.
  • Every redirect target is validated before it is requested.
  • Response bodies are capped at 5 MB.
  • Crawling stays within the hostname scope of each start URL unless child subdomains are explicitly enabled.
  • Binary and common static-asset extensions are skipped.
  • robots.txt is respected by default, including a bounded crawl delay.
  • The Actor does not accept cookies, credentials, custom headers, stealth settings, or login sessions.

Only audit websites you are authorized to access and follow applicable site terms and laws.

Limitations

This is a static server-rendered HTML audit. It does not execute JavaScript and is not a Lighthouse performance run. It cannot evaluate color contrast, keyboard behavior, focus order, video captions, ARIA widget behavior, or content visible only after client-side rendering.

The accessibility result is not a WCAG certification or legal compliance opinion. Use it as a fast automated first pass and follow with browser-based and manual testing.

Run locally

Python 3.11 or newer is required.

python -m venv .venv
.venv/Scripts/pip install -r requirements.txt
python -m unittest discover -s tests -v
apify run

For a local Actor run without Apify CLI, place the input at storage/key_value_stores/default/INPUT.json and run python -m my_actor. To exercise pay-per-event behavior locally, set ACTOR_TEST_PAY_PER_EVENT=true.

Output example

{
"url": "https://example.com/",
"statusCode": 200,
"title": "Example Domain",
"h1Count": 1,
"seoScore": 75,
"accessibilityScore": 100,
"issueCodes": [
"TITLE_TOO_SHORT",
"META_DESCRIPTION_MISSING",
"CANONICAL_MISSING"
]
}

Support

When reporting a problem, include the run ID, a public example URL, and the unexpected issue code. Do not send passwords, cookies, API tokens, or private-site content.

FAQ

Why does the result differ from Lighthouse? This Actor audits returned HTML without launching a browser. Lighthouse executes a browser and measures a different, broader set of signals.

Can it audit a login-only site? No. Credentials, cookies, and private networks are intentionally unsupported.

Why was a page skipped? Check errorCode, URL patterns, hostname scope, robots.txt, the page cap, and the run spending limit.

Can I resell the report? You may use and export Actor results, subject to the audited website's terms and applicable law.