Broken Link Checker & Redirect Chain Checker
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
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, notbroken. 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
Locationheaders 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
| Field | Description |
|---|---|
startUrls | Crawl mode: one start page per website. List mode: all URLs to check. |
mode | crawl (default) crawls the site and checks every link found. list checks only the URLs you entered. |
outputMode | broken (default in crawl mode): broken links and timeouts only. issues: also redirected and bot-blocked links. all: every checked link (default in list mode). |
maxPagesPerSite | Number of HTML pages crawled per website (default 200). |
maxDepth | Number of clicks from the start page (default 10). |
maxLinksToCheck | Hard cap on unique URLs per run (default 10,000). |
checkExternalLinks | Also check links to other domains (default on). They are checked but never crawled. |
checkResources | Also check images, scripts, CSS, icons and media (default off). |
includePatterns / excludePatterns | Limit the crawl. A plain string means "contains"; * wildcards and re: regular expressions also work. |
respectRobotsTxt | Skip pages that robots.txt disallows (default on). |
treatBlockedAsBroken | Report 401/403/429/999 as broken instead of blocked. |
concurrency, maxConcurrencyPerHost, timeoutSecs, maxRedirects | Tuning 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:
| URL | result | status | errorType | redirects |
|---|---|---|---|---|
| https://httpbin.org/redirect/3 | redirect | 200 | 3 (302 → 302 → 302) | |
| http://github.com/ | redirect | 200 | 1 (to https) | |
| https://httpbin.org/status/410 | broken | 410 | http_410 | 0 |
| https://nonexistent-domain-xyz-12345.de/ | broken | dns | 0 | |
| https://expired.badssl.com/ | broken | ssl | 0 | |
| https://www.linkedin.com/company/apify | blocked | 403 | blocked | 0 |
result is one of:
ok: 2xx with no redirectredirect: 2xx after one or more redirectsbrokentimeoutblocked
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
maxPagesPerSiteandmaxLinksToCheck, and keepconcurrencymoderate (10–20) to stay polite. - Your own staging site behind basic auth or a firewall cannot be checked from the cloud.
blockedlinks are usually fine. Open a few by hand to be sure.- Only
http(s)links are checked.mailto:,tel:,javascript:and#anchorsare 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.
Deutsch: Broken-Link-Checker & Redirect-Prüfer
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
blockedmarkiert 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.