close

Broken link checker and monitor for your website

Linkbruno crawls your pages on a schedule, checks every link on them, and tells you by email or Slack when one stops working, with the page it’s on and how to fix it.

Free scan, no signup. We check up to 25 pages and every link on them.

Works with
  • Email
  • Slack
  • GitHub Actions
  • Claude Code
  • Cursor
  • ChatGPT
A site in Linkbruno: 9 open problems, with a dead link in the site's footer, a parked domain and a missing image listed first

Links break after you publish them

We checked the links in 11,000 popular Hacker News stories, 1,000 from each year from 2015 to 2025.

10,962
links checked
19%
of links from 2015 are dead
4%
of links from 2025 are dead already
Read the study
Dead links, by the year the story was posted

2015: 19%, 2016: 17%, 2017: 14%, 2018: 12%, 2019: 10%, 2020: 10%, 2021: 10%, 2022: 9%, 2023: 5%, 2024: 4%, 2025: 4%

Why a one-off check isn’t enough

Links break a few at a time, long after you publish them. A docs page moves, a partner rebuilds their site, or a domain you linked to expires and someone else buys it. Your page still loads fine, so nobody notices.

  1. Day 1

    The day you publish

    You run a link checker before the post goes live. All five links work, and the report says so.

  2. Month 3

    Three months later

    A partner rebuilds their site and the case study you linked to is gone. Your link now leads to a 404 page. The report from launch day still says all five links work.

  3. Year 1

    A year later

    Your docs move to a new version. The install guide link still gets there, but through four redirects, and each of them is one more rule that can break.

  4. Year 2

    Two years later

    The sponsor you thanked lets their domain expire, and someone else buys it. Your link now opens a parked page full of ads.

One-off checkers

They show what’s broken on the day you run them. Anything that breaks next month stays hidden until someone remembers to run one again.

Desktop crawlers

Tools like Screaming Frog are thorough, but they only run when someone opens them and presses start.

SEO audit suites

Broken links show up in a weekly report next to hundreds of other findings, and there’s no way to say a link that returns 403 is fine.

Linkbruno checks on a schedule, alerts you only when something changes, and lets you mark a finding as intentional so you stop hearing about it.

How it works

Linkbruno visits your pages the way a reader would, on a schedule, and messages you when something changes.

Crawls your site

Starts from your homepage and sitemap and works outward until it reaches your page limit. Links to other sites get checked, but we don’t crawl those sites. We follow robots.txt and open one connection per host at a time.

harbor.example
  • /blog
    • /blog/v2-launch
      • partner.example/case-study404
      • docs.example/install4 hops
    • /blog/pricing-update
  • /docs
    • /docs/setup
      • status.vendor.example
  • /pricing
Your pages, crawledOther sites, checked only

Checks every link

Sends a HEAD request first, and a GET if the answer looks wrong. Redirects are followed one hop at a time, so you can see the whole chain.

  1. http://docs.example/install301
    HEAD
  2. https://docs.example/install301
    HEAD
  3. https://docs.example/v2/install405
    HEADRefused, so we ask again with GET
  4. https://docs.example/v2/install200
    GET
Working. Reached the page after 2 redirects.

Alerts you when something changes

A link that stays broken for a week sends one alert, not seven. A link that fails is checked again a minute later, and we only tell you if it fails both times, so a server that hiccups doesn’t set off an alert.

Mon
Broken
Tue
Wed
Thu
Fri
Sat
Sun
Fixed
Mon
  • First failure, checked again a minute later
  • Still broken, no new message
Linkbruno#web-team, Tue 06:04
Harbor: 1 broken link

This link has stopped working.

  • Link is dead (404)
    partner.example/case-study

Runs in your CI

Add the check to your pipeline and a pull request that adds a broken link fails its build, because we check the preview before it merges. Slack and email cover everything else.

