Broken Link Checker & SEO Audit: 404s, Redirects, Sitemap
Pricing
from $2.00 / 1,000 audited pages
Broken Link Checker & SEO Audit: 404s, Redirects, Sitemap
Crawl your website and find broken links (404s), redirect chains, sitemap errors and on-page SEO issues (titles, meta, H1, canonical, noindex). Markdown report. $2 per 1,000 pages.
Pricing
from $2.00 / 1,000 audited pages
Rating
0.0
(0)
Developer
Giorgos Myrianthous
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
A broken link checker and SEO audit for your own website: crawls the sitemap and pages, finds 404s and broken links (with the pages they're on), redirect chains and on-page SEO problems, and writes a Markdown report.
💲 $2 per 1,000 pages audited plus $0.30 per 1,000 extra external links checked. Pay only for results. No subscription, and the Apify free plan's monthly credit covers small jobs.
Also known as: broken link checker, dead link checker, 404 checker, website SEO audit, site audit, sitemap validator, redirect checker, on-page SEO checker, Screaming Frog alternative.
Quick start
- Click Start. The prefilled input works as is.
- Or paste this input (JSON tab):
{"startUrl": "https://books.toscrape.com/","maxPages": 10,"maxLinksToCheck": 50}
Output (one dataset item):
{"type": "brokenLink","url": "https://example.com/old-page","status": 404,"isInternal": true,"foundOnCount": 3,"foundOn": ["https://example.com/blog/post-1"]}
Use it from the API, AI agents (MCP), n8n, Make or Zapier
curl -X POST "https://api.apify.com/v2/acts/gmyri~site-health-audit/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"startUrl":"https://www.example.com/","maxPages":200}'
- AI agents / MCP: connect
https://mcp.apify.com/?actors=gmyri/site-health-auditto Claude, Cursor, ChatGPT or any MCP client. The input schema is fully described for tool calling. - Python:
ApifyClient(token).actor("gmyri/site-health-audit").call(run_input={...}) - n8n / Make / Zapier: use the Apify "Run Actor" action with
gmyri/site-health-audit, then read the dataset items.
Quick FAQ
- Should I audit sites I don't own? This tool is meant for your own sites or sites you have permission to audit. It respects robots.txt by default and identifies itself in the user agent.
- Can I run it on a schedule? Yes. Create a Task with your input and add a weekly schedule. Use
REPORT.mdand the dataset to track issues over time. - What if I set a spending limit? The Actor stops cleanly at your Max cost per run and you're never charged above it.
Details
Audit your own website in a single run:
- sitemap discovery and validation
- HTTP status codes and redirect chains
- broken internal and external links, with the pages they appear on
- titles, meta descriptions, H1s, canonicals,
noindex, JSON-LD, alt text, mixed content,lang, viewport and thin content
You get a clean dataset, a readable Markdown report, and a JSON summary you can track over time. You pay per page, with no subscription.
Why this Actor
Today you need three Actors (a sitemap extractor, a link checker and an SEO auditor) and you pay up to $0.04 per page. This Actor does all three jobs in one pass, for $0.002 per page. It is polite by default: it respects robots.txt, uses 4 parallel requests and identifies itself with its own user agent.
What it checks
| Level | Checks |
|---|---|
| Site | robots.txt present, sitemap(s) found (robots.txt, /sitemap.xml, /sitemap_index.xml, nested index files, .gz), sitemap URLs that do not return 200, sitemap URLs on another host, http → https redirect, URLs blocked by robots.txt |
| Page | Status code, redirect chain, response time, content type and size, <title> (missing/short/long/duplicate), meta description (missing/long/duplicate), H1 (missing/multiple), canonical pointing elsewhere, noindex (flagged as a warning when the page is in the sitemap), JSON-LD types and parse errors, images without alt, http:// resources on https pages, <html lang>, viewport, word count, internal/external link counts, depth |
| Links | Every link found is checked once (HEAD, falling back to GET). Broken links (4xx/5xx/network errors) are listed with up to 10 source pages each. |
Every issue has a severity (error, warning or notice), a stable code (for example BROKEN_LINKS_ON_PAGE, DUPLICATE_TITLE) and a human-readable message, so you can filter results or alert on them.
Input
{"startUrl": "https://www.example.com/","discovery": "sitemapAndCrawl","maxPages": 500,"checkExternalLinks": true,"maxLinksToCheck": 2000,"excludeUrlPatterns": ["/tag/", "\\?replytocom="],"maxConcurrency": 4}
| Field | Default | Description |
|---|---|---|
startUrl | – | Homepage of the site to audit |
discovery | sitemapAndCrawl | sitemapOnly, crawlOnly or both |
maxPages | 100 | Pages to audit. Each one is a page-audited event. |
checkExternalLinks | true | Verify outbound links |
maxLinksToCheck | 1000 | Cap on extra link checks (link-checked events) |
includeSubdomains | false | Treat *.example.com as internal |
excludeUrlPatterns | – | Regexes of URLs to skip |
respectRobotsTxt | true | Skip disallowed URLs |
maxConcurrency | 4 | Parallel requests (1–20) |
slowResponseMs | 2000 | Threshold for SLOW_RESPONSE |
userAgent | SiteHealthAudit/0.1 | Shown in your server logs |
outputAllLinks | false | Also write every checked link, not only broken ones |
Output
- Dataset. Items with
type: "page"(one per audited page, worst pages first) andtype: "brokenLink":{ "type": "page", "url": "https://www.example.com/blog/post1", "status": 200, "title": "…", "titleLength": 68,"metaDescription": "…", "h1Count": 1, "canonical": "https://www.example.com/blog/", "noindex": true,"inSitemap": true, "jsonLdTypes": [], "jsonLdErrors": 1, "wordCount": 812, "responseTimeMs": 143,"issues": [{ "severity": "error", "code": "INVALID_JSON_LD", "message": "1 JSON-LD block(s) fail to parse" }] }{ "type": "brokenLink", "url": "https://www.example.com/missing", "status": 404, "isInternal": true,"foundOnCount": 3, "foundOn": ["https://www.example.com/", "…"] } REPORT.md(key-value store): a Markdown report you can paste into a ticket or send to a client.OUTPUT(key-value store): a summary with site-level issues, issue counts, pages audited and broken links. It is handy for scheduled monitoring.
Pricing (pay per event)
| Event | Price | When |
|---|---|---|
page-audited | $0.002 | Each page fetched and analysed |
link-checked | $0.0003 | Each extra link verified that is not itself audited (external links, or internal links beyond maxPages) |
apify-actor-start | $0.00005 | Platform default, once per run |
Example: a 500-page site with 1,500 external links costs 500 × $0.002 + 1,500 × $0.0003 = $1.45. If you set a maximum cost per run, the Actor sizes the crawl to fit it up front and stops cleanly when the limit is reached.
Scheduling and monitoring
Schedule the Actor weekly and add an integration (Slack, email or webhook) on OUTPUT.brokenLinks > 0. To call it from an AI agent, use https://mcp.apify.com/?tools=<your-username>/site-health-audit. The Actor uses pay-per-event pricing only and limited permissions, with no Standby, so it is eligible for agentic payments.
Responsible use
Use this Actor only on websites you own or are authorised to audit. By default it respects robots.txt, keeps concurrency low and identifies itself in the User-Agent. It does not log in, render JavaScript or bypass any access control.
Limitations
- HTML is analysed as served. JavaScript-rendered content (client-side SPAs) is not executed.
- Links are taken from
<a href>. Links inside JSON or JavaScript are not discovered.