Broken Link Checker & SEO Audit: 404s, Redirects, Sitemap avatar

Broken Link Checker & SEO Audit: 404s, Redirects, Sitemap

Pricing

from $2.00 / 1,000 audited pages

Go to Apify Store
Broken Link Checker & SEO Audit: 404s, Redirects, Sitemap

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

Giorgos Myrianthous

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

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

  1. Click Start. The prefilled input works as is.
  2. 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-audit to 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.md and 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

LevelChecks
Siterobots.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
PageStatus 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
LinksEvery 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
}
FieldDefaultDescription
startUrl–Homepage of the site to audit
discoverysitemapAndCrawlsitemapOnly, crawlOnly or both
maxPages100Pages to audit. Each one is a page-audited event.
checkExternalLinkstrueVerify outbound links
maxLinksToCheck1000Cap on extra link checks (link-checked events)
includeSubdomainsfalseTreat *.example.com as internal
excludeUrlPatterns–Regexes of URLs to skip
respectRobotsTxttrueSkip disallowed URLs
maxConcurrency4Parallel requests (1–20)
slowResponseMs2000Threshold for SLOW_RESPONSE
userAgentSiteHealthAudit/0.1Shown in your server logs
outputAllLinksfalseAlso write every checked link, not only broken ones

Output

  • Dataset. Items with type: "page" (one per audited page, worst pages first) and type: "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)

EventPriceWhen
page-audited$0.002Each page fetched and analysed
link-checked$0.0003Each extra link verified that is not itself audited (external links, or internal links beyond maxPages)
apify-actor-start$0.00005Platform 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.