Pull request #214Check failed
$ sh linkbruno-check.sh --site docs --url "$PREVIEW_URL"
linkrot: check 1842 started for https://pr-214.docs.example/.
Linkbruno checked the preview at https://pr-214.docs.example/: read 86 pages and checked 412 links.
2 links break the check.

  FAIL  Link is dead (404)
        https://partner.example/case-study
        on https://pr-214.docs.example/guides/setup ("case study")

  FAIL  Image is missing
        https://pr-214.docs.example/img/flow.png
        on https://pr-214.docs.example/guides/setup
Process exited with code 1

What you see in Linkbruno

Problems come sorted into what to fix first, dead links to other sites, and the rest. Repeats fold into one row, so 130 links to one share button are one decision.

Every page a link is on, and the words around it

Open a problem to see each page that carries the link, whether it sits in the text, the menu or the footer, and the sentence around it. For a dead link to another site we find the Wayback Machine’s last copy, so you have a replacement ready. Fixed it? Check again re-reads those pages now instead of at the next crawl.

How to fix each kind of broken link
One problem opened: the page that links to it, the sentence around the link, the fix, and an archived copy from March 2025

Hand the list to your AI

Pick a prompt and one click opens Claude or ChatGPT with it, and with a private link that gives the chat your whole fix list. Coding agents like Claude Code and Cursor connect over MCP, read the list, fix the links in your repository and check them again.

Connect Claude Code, Cursor or VS Code
The Use with AI tab: a chat or your code, a prompt with the private link in it, and buttons that open it in Claude or ChatGPT

All your sites on one screen

Each site shows its open problems and when it was last crawled. Add a site by its address and the first crawl starts straight away.

Four sites, with the number of open problems and the time of the last crawl for each

What it checks

The free scan and the paid plans run the same checks. Pick one to see what it looks for and how you’d fix it.

Can readers reach it?

  • Passes when
    Destination exists
    What to do

    The page this links to is gone. Point the link at the page that replaced it, or remove it. If it was your own page, restore it or add a 301 redirect to its new address.

    How to fix a dead link

Do redirects land in the right place?

Is the content still there?

Is it still safe to link to?

Housekeeping

Pricing

Every plan runs every check, and every plan gets the fix list, CSV export, archived copies and the AI agent link and MCP server. Plans differ in how many sites and pages you can monitor, how often we crawl, and how long we keep history.

Free
$0forever
  • 1 site
  • 500 pages per crawl
  • Weekly crawls
  • Email alerts
  • 30 days of history
Start free
Starter
$12per month
  • 3 sites
  • 2,500 pages per crawl
  • Daily crawls
  • Slack and email
  • 90 days of history
Choose Starter
Team
$29per month
  • 10 sites
  • 10,000 pages per crawl
  • Daily crawls
  • Slack and email
  • 1 year of history
  • CI check on previews
Choose Team
Agency
$99per month
  • 50 sites
  • 20,000 pages per crawl
  • Daily crawls
  • Slack and email
  • 1 year of history
  • CI check on previews
Choose Agency

If you downgrade, sites over your new limit are paused. We keep their history, so nothing is lost if you upgrade again.

Security

We only look at public pages, and we store as little about them as we can.

  1. https://files.partner.example/report302
    GET
  2. http://10.0.0.12/adminBlocked
    GETPrivate address. We never sent the request.
The redirect pointed at a private address, so the check stopped there.

Public pages only

We only fetch what an anonymous visitor could see, and we never ask for a login to your site.

Your robots.txt is followed

We read one page at a time with a pause between requests, keep out of whatever your robots.txt disallows, and back off when a server says it’s busy.

No private networks

Before every connection, including each redirect hop, we check that the address isn’t on a private or reserved network.

Minimal storage

We don’t keep page contents, only URLs, status codes, hashes and short excerpts. Alert destinations are encrypted at rest.

Questions

What does the free broken link checker do?
Why are some links “blocked” instead of broken?
Do broken links hurt SEO?
Does it work with WordPress, Shopify, Squarespace and Webflow?
Does it find links added by JavaScript?
Will the crawler slow my site down?
Can I check a list of URLs, or one page?
How is it different from Screaming Frog or a WordPress plugin?

See what’s broken on your site

The free scan takes about a minute.

No signup needed.

Monitor a site for free

One site, up to 500 pages, checked every week, with email alerts. No card needed.

Start free