Broken Link & Redirect Checker – 404s, Redirect Chains, Anchors avatar

Broken Link & Redirect Checker – 404s, Redirect Chains, Anchors

Pricing

from $1.00 / 1,000 link checkeds

Go to Apify Store
Broken Link & Redirect Checker – 404s, Redirect Chains, Anchors

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

Tesselyn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

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.

  • 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#section links where the target page has no id/name="section". It skips SPA routes (#/…, #!…), #top and 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.
  • 403 / 401 / 429 / 999 (bot protection or rate limiting) and timeouts are reported as unverified, not broken, 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-After up 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

  1. Add one or more Start URLs.
  2. Choose a mode: Crawl (follow links within the site) or List (check exactly the URLs you gave).
  3. Set Max links to check. This is the cost cap. Set Max pages per site too.
  4. 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: and tel: 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, OUTPUT record, 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

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.

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.

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.

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)