Broken Link Checker & Redirect Chain Checker avatar

Broken Link Checker & Redirect Chain Checker

Pricing

Pay per usage

Go to Apify Store
Broken Link Checker & Redirect Chain Checker

Broken Link Checker & Redirect Chain Checker

Crawl a website and find every broken link (404, 5xx, dead domains, SSL errors, redirect loops) with the page and anchor text where it appears, or bulk-check URLs for status codes and full redirect chains. Bot-blocked links are flagged separately, not as false positives.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Paper & Linen Studio

Paper & Linen Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Find every broken link on your website: 404s, 410s, 5xx server errors, dead domains (DNS), expired SSL certificates, redirect loops and timeouts. Each broken link comes with the pages it appears on and its anchor text, so you know exactly what to fix.

The Actor also works as a bulk HTTP status code and redirect chain checker. Paste a list of URLs (old URLs after a migration, backlinks, sitemap URLs, affiliate links) and get the status code, final URL and every redirect hop for each one.

Free to use. You only pay for the Apify platform usage of your own runs. Checking about 40 links takes roughly 4 seconds and costs about $0.0001 in platform usage.

Why this checker?

  • Fewer false positives. Links that are blocked by bot protection (LinkedIn's 999, many 403s, 429 rate limits, Cloudflare challenges) are reported as blocked, not broken. They usually work in a browser, so they should not clutter your fix list. You can switch this off.
  • HEAD first, GET to confirm. Many servers answer HEAD requests wrongly. Before a link is reported as broken, it is checked again with GET.
  • Full redirect chains. Every hop is listed with its status code (301/302/307/308). Loops, chains that are too long and invalid Location headers are detected.
  • Error types you can act on: http_404, http_500, dns, ssl, connection_refused, timeout, redirect_loop, too_many_redirects, blocked.
  • Polite crawling. Respects robots.txt, limits parallel requests per host and retries 429/503 responses with backoff.
  • Each URL is checked once. A link that appears on 500 pages is requested one time. The report lists every page it was found on (up to 20 examples plus a total count).

Use cases

  • Monthly website QA and SEO audit: broken internal links, links to removed pages, redirect chains that waste crawl budget.
  • Website migration / relaunch: check that every old URL redirects (preferably with a 301) to a working page.
  • Agencies: run a scheduled broken-link report for each client site and send the dataset as CSV or Excel.
  • Content teams: find dead outbound links in old blog posts.
  • Affiliate and partner links: bulk-check that they still resolve.

Input

FieldDescription
startUrlsCrawl mode: one start page per website. List mode: all URLs to check.
modecrawl (default) crawls the site and checks every link found. list checks only the URLs you entered.
outputModebroken (default in crawl mode): broken links and timeouts only. issues: also redirected and bot-blocked links. all: every checked link (default in list mode).
maxPagesPerSiteNumber of HTML pages crawled per website (default 200).
maxDepthNumber of clicks from the start page (default 10).
maxLinksToCheckHard cap on unique URLs per run (default 10,000).
checkExternalLinksAlso check links to other domains (default on). They are checked but never crawled.
checkResourcesAlso check images, scripts, CSS, icons and media (default off).
includePatterns / excludePatternsLimit the crawl. A plain string means "contains"; * wildcards and re: regular expressions also work.
respectRobotsTxtSkip pages that robots.txt disallows (default on).
treatBlockedAsBrokenReport 401/403/429/999 as broken instead of blocked.
concurrency, maxConcurrencyPerHost, timeoutSecs, maxRedirectsTuning options.

Example: audit a site and save every problem.

{
"startUrls": [{ "url": "https://www.example.com/" }],
"maxPagesPerSite": 500,
"outputMode": "issues",
"checkResources": true,
"excludePatterns": ["/wp-admin/", "?replytocom="]
}

Example: bulk redirect check after a migration.

{
"mode": "list",
"startUrls": [
{ "url": "http://example.com/old-page" },
{ "url": "https://example.com/blog/2019/post" }
]
}

Output

One row per checked URL. This is real output from a run on scrapethissite.com:

{
"url": "https://www.scrapethissite.com/pages/advanced/?gotcha=csrf",
"result": "broken",
"statusCode": 400,
"statusText": "Bad Request",
"errorType": "http_400",
"error": null,
"finalUrl": "https://www.scrapethissite.com/pages/advanced/?gotcha=csrf",
"redirectCount": 0,
"redirectChain": [],
"permanentRedirect": null,
"isInternal": true,
"linkType": "page",
"contentType": "text/html",
"responseTimeMs": 212,
"foundOnCount": 1,
"foundOn": [
{ "pageUrl": "https://www.scrapethissite.com/pages/advanced/", "anchorText": "CSRF & Hidden Values", "tag": "a" }
],
"website": "https://www.scrapethissite.com/",
"checkedAt": "2026-11-02T23:07:37+00:00"
}

Real results from list mode:

URLresultstatuserrorTyperedirects
https://httpbin.org/redirect/3redirect2003 (302 → 302 → 302)
http://github.com/redirect2001 (to https)
https://httpbin.org/status/410broken410http_4100
https://nonexistent-domain-xyz-12345.de/brokendns0
https://expired.badssl.com/brokenssl0
https://www.linkedin.com/company/apifyblocked403blocked0

result is one of:

  • ok: 2xx with no redirect
  • redirect: 2xx after one or more redirects
  • broken
  • timeout
  • blocked

The dataset has two views: Overview and Redirect chains. A SUMMARY record in the key-value store gives per-website totals: pages crawled, links found, broken, redirected, blocked, and how many were skipped by robots.txt, patterns or limits.

Export the results as CSV, Excel or JSON, or connect them to Google Sheets, Slack, Zapier or Make with Apify integrations. To get a weekly broken-link report, schedule the Actor.

Tips

  • Large sites: raise maxPagesPerSite and maxLinksToCheck, and keep concurrency moderate (10–20) to stay polite.
  • Your own staging site behind basic auth or a firewall cannot be checked from the cloud.
  • blocked links are usually fine. Open a few by hand to be sure.
  • Only http(s) links are checked. mailto:, tel:, javascript: and #anchors are skipped.

FAQ

Is it legal? The Actor only requests public URLs, the same way a browser or a search-engine bot does. It respects robots.txt for crawling. Check websites you own or have permission to audit.

Does it render JavaScript? No. It reads the HTML that the server returns. That is fast and cheap and covers most sites. Links that are injected only by client-side JavaScript are not discovered.


Findet alle defekten Links einer Website: 404, 410, Serverfehler, nicht mehr existierende Domains, abgelaufene SSL-Zertifikate, Weiterleitungsschleifen und Timeouts. Zu jedem Link werden die Seite, auf der er vorkommt, und der Linktext gespeichert. Im Listenmodus prüft der Actor beliebig viele URLs auf Statuscode und komplette Weiterleitungskette, zum Beispiel nach einem Relaunch oder einer Domain-Migration.

  • Von Bot-Schutz blockierte Links (LinkedIn 999, 403, Cloudflare) werden als blocked markiert und nicht fälschlich als defekt.
  • Jede URL wird nur einmal geprüft, auch wenn sie auf vielen Seiten vorkommt.
  • robots.txt wird beachtet; Anfragen pro Host sind begrenzt.
  • Export als CSV/Excel. Per Zeitplan auch als wöchentlicher Linkreport, zum Beispiel für Agenturkunden.

Kostenlos nutzbar. Es fallen nur die Apify-Plattformkosten des eigenen Laufs an.