Skip to content
Gaurav TiwariDocs

Find and Fix Broken Links

Version 1.7.0 Updated October 27, 2026

Find broken links in WordPress posts and pages, then replace or unlink them without opening each post.

Overview

Link Health finds broken links in WordPress by checking every link stored in your published posts and pages. It tells you which links are broken, which redirect and which it couldn’t confirm, and you fix them from the same screen: replace the URL, unlink it or ignore it. Scans run in small batches, so a site with thousands of posts doesn’t time out or flood other servers with requests.

The module is off by default. Turn it on, then open Link Health from the Functionalities dashboard. Only administrators can run scans.

  • Published posts and pages. Drafts, private posts and password-protected content are skipped.
  • Links written as <a href> in the stored post content, including relative links, which are resolved against the post URL.
  • Only http and https links. Mail, phone and same-page #anchor links are ignored, and any #fragment is stripped before the check.
  • Up to 1,000 unique links per post. Longer reports are marked First 1,000 unique links only.

Anything WordPress builds while rendering the page is out of reach: dynamic blocks, shortcodes, navigation menus and page builder output. A scan never changes your content.

Run a Scan

  1. Click Start new scan.
  2. Keep the page open. The progress bar, completed-post count, checked-link count and results update on their own.
  3. Click Stop scan to pause. The current batch finishes first, and Resume scan picks up from the same post.

Each batch checks at most four links within a ten-second budget. While the page is open, batches run back to back. If you leave or switch tabs, browser batches pause and WordPress cron takes over about once a minute, so the scan still finishes, just slower. That depends on WP-Cron or your host’s cron runner working.

Weekly scans are a separate opt-in. Tick Scan weekly in small background batches in the module settings, and a fresh scan starts once a week.

Read the Results

Results show 50 links per page across all scanned posts, with the source, the link, the result and HTTP code, and the last check time in UTC. Redirect chains are listed under the link.

ResultWhat it means
BrokenA GET request confirmed 404 or 410. Fix these first.
RedirectedThe link redirected, up to four hops, and the final URL answered. Point the link at the final URL to skip the hop.
InconclusiveTimeout, rate limit, login wall, server error or too many redirects. Open it in a browser before you change anything.
Unsafe URLThe link points to localhost, a .local or .internal host or a private IP range, so it is never requested.
OKThe URL answered with a 2xx response.
IgnoredYou marked the link as fine.
Not checkedThe link hasn’t been reached yet, or was added after that post was scanned.

Why so strict about Broken? Plenty of sites answer bots with 403 or 429, or reject HEAD requests. Calling those broken would send you chasing links that work fine in a browser, so Link Health only says Broken when the server confirms the page is gone.

Two notes can appear under a source. Content changed. Run a new scan. means the post was edited after its report was saved. Partial scan means the scan stopped before it finished that post.

  • A HEAD request goes first. A GET request follows only to confirm a 404, 410, 405 or 501 answer.
  • Each request has a 3-second timeout, and each URL gets 8 seconds in total, redirects included.
  • Requests send no cookies and read at most 4 KB of the response.
  • Each unique URL is checked once and cached: 1 day for OK, Broken and Redirected, 1 hour for Inconclusive and Unsafe URL. A link used in 40 posts is requested once.

Filter and Export Results

Narrow the list with Result, Source type (posts, pages or both) and a search box that matches the URL or the source title. Click Filter results, or Reset to clear them.

Export CSV downloads functionalities-link-health.csv with the current filters applied. The columns are Post ID, Title, URL, Status, HTTP, Checked UTC, Stale, Complete and Truncated.

ActionWhat it does
RecheckChecks the URL again right away, skipping the cache. It also clears Ignored.
IgnoreMarks the link as fine. Recheck brings it back.
Replace URLSwaps every matching link in that one post for a new URL.
UnlinkRemoves matching links in that one post and keeps their text and images.

Replace URL and Unlink open a dialog first. Click Preview change to see how many links in the post will change, then Apply change. Only that post is edited, WordPress saves a revision before the change, and an existing #fragment stays unless the new URL has its own. You need permission to edit the post, and the change is refused while someone else has it open.

Some links can’t be changed safely from this screen: links set in block settings or block bindings, nested or unclosed links, and unlinking a File block. Link Health asks you to edit those in the post editor. After any fix, run a new scan to refresh that post’s report.

Fixing a broken internal link? If the page moved, also add a redirect in the Redirect Manager, so links from other sites keep working.

Privacy and Storage

  • Link Health requests the sites your content links to. Those requests are the only thing it sends off your server.
  • Scan state lives in a guarded file in the private wp-content/functionalities/ folder. Reports, link counts and ignored links are post meta, and URL results are transients that expire.
  • Turning the module off clears its scheduled scans.

See Security and Privacy for how the private folder is protected.

Share

Was this helpful?

Still stuck? Open a support ticket