Website Health Audit: SEO & Broken Link Checker avatar

Website Health Audit: SEO & Broken Link Checker

Pricing

from $15.00 / 1,000 page auditeds

Go to Apify Store
Website Health Audit: SEO & Broken Link Checker

Website Health Audit: SEO & Broken Link Checker

Crawl your website and get one prioritized fix list: broken links, missing titles and meta descriptions, H1s, image alt text, redirects, slow pages, mixed content, sitemap, robots.txt, llms.txt, security headers and AI-crawler access. HTML report, CSV and JSON.

Pricing

from $15.00 / 1,000 page auditeds

Rating

0.0

(0)

Developer

SiteHealth Tools

SiteHealth Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Security

Limited permissions

Share

Website Health Audit: SEO Audit & Broken Link Checker

Point it at your website and get one prioritized fix list in minutes. Website Health Audit crawls your site politely, checks every page for the problems that cost you search traffic, accessibility, and trust, and hands you an HTML report you can send straight to whoever fixes the site.

No API keys. No browser extensions. No proxies. Pay only for pages audited.

What does this SEO site audit tool check?

On every page

  • HTTP errors (4xx/5xx), fetch failures, redirect chains, slow server responses (over 3 s)
  • Missing, short, long, or duplicate titles
  • Missing, short, long, or duplicate meta descriptions
  • Missing or multiple <h1> headings
  • noindex pages (so you can confirm they are intentional)
  • Canonical tags pointing elsewhere
  • Missing lang attribute and missing mobile viewport tag
  • Images without alt text (accessibility and image SEO)
  • Mixed content (http:// resources on https:// pages)
  • Thin pages (under ~150 words of visible text)
  • Broken links, internal and outbound (404/410/5xx and dead domains). Links that time out or drop the connection are listed separately as unreachable and never counted as broken.
  • Structured data types found (JSON-LD and microdata)

Once per site

  • robots.txt present, and whether it blocks Googlebot
  • AI-crawler access: whether robots.txt allows or blocks GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, Bytespider, Applebot-Extended
  • XML sitemap present and valid (declared in robots.txt or at /sitemap.xml)
  • /llms.txt present (optional emerging convention for AI assistants)
  • HTTPS, http→https redirect, and security headers (HSTS, Content-Security-Policy, X-Content-Type-Options, Referrer-Policy)

What you get: HTML report, CSV fix list and JSON

OutputWhereUse it for
REPORT (HTML)Key-value storeA readable report with a health score, "fix these first" table, site-wide checks, and page list. Send it to your developer or client.
ISSUES (CSV)Key-value storeEvery issue, one row each, sorted by severity. Open it in Excel or Google Sheets.
SUMMARY (JSON)Key-value storeMachine-readable totals for dashboards and automations.
Pages datasetDatasetOne row per page with every measured field and its issues. Export to JSON, CSV, Excel.

How much does a website audit cost?

$0.015 per page audited. Site-wide checks and outbound-link checks are included at no extra charge.

Site sizeCost
50 pages$0.75
200 pages$3.00
1,000 pages$15.00

The Actor never audits more pages than your maximum charge limit allows. It checks the limit before it starts and caps the crawl to fit. If you're on the Apify free plan, your monthly platform credit can pay for runs (at $0.015 per page, $5 covers about 330 pages). You pay per page only. Compute, proxies and storage are not billed to you on top.

How to run a website health check

  1. Enter your homepage in Website to audit.
  2. Set Max pages (start with 50).
  3. Click Start. When the run finishes, open REPORT in the Storage tab.

Input example

{
"startUrls": [{ "url": "https://www.example.com/" }],
"maxPages": 200,
"checkExternalLinks": true
}

Output example (a real row from our test run on crawler-test.com, shortened)

{
"final_url": "https://crawler-test.com/description_tags/duplicate_description",
"status": 200,
"response_ms": 86,
"title": "Description Tag Duplicate",
"meta_description_length": 21,
"h1_count": 1,
"images_missing_alt": 0,
"issue_count": 6,
"issues": [
{
"severity": "warning",
"code": "VIEWPORT_MISSING",
"message": "No mobile viewport meta tag; page may render poorly on phones."
},
{
"severity": "warning",
"code": "TITLE_DUPLICATE",
"message": "Same title used on 2 pages."
},
{
"severity": "warning",
"code": "META_DESCRIPTION_DUPLICATE",
"message": "Same meta description used on 4 pages."
}
]
}

How the health score works

100 − 4 × (10 × critical + 3 × warning + 0.5 × notice) ÷ pages, floored at 0. It's a simple, transparent number for tracking progress between audits. The issue list is what matters.

Accuracy rules we follow

  • Links that answer 401, 403, 429, or 999 usually mean "bots not welcome," not "broken," so they are not reported as broken.
  • Links we did not check (beyond your limits) are never reported as broken.
  • robots.txt is parsed with RFC 9309 rules (wildcards, $, longest match wins), the same way Google does it.

Be a good citizen

  • Audit sites you own, manage, or have permission to test.
  • The crawler respects robots.txt by default, uses at most 5 parallel requests with a delay, and identifies itself honestly as WebsiteHealthAudit/1.0.
  • It only reads public pages. It does not log in, fill forms, or collect personal data.

Limits

  • It reads server-delivered HTML and does not run JavaScript, so content rendered only by client-side JavaScript isn't analyzed.
  • It doesn't measure Core Web Vitals (use Lighthouse or PageSpeed Insights for that). Response time is server time only.
  • Internal links to pages beyond Max pages are not status-checked.
  • One run audits at most 5,000 pages. For bigger sites, run one audit per section (for example https://example.com/blog/).
  • Outbound link checks are capped by Max outbound links to check (default 300). Links left unchecked are never reported as broken.
  • If a run is about to hit its timeout or is aborted, the Actor stops crawling and still saves the report for the pages finished so far. You're charged only for the pages delivered.
  • A site that blocks automated requests (firewall, bot protection) may return errors for some pages. These show up as fetch warnings, not as broken pages.

FAQ

Is this a broken link checker or a full SEO audit? Both. Every crawled page is checked for on-page SEO issues, and every link found is status-checked within your limits.

Does it check AI-crawler access (GPTBot, ClaudeBot, PerplexityBot)? Yes. It reads your robots.txt the way crawlers do and reports, for each major AI crawler, whether it's allowed or blocked. It also checks for /llms.txt.

Can I audit a client's website? Yes, if you have their permission. The HTML report is neutral and has no branding, so you can forward it as is.

Will it slow down or harm my site? No. By default it makes at most 5 parallel requests with a 250 ms delay, respects robots.txt, and only sends GET/HEAD requests to public pages.

Can I schedule regular audits? Yes. Use Apify Schedules to run it weekly and compare health scores. Use webhooks or integrations (Make, Zapier, Slack, Google Drive) to get the report delivered.

Can I call it from code or an AI agent? Yes. Use the Apify API, the Python/JS clients, or the Apify MCP server. The SUMMARY record is compact JSON built for automations.

Why is a link marked "unreachable" instead of "broken"? It timed out or dropped the connection. That is often temporary or caused by bot protection, so we flag it for a manual look instead of calling it broken.

Does it render JavaScript or measure Core Web Vitals? No. See Limits below.

Support

Found a bug or want a check added? Open an issue on the Actor's Issues tab with the run ID. We aim to reply within 2 business days and to fix confirmed bugs within 7 days. Feature requests are welcome.