Broken Link & Sitemap Health Checker avatar

Broken Link & Sitemap Health Checker

Pricing

from $0.50 / 1,000 link checkeds

Go to Apify Store
Broken Link & Sitemap Health Checker

Broken Link & Sitemap Health Checker

Finds broken links, redirect chains and loops, sitemap entries that fail, and pages missing from the sitemap. Crawls your site or reads its sitemap. Plain HTTP, obeys robots.txt. Pay per link checked.

Pricing

from $0.50 / 1,000 link checkeds

Rating

0.0

(0)

Developer

Jeremy DONALDSON

Jeremy DONALDSON

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Features

Limited permissions

Share

Broken Link & Sitemap Health Checker finds every broken link on a website (404s, server errors, dead domains, timeouts), every redirect chain and redirect loop, every sitemap entry that fails, and every page missing from the sitemap. Give it a home page. It reads the site's robots.txt and sitemap.xml, crawls the site's own pages, and checks each link once, including links to other websites.

It uses plain HTTP requests, no browser, so it is fast and cheap. You pay per address checked. Addresses the site's robots.txt blocks are listed free and never requested.

To try it, paste your home page into Website, sitemap or links and press Start.

Why use it?

  • 🔗 Broken links with where they are. Each broken link lists the pages that link to it and the link text, so you know exactly what to fix.
  • 🗺️ Sitemap health, not just links. Flags sitemap entries that are broken, redirect, are noindex, point their canonical elsewhere, or are blocked by robots.txt. Checks each sitemap file too: missing, not XML, too big, or listing other sites.
  • 🔍 Pages missing from the sitemap. Compares what the crawl finds with what the sitemap lists, and names the indexable pages Google may never be told about. With a full crawl it also names sitemap pages nothing links to.
  • ↪️ Every redirect hop. Full redirect chains with each status code, loops caught, and same-site links that point at a redirect instead of the final page.
  • 🤝 Polite by default. Obeys robots.txt and its Crawl-delay, spaces requests to each site, and never has more than two open at once on one site.
  • 💸 Pay only for checks. Each unique address is checked and charged once, however many pages link to it.
  • 🤖 Agent-ready. Works as a tool in the Apify MCP server, so AI assistants such as Claude or ChatGPT can run it.
  • ⏱️ Everything the Apify platform gives you: schedules (a weekly link check), API, webhooks, and exports to JSON, CSV, Excel or Google Sheets.

Who is it for?

  • SEO and web agencies: technical audits, client reports, and checks after a site migration.
  • Site owners, editors and developers: catch dead links before visitors and search engines do.
  • Anyone moving a site: run it before and after to catch broken redirects.
  1. Paste the home page (or its sitemap.xml) into Website, sitemap or links.
  2. Leave What to check on Sitemap + crawl for the full health check. Pick Sitemap only to audit the sitemap, or Just these addresses to check a list.
  3. Set Most pages to read and Most addresses to check to the size of the site.
  4. Press Start. A few hundred links take one to two minutes.
  5. Open the Output tab: All links for the overview, Where each link is for the pages to fix, Sitemap and indexing for the sitemap view, and Site health summary for the roll-up.

Modes

ModeReads the sitemapCrawls the siteFinds
Sitemap + crawl (default)yesyesEverything: broken links, redirects, failing sitemap entries, pages missing from the sitemap, sitemap pages nothing links to
Crawl onlynoyesBroken links and redirects on pages reachable from the start page
Sitemap onlyyesnoSitemap entries that are broken, redirect, are noindex or canonicalised elsewhere
Just these addressesnonoStatus and redirects for the list you give

You pay per link checked: one unique address, checked once.

Price
Link checked$0.0007 each ($0.70 per 1,000), lower on Apify's Silver and Gold plans
Run startApify's standard tiny start fee
Addresses blocked by robots.txt, invalid addresses, the sitemap files themselvesFree

Examples: a 300-link site is about $0.21. A 5,000-link site is about $3.50. Apify's free plan includes monthly credit, enough for many test runs.

Most addresses to check caps the charge for a run. You can also set a maximum cost per run when you start it: the Actor stops cleanly before it would go over, and you keep every result it finished.

Input example

{
"startUrls": ["https://crawlee.dev"],
"mode": "full",
"maxPages": 60,
"maxLinksToCheck": 600,
"checkExternalLinks": true
}

Output example

One row per address checked. A broken stylesheet found on five pages:

{
"url": "https://lipis.github.io/flag-icon-css/css/flag-icon.css",
"httpStatus": 404,
"result": "broken",
"isBroken": true,
"issues": ["BROKEN_LINK"],
"linkType": "stylesheet",
"internal": false,
"linkedFromCount": 5,
"linkedFrom": [
{ "page": "https://www.scrapethissite.com/pages/simple/", "anchorText": null }
],
"charged": true
}

A same-site link that redirects and then fails:

{
"url": "https://www.crawlee.dev/python/docs/examples/playwright-crawler-with-fingeprint-generator",
"finalUrl": "https://crawlee.dev/python/docs/examples/playwright-crawler-with-fingeprint-generator",
"httpStatus": 404,
"result": "broken",
"redirectCount": 1,
"redirectChain": [
{ "url": "https://www.crawlee.dev/python/docs/examples/playwright-crawler-with-fingeprint-generator", "status": 301 }
],
"linkedFrom": [
{ "page": "https://crawlee.dev/blog/crawlee-for-python-v1", "anchorText": "Playwright crawler with fingerprint generator" }
]
}

An address the site's robots.txt blocks comes back free, never requested:

{ "url": "https://www.scrapethissite.com/lessons/", "result": "skipped-robots", "charged": false, "errorCode": "BLOCKED_BY_ROBOTS_TXT" }

The Site health summary (key-value store record OUTPUT) holds counts by result and issue, the 50 broken links linked from the most pages, the longest redirect chains, each sitemap file's health, the failing sitemap entries, and the pages missing from the sitemap.

Results and issue codes

resultMeaningBroken?
ok2xx, no redirectno
redirect / redirect-chainOne hop / two or more hops to a working pageno
broken4xx (404, 410 and others)yes
blocked401, 403, 429 or 999: the site refuses bots. Usually works in a browser; check by handno
server-error, timeout, dns-error, connection-error, tls-errorNo usable answeryes
redirect-loop, too-many-redirectsThe redirects never endyes
skipped-robotsBlocked by the site's robots.txt. Not requested, not chargedno
Issue codeMeaning
BROKEN_LINK, SERVER_ERROR, TIMEOUT, DNS_ERROR, CONNECTION_ERROR, TLS_ERROR, REDIRECT_LOOP, TOO_MANY_REDIRECTSThe link doesn't work
REDIRECT_CHAINTwo or more redirects; link to the final address
INTERNAL_LINK_TO_REDIRECTYour own page links to an address that redirects
BLOCKED_FOR_BOTSThe server refused an automated check
SITEMAP_ENTRY_BROKEN, SITEMAP_ENTRY_REDIRECTSThe sitemap lists an address that fails or redirects
SITEMAP_ENTRY_NOINDEX, SITEMAP_ENTRY_CANONICAL_ELSEWHEREThe sitemap lists a page that asks not to be indexed, or names another page as canonical
SITEMAP_ENTRY_BLOCKED_BY_ROBOTS_TXTThe sitemap lists an address robots.txt blocks
SITEMAP_ENTRY_NOT_LINKEDIn the sitemap, but no crawled page links to it (only after a complete crawl)
MISSING_FROM_SITEMAPAn indexable same-site page the crawl found that the sitemap doesn't list (addresses with ? query strings are left out)

FAQ

Why are some links "blocked" when they work in my browser? Sites such as LinkedIn, Stack Overflow and some shops refuse automated requests (403, 429 or 999). The Actor reports those as blocked, not broken, so you can check them by hand.

Why are some links "skipped-robots"? The site's robots.txt asks bots not to load them. The Actor respects that for every site, yours and the ones you link to. Those addresses are free.

My site has a huge sitemap. Will it crowd out the crawl? No. In Sitemap + crawl mode the sitemap gets half of Most addresses to check and Most pages to read up front. The crawl gets the rest, and leftover sitemap entries fill any room at the end.

Can it check pages behind a login, or pages built by JavaScript? No. It checks public addresses over plain HTTP. Links that only appear after JavaScript runs are not seen.

Does it respect robots.txt? Yes, including Crawl-delay (up to 10 seconds). Requests to one site start at least 250 ms apart by default, and never more than two run at once on one site.

Is it legal? It requests each public address once, as a browser would, and reads the response. Check sites you own, manage, or have permission to test.

Can I run it on a schedule? Yes. Save your input as a task and add an Apify schedule, for example every Monday. Add a webhook or the Google Sheets integration to get the broken links where you work.

Related tools Pair it with Bulk Lighthouse Site Audit (same developer) for speed, Core Web Vitals, accessibility and SEO scores on every page.

Something went wrong. Open an issue on the Actor's Issues tab with the run link.