Website SEO Audit & Broken Link Checker avatar

Website SEO Audit & Broken Link Checker

Pricing

Pay per event

Go to Apify Store
Website SEO Audit & Broken Link Checker

Website SEO Audit & Broken Link Checker

Crawl your own website politely (robots.txt always honoured) and get a per-page SEO audit: titles, meta descriptions, headings, canonicals, redirects, duplicates and broken links. Nothing stored after the run.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Puneet

Puneet

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Crawl your own site politely and get a page-by-page SEO audit plus a list of broken links, as clean JSON, in one run.

Point the Actor at the home page of a site you own (or are allowed to test). It follows internal links, optionally seeds the crawl from your XML sitemap, and checks each HTML page for the problems that cost rankings and clicks: missing or duplicate titles, weak meta descriptions, heading problems, canonical mistakes, noindex tags, images without alt text, thin pages, redirect chains, mixed content and broken links. You get one dataset row per page and a site-wide summary.

No browser, no login, no API key, no third-party SEO database. robots.txt is always obeyed and there is no switch to turn that off.

What people use it for

  • Agencies and freelancers: schedule a weekly run per client and diff the issue counts.
  • In-house SEO and web teams: catch broken links and accidental noindex tags after a release.
  • Site migrations: crawl before and after, compare redirect chains, titles and canonicals.
  • Content audits: find thin pages, duplicate titles and duplicate descriptions in one table.
  • Developers: call it from CI after a deploy and fail the pipeline when brokenLinks is not empty.

What it checks (per page)

AreaIssue codes
Statushttp-error, redirected, redirect-chain, slow-response (over 3 s)
Titlemissing-title, title-too-long (over 60), title-too-short (under 10), duplicate-title
Descriptionmissing-meta-description, meta-description-too-long (over 160), meta-description-too-short (under 50), duplicate-meta-description
Headingsmissing-h1, multiple-h1
Indexingnoindex (meta robots or X-Robots-Tag), missing-canonical, canonical-elsewhere
Page setupmissing-lang, missing-viewport, missing-open-graph, invalid-json-ld
Contentthin-content (under 150 words), images-missing-alt
Securitymixed-content (http resources on an https page)
Linksbroken-links (4xx/5xx, DNS failure, timeout, connection refused)

Each page also carries a simple healthScore (100 minus 20 per error and 5 per warning), the title, H1, description length, word count, canonical, language, structured-data types found (JSON-LD @type), link counts and the broken links found on that page.

Sample output

{
"url": "https://example.org/pricing",
"status": 200,
"title": "Pricing",
"titleLength": 7,
"metaDescriptionLength": 0,
"h1Count": 1,
"wordCount": 212,
"canonical": "https://example.org/pricing",
"structuredDataTypes": ["Product"],
"brokenLinkCount": 1,
"brokenLinks": [{"url": "https://example.org/old-guide", "status": 404, "reason": "HTTP 404"}],
"issues": ["title-too-short", "missing-meta-description", "broken-links"],
"issueCount": 3,
"healthScore": 75
}

The SITE_SUMMARY record in the key-value store lists issue counts by type and severity, duplicate titles, every broken link with the page it was found on, links that could not be verified, URLs skipped because of robots.txt and crawl notes.

Inputs

InputWhat it does
Start URLs1 to 5 home pages. Only pages on the same host are crawled
Max pagesPages fetched in total (1 to 2000, default 50)
Max link depthClicks from the start page (0 to 20, default 5)
Seed from sitemap.xmlAdds URLs from the sitemap(s) listed in robots.txt or at /sitemap.xml
Check linksHEAD-checks links that were not crawled, including external ones
Max extra link checksCap on those checks (0 to 3000, default 300)
Delay between page requests500 to 10000 ms. A higher Crawl-delay in robots.txt wins
Crawl URLs with query stringsOff by default, to avoid endless filter and sort variants

Bad input (no URL, not an http(s) address, too many start URLs) stops the run at once with a plain message and no charge beyond the start event. If every start URL is unreachable or disallowed by robots.txt the run fails with the reason for each.

Pricing

Pay per event: $0.005 per run plus $0.003 per audited page. A 100-page site costs about $0.31. Pages that return errors (404, 500, unreachable), URLs blocked by robots.txt and non-HTML files are free, and nothing is charged past the Maximum cost per run you set.

Good to know

  • Polite by design. One request at a time per host, at least 500 ms apart, a declared user agent (SiteAuditLinkChecker), retries with back-off on 429/5xx. External links are checked with HEAD only, at most once per second per host.
  • Access refusals are not "broken". A 401, 403, 429 or 999 answer is listed as unverifiable. The Actor never retries around it, never solves captchas and never signs in.
  • Static HTML only. Pages are read as the server delivers them, without running JavaScript. Content that only appears after scripts run is not seen.
  • Private networks are refused, redirects included (localhost, internal IPs, cloud metadata addresses).
  • Pages larger than 3 MB are truncated before parsing. Sitemaps ending in .gz are skipped.
  • Link checks are best effort: some servers answer HEAD requests differently from browsers, and busy hosts can time out.

Privacy and rights

Audit only sites you own or have permission to test. The Actor does not extract email addresses, phone numbers or any personal profile data, and it keeps nothing after the run: results live only in your own run's dataset and key-value store, plus run-health counters (runs started, succeeded, failed, last error) in a named store in your account.

Built on httpx, BeautifulSoup and lxml. This is an independent tool and is not affiliated with any search engine or SEO software vendor.