Broken Link & Redirect Checker – 404s, Redirect Chains, Anchors
Pricing
from $1.00 / 1,000 link checkeds
Broken Link & Redirect Checker – 404s, Redirect Chains, Anchors
Crawl a website (or check a URL list) and find broken links (404/410/5xx/DNS/SSL), redirect chains and loops, http→https hops and missing #anchors, with the source page and anchor text of every issue. Polite, robots.txt-compliant. ~$1 per 1,000 links.
Pricing
from $1.00 / 1,000 link checkeds
Rating
0.0
(0)
Developer
Tesselyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Find every broken link, redirect chain and missing #anchor on a website, with the page it's on and its anchor text, so you know exactly what to fix. Give it a website and it crawls it, or give it a list of URLs and it checks each one. It is polite and follows robots.txt. You pay only for links that got a definite answer.
What does the Broken Link & Redirect Checker do?
- Crawls your site (same domain, up to the page limit and depth you set), pulls out every link and checks each unique URL once, both internal and external.
- Finds broken links: 404 / 410 / other 4xx, 5xx, DNS failures (dead domains), SSL/TLS errors, refused connections, redirect loops and too-many-redirects.
- Analyses redirects: number of hops, the full chain (URL + status for each hop), loops, temporary (302/307) vs permanent (301/308), http → https hops and the final URL. Internal links that redirect are flagged so you can point them straight at the final URL.
- Optional anchor check: reports
/page#sectionlinks where the target page has noid/name="section". It skips SPA routes (#/…,#!…),#topand text fragments, so you don't get false alarms. - Optional resource check: images, scripts, stylesheets, icons, canonical/alternate links, iframes, video/audio sources and
srcset. - Tells you where each issue is: source page, anchor text, link type, how many pages link to the URL, and up to 10 source pages.
- Writes one summary row per site: pages crawled, links checked, broken internal/external links, redirect chains and loops, missing anchors, the top 20 broken links by number of referring pages, and which limit stopped the crawl.
Fewer false alarms than typical link checkers
- 403 / 401 / 429 / 999 (bot protection or rate limiting) and timeouts are reported as
unverified, notbroken, and are not charged. Many sites (LinkedIn, some CDNs) block automated checks. Calling those links "broken" is the most common complaint about link checkers. - Retries after network errors, 429 (honouring
Retry-Afterup to 10 s) and 502/503/504 before reaching a verdict. - HEAD first, then GET if the server rejects HEAD or answers it with an error, because some servers handle HEAD badly.
- The run deadline is respected: when your run timeout gets close, the Actor stops and saves everything it has checked so far instead of losing the run.
Check one page free
For a single page (up to 40 unique links), use the free broken link checker on tesselyn.com. It doesn't follow redirects or crawl. Use this Actor to crawl a whole site, follow redirect chains and check #anchors.
Who is it for?
SEO specialists and agencies (site audits, migrations), webmasters and content teams (documentation and blogs), developers (pre-release checks, CI via the API) and anyone who needs to verify a list of URLs: backlink targets, redirect maps after a migration, or sitemap URLs.
How to use it
- Add one or more Start URLs.
- Choose a mode: Crawl (follow links within the site) or List (check exactly the URLs you gave).
- Set Max links to check. This is the cost cap. Set Max pages per site too.
- Run it, then open the Issues view in the dataset, or download CSV/Excel/JSON.
Input example
{"startUrls": [{ "url": "https://www.example.com/" }],"mode": "crawl","maxPagesPerSite": 100,"maxDepth": 3,"maxLinksToCheck": 2000,"checkExternalLinks": true,"checkFragments": true,"onlyReportIssues": true}
Output example
One row per unique URL:
{"type": "link","url": "https://www.example.com/old-pricing","verdict": "broken","category": "not_found","isBroken": true,"status": 404,"finalUrl": "https://www.example.com/old-pricing","redirectCount": 0,"redirectChain": [],"issues": ["BROKEN_404"],"isInternal": true,"linkType": "a","sourcePage": "https://www.example.com/blog/2023-update","anchorText": "see our pricing","sourceCount": 3,"sources": [{ "page": "https://www.example.com/blog/2023-update", "anchorText": "see our pricing", "linkType": "a" }],"charged": true}
A redirect row includes "redirectChain": [{"url": "http://example.com/a", "status": 301, "location": "https://example.com/a"}, …], "httpToHttps": true and issue codes such as REDIRECT_CHAIN, TEMPORARY_REDIRECT and INSECURE_HTTP.
Verdicts: ok · redirected · broken · unverified (blocked, rate-limited or timed out, so it could not be confirmed) · skipped (disallowed by robots.txt, or not a public address) · not_checked (the link limit was reached).
How much does it cost?
Pay per event: $0.001 per link checked, which is $1 per 1,000 links. Only URLs with a definite verdict (ok, redirected or broken) are charged. Unverified, skipped and not-checked URLs, input errors and summary rows are free. Each unique URL is charged once per run, however many pages link to it. Pages crawled to discover links cost nothing extra. Set Max links to check (and, optionally, the run's maximum charge) to cap the cost.
Integrations and API
Run it from the Apify API, the CLI, Make, Zapier or n8n, or put it on a Schedule for weekly monitoring and get an email or Slack alert via webhooks when broken > 0. The OUTPUT record and the per-site summary row make dashboards easy.
Responsible use
The Actor identifies itself as TesselynLinkCheckBot/1.0 (+https://apify.com/tesselyn) and does not impersonate browsers or use proxies to get around bot protection. It obeys robots.txt (RFC 9309, including wildcards and Crawl-delay up to 10 s) for every host it contacts, external hosts included. It sends at most one request at a time to each host, waits at least 500 ms between requests to the same host (configurable up to 10 s) and limits total parallel requests (default 10, max 30). It only reads HTML pages to extract links (5 MB cap per page). Other URLs are checked with HEAD, or with a GET whose body is discarded. JavaScript is not executed. Private, loopback and cloud-metadata addresses are refused.
Terms of use
These terms add to the Apify Standard Actor Contract, which governs your use of this Actor; they do not replace it.
- Only crawl sites you own, manage or otherwise have a legitimate interest and right to check. You are responsible for making sure your use of the Actor and its output complies with applicable laws and the target websites' terms.
- Do not use the Actor to probe internal networks, to load-test or stress sites, or to get around access controls. Abusive use may be blocked.
- Sanctions and restricted countries. You may not use this Actor if you are located in, ordinarily resident in, or acting on behalf of a person or organisation in a restricted country or region. Currently these are: Afghanistan, Belarus, Central African Republic, Cuba, Democratic Republic of the Congo, Haiti, Iran, Iraq, Lebanon, Libya, Mali, Myanmar, Nicaragua, North Korea, Russia, Somalia, South Sudan, Sudan, Syria, Venezuela, Yemen, Zimbabwe, Antarctica, and the Crimea, Sevastopol, Donetsk, Luhansk, Kherson and Zaporizhzhia regions of Ukraine. You also may not use it if you are on, or owned or controlled by someone on, any applicable sanctions list (including those of the United Nations, the United States (OFAC SDN), the European Union, the United Kingdom or Israel). We may block such use, and we may update this list when the law or our policy changes.
- Output is an automated, best-effort technical check and is provided "as is". A link reported as working or broken may behave differently for other clients, locations or times. Check results before relying on them for important decisions.
- No warranty; limitation of liability. To the maximum extent permitted by applicable law, the Actor and its output are provided "as is" and "as available", without warranties of any kind, express or implied (including accuracy, completeness, merchantability, fitness for a particular purpose and non-infringement), as set out in section 7 of the Apify Standard Actor Contract. The Actor creator (Tesselyn) is not liable for any indirect, incidental, special, consequential or punitive loss or damage, including lost traffic, rankings, revenue, profits or data, arising from use of or reliance on the Actor or its output. Any other liability is limited as set out in section 8 of that Contract, and nothing here limits liability that cannot be limited under applicable law. Output is for information only and is not SEO, legal or other professional advice.
Privacy notice
- What is processed: the URLs you submit, plus public technical data about the links found on the crawled pages: URL, HTTP status, redirect chain, response time, content type and source page. Anchor text is stored up to 200 characters and can sometimes include a person's or business name.
mailto:andtel:links are counted but never stored. No page content, emails, phone numbers or other personal data are extracted. - Where it is stored: only in your own Apify run storage (default dataset,
OUTPUTrecord, run log and input), under your Apify account and Apify's retention settings. Apart from the HTTP requests to the sites and links being checked, the Actor sends nothing to third parties and stores nothing anywhere else. - Roles: for any personal data in your input or output, you are the controller and the Actor creator acts as processor, as set out in section 5 of the Apify Standard Actor Contract. Run logs contain only counts and error codes.
- Deletion: delete the run or dataset in Apify Console at any time. For questions or privacy requests, open an issue on the Actor's Issues tab.
FAQ
Why is a link "unverified" and not "broken"?
The server answered 401/403/407/429/451/999 or didn't answer within the timeout. That usually means bot protection or rate limiting, not a dead page. Check these by hand in a browser. They are not charged.
Why was a link "skipped"?
That host's robots.txt disallows our crawler (TesselynLinkCheckBot), its robots.txt returned 5xx/429 (RFC 9309 says to treat that as "disallow all"), or the URL points to a non-public address. To check your own site, allow TesselynLinkCheckBot in your robots.txt.
Does it render JavaScript?
No. It reads the HTML your server sends. Links inserted only by JavaScript are not found.
How long does a run take?
Requests to the same host are spaced at least 0.5 s apart, so a site with 1,000 internal URLs takes about 10 minutes. External links on many different hosts are checked in parallel. Set a longer run timeout for big sites. The Actor saves partial results before the timeout.
Does the same URL get charged twice?
No. Each unique URL (fragment removed) is checked and charged once per run.
How much does a 10,000-link site cost?
At most about $10 ($0.001 per link checked), plus the tiny per-run start fee. Only unique URLs with a definite verdict are charged, so unverified, skipped and not-checked links lower the total. Set Max links to check to cap it.
Related Tesselyn tools
- AI Crawler & llms.txt Checker: see which AI crawlers (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot and more) a site's robots.txt allows, check llms.txt and get a 0–100 GEO readiness score.
- Domain Health Checker: domain expiry, DNS, SPF/DMARC/DKIM, SSL and HSTS in bulk. Coming to the Apify Store soon. Until then, try the free domain and email health checker on tesselyn.com.
- Bulk PageSpeed & Core Web Vitals Checker: Google PageSpeed Insights scores for many URLs. Coming to the Apify Store soon.
- See all Tesselyn Actors on the Apify Store and the free single-site tools on tesselyn.com.
Support
Built and maintained by Tesselyn. Found a bug or a false positive, or need a feature? Open an issue on the Actor's Issues tab. Feedback is welcome.
Website: Tesselyn website (tesselyn.com)