Title: LinkTender – Local Broken Link Checker
Author: linktender
Published: <strong>October 19, 2026</strong>
Last modified: October 19, 2026

---

Search plugins

![](https://ps.w.org/linktender/assets/banner-772x250.png?rev=3753856)

![](https://ps.w.org/linktender/assets/icon-256x256.png?rev=3753856)

# LinkTender – Local Broken Link Checker

 By [linktender](https://profiles.wordpress.org/linktender/)

[Download](https://downloads.wordpress.org/plugin/linktender.1.1.2.zip)

 * [Details](https://wordpress.org/plugins/linktender/#description)
 * [Reviews](https://wordpress.org/plugins/linktender/#reviews)
 *  [Installation](https://wordpress.org/plugins/linktender/#installation)
 * [Development](https://wordpress.org/plugins/linktender/#developers)

 [Support](https://wordpress.org/support/plugin/linktender/)

## Description

LinkTender checks the links and images in your content from your own server, in 
small background batches, and lists the ones that are broken, redirected or could
not be verified. It needs no account and no API key, and it sets no limit on the
number of links. Your content is not sent to any outside service.

**How link results are decided**

 * A link is marked **Broken** when the server answers 404 (Not Found) or 410 (Gone).
   The result is re-checked over the next 24 hours.
 * Temporary problems (timeouts, 5xx server errors, DNS or connection failures) 
   are retried three times over 24 hours (after 2, 10 and 24 hours). The link is
   marked Broken only if it still fails after the last retry.
 * When a site blocks automated requests, the link is marked **Unverified** instead
   of Broken. This covers bot challenge pages (for example Cloudflare or Amazon’s
   captcha page), 401, 403 and 429 answers, and the 400 and 999 codes that Facebook
   and LinkedIn return to automated requests. You can open these links in your browser
   and click **Mark as fine**.
 * If your own server cannot reach the internet, or cannot reach its own site, the
   affected links are marked Unverified (or keep their earlier status) and are checked
   again later.
 * Links to your dashboard (wp-admin) and login page are not checked.

**Gentle on your server and database.**

 * Checks run in time-boxed background batches (WP-Cron, or Action Scheduler when
   another plugin provides it) with a lock, so two batches never overlap.
 * A few links are checked at the same time, always on different domains. Requests
   to the same domain are spaced out, and each request has a timeout.
 * Tested on a site with 20,000 posts and over 90,000 unique links: each batch stays
   under about 1,300 database queries and 65 MB of memory.
 * HEAD requests are tried first, with a GET fallback for servers that answer HEAD
   badly. Up to 5 redirects are followed.
 * Data lives in two small tables of its own. WordPress core tables are never altered.
 * A “Pause checking” switch and a Health screen showing table sizes, the last batch
   and the queue.

**What gets scanned**

 * Posts, pages and every public custom post type, plus synced patterns and navigation
   blocks
 * Gutenberg blocks (links, buttons, images, embeds, navigation links)
 * Elementor page data (text, buttons, images)
 * Shortcode-based page builders such as Divi, WPBakery and Avada: URLs in shortcode
   settings (buttons, images, video, `link="url:..."`) are read as text. No shortcode
   is run to do this.
 * Approved comments (links in the comment text) and, optionally, commenters’ website
   links
 * Custom fields, including ACF text and URL fields
 * Navigation menus (custom links) and widgets, both classic and block widgets
 * Excerpts, images, iframes, video, audio and embeds

**Fix links in one click**

 * One row per URL, listing every place it appears.
 * **Edit URL** replaces it everywhere: post content (including shortcode settings),
   custom fields, Elementor data, comments, menus and widgets.
 * **Unlink** removes the link and keeps the text.
 * **Use final URL** updates redirected links to their destination. It is not offered
   when a redirect ends on a login, consent or captcha page.
 * **Recheck**, **Mark as fine** or **Ignore domain**.
 * Filter by status (broken, redirected, unverified), location, link type or domain,
   and search by URL.

**Import settings from another link checker**

If the Broken Link Checker plugin was used on the site before, LinkTender  Health&
Tools can import its exclusion list, check interval, timeout, front-end options 
and dismissed links. That plugin’s data is only read, never changed.

Broken links are not changed on your public site unless you turn on the optional
strike-through or rel=”nofollow”.

**Privacy and outgoing requests:** LinkTender sends no data to us or anyone else,
and it has no update checks, licence calls or tracking. Activating the plugin only
creates its two tables; it prints nothing, schedules nothing and makes no outgoing
requests, and front-end page views are not changed. Link checking starts only after
an administrator clicks **Start checking links** on the LinkTender screen. Deactivating
the plugin stops checking; after re-activation it waits for the button again. From
then on, the only outgoing requests are the link checks themselves, which go to 
the URLs found in your content. An optional “Connectivity check” setting (off by
default) lets LinkTender send one HEAD request to wordpress.org, at most every 10
minutes, when checks fail at the network level, to find out whether your server 
is online. No data is sent with it.

### External services

LinkTender does not rely on any external service, and it sends no data about your
site or its visitors to us or to anyone else.

 * **Link checks.** After an administrator clicks **Start checking links**, LinkTender
   sends a HEAD request (or a GET request when a server answers HEAD badly) to each
   URL found in your own content, to see whether it still works. Each request goes
   only to the address of that link, and carries only standard browser-style request
   headers (no cookies, and no information about your site or its visitors). Nothing
   is requested before the button is clicked, and checking stops when you pause 
   or deactivate the plugin.
 * **Optional connectivity check (wordpress.org), off by default.** Only if you 
   turn on the connectivity check under LinkTender  Settings (“ask wordpress.org
   whether this server is online”), and only when a link check fails at the network
   level (DNS error, refused connection or timeout), LinkTender sends one HEAD request
   to https://wordpress.org/ (at most once every 10 minutes) to find out whether
   your server is online. No data is sent with it. WordPress.org [terms of service](https://wordpress.org/about/tos/)
   and [privacy policy](https://wordpress.org/about/privacy/).

## Screenshots

[⌊All problem links in one list: broken, redirected and unverified, with where each
one appears.⌉⌊All problem links in one list: broken, redirected and unverified, 
with where each one appears.⌉[

All problem links in one list: broken, redirected and unverified, with where each
one appears.

[⌊Bot-protected and rate-limited links are shown as "Unverified".⌉⌊Bot-protected
and rate-limited links are shown as "Unverified".⌉[

Bot-protected and rate-limited links are shown as “Unverified”.

[⌊Link details: replace the URL everywhere, unlink, recheck or mark as fine.⌉⌊Link
details: replace the URL everywhere, unlink, recheck or mark as fine.⌉[

Link details: replace the URL everywhere, unlink, recheck or mark as fine.

[⌊Settings: choose what to scan and how gently to check.⌉⌊Settings: choose what 
to scan and how gently to check.⌉[

Settings: choose what to scan and how gently to check.

[⌊Health & Tools: background runner, scan progress, table sizes, pause switch and
Broken Link Checker import.⌉⌊Health & Tools: background runner, scan progress, table
sizes, pause switch and Broken Link Checker import.⌉[

Health & Tools: background runner, scan progress, table sizes, pause switch and 
Broken Link Checker import.

## Installation

 1. Install and activate the plugin from Plugins  Add New, or upload the `linktender`
    folder to `/wp-content/plugins/`.
 2. Open **LinkTender** in the admin menu and click **Start checking links**. Nothing
    is scanned or checked before that. The first scan then runs in the background, 
    and results appear as links are checked.
 3. Optionally, adjust what is scanned under **LinkTender  Settings**.

If your host disables WP-Cron (`DISABLE_WP_CRON`), make sure a real cron job calls`
wp-cron.php` every few minutes.

## FAQ

### Do I need an account, an API key or a paid plan?

No. Everything runs on your own server. There are no quotas and no limits on the
number of links.

### Why is a link “Unverified” instead of “Broken”?

The site behind the link blocked our automated check. This can be a Cloudflare or
other bot challenge, a login wall (401/403) or a rate limit (429). That says nothing
about whether the page works for real visitors, so LinkTender does not call it broken.
Open the link in your browser. If it works, click **Mark as fine**.

### When is a link reported as broken?

A link is reported as broken right away when the server answers 404 (Not Found) 
or 410 (Gone). This includes links to your own pages that no longer exist. The link
is then re-confirmed over the next 24 hours. Timeouts, server errors (5xx), DNS 
failures and refused connections are retried 2, 10 and 24 hours after the first 
failure, and the link is only marked broken if it still fails after that. If your
own server is offline or cannot connect to itself, nothing is marked broken; those
links are checked again later.

### Will it slow down my site?

Checks run in the background in short batches: by default up to 50 links or 20 seconds
every 5 minutes, or every minute while there is a backlog. Four links are checked
at a time, each on a different domain, with a pause between requests to the same
domain. Visitors’ page loads do not run checks. You can lower the batch size, check
one link at a time, or pause checking at any time.

### How long does the first check take on a big site?

Expect roughly 1,000 to 2,500 links an hour, depending on how quickly the linked
sites answer. A site with 50,000 unique links needs about a day for its first full
check. Finding the links in the first place reads 250 posts per batch, so a 20,000-
post site is fully indexed after about 80 batches (about 80 minutes when WP-Cron
runs every minute). Links in posts you save are picked up straight away.

### Does it change my content?

Only when you click **Edit URL**, **Unlink** or **Use final URL**. Post edits go
through WordPress, so a revision is created and you can undo them.

### Does it work with page builders?

Gutenberg and Elementor content is scanned and can be edited. For shortcode-based
builders (Divi, WPBakery, Avada and similar), the URLs written in shortcode settings
are found and can be edited too. LinkTender reads them as text and never runs the
shortcodes, so scanning has no side effects. Other builders that store links in 
post content or plain custom fields are scanned as well.

### Does it check links in comments?

Yes. Links in the text of approved comments are scanned and can be edited or unlinked.
Pingbacks, trackbacks and comments that are pending, spam or in the trash are left
out. Checking commenters’ website links is an option under Settings (off by default).
You can also turn comment scanning off there.

### Does it work on multisite?

Yes. Activate it per site, or network-activate it. Network activation creates the
tables on every site in the network, however many there are (in batches of 100; 
on very large networks any site not reached within the activation request sets itself
up the first time its dashboard is opened). New sites get their tables when they
are created, and deleting a site removes its tables. Each site has its own schedule,
and checking starts on a site when one of its administrators clicks **Start checking
links**.

### Where is the data stored?

In two tables, `{prefix}linktender_links` and `{prefix}linktender_instances`. Deleting
the plugin from the Plugins screen removes them and all of the plugin’s options.

### For developers: can I extend it?

Yes. Use `linktender()` to reach the services (links, scanner, checker, queue, editor).
Hooks include `linktender_loaded`, `linktender_link_checked`, `linktender_link_status_changed`,`
linktender_check_result`, `linktender_request_args`, `linktender_retry_intervals`,`
linktender_concurrency`, `linktender_extracted_urls`, `linktender_scan_extra_sources`,`
linktender_edit_source`, `linktender_bulk_actions`, `linktender_list_columns`, `
linktender_settings_fields` and `linktender_admin_menu`.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“LinkTender – Local Broken Link Checker” is open source software. The following 
people have contributed to this plugin.

Contributors

 *   [ linktender ](https://profiles.wordpress.org/linktender/)

[Translate “LinkTender – Local Broken Link Checker” into your language.](https://translate.wordpress.org/projects/wp-plugins/linktender)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/linktender/), check
out the [SVN repository](https://plugins.svn.wordpress.org/linktender/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/linktender/) by 
[RSS](https://plugins.trac.wordpress.org/log/linktender/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.1.2

 * No error pages from the plugin: an expired link or a missing permission on a 
   LinkTender action now sends you back to the LinkTender screen with an explanation,
   and nothing is changed. The plugin no longer calls wp_die().
 * The version check and the `linktender()` helper moved into their own files; the
   main plugin file declares no functions.
 * Readme: new “External services” section describing the link checks and the optional
   wordpress.org connectivity check.

#### 1.1.1

 * Front-end page views never write to the database: tables are created or upgraded
   only on activation, on admin screens and in background batches, and content that
   changes during a front-end request (a visitor’s comment, or WordPress creating
   its default navigation menu) is parsed by the next background batch.
 * Nothing is tracked or scheduled before an administrator clicks **Start checking
   links**. Deactivation stops checking; after re-activation it waits for the button
   again. Network activation no longer schedules a background event.
 * Unsupported PHP or WordPress versions now only show an explanation on the Plugins
   screen and Dashboard; the plugin then loads nothing.
 * A notice explains when the server cannot send HTTP requests (no cURL or stream
   sockets).
 * Admin CSS is scoped under the plugin’s own wrapper; database-size readings stay
   quiet on databases without information_schema (e.g. SQLite).
 * Uninstall also removes the remaining plugin options and notices.

#### 1.1.0

 * New: links in approved comments are scanned, and can be edited or unlinked from
   the LinkTender screen. Commenters’ website links can be included with an option(
   off by default).
 * New: URLs in shortcode settings (Divi, WPBakery, Avada and similar shortcode-
   based builders) are found and can be edited. Shortcodes are read as text and 
   never run.
 * Sites where checking already runs scan their content once more after the update
   so these links get picked up. Nothing is scanned on sites where checking has 
   not been started.

#### 1.0.3

 * Activation only creates the plugin’s tables (with dbDelta). It prints nothing,
   makes no outgoing requests and schedules nothing.
 * Link checking now starts only after an administrator clicks **Start checking 
   links** on the LinkTender screen. Sites that already ran 1.0.x keep checking.
 * The wordpress.org connectivity check is now an opt-in setting (off by default).
   Without it, the server counts as offline after several different domains in a
   row could not be reached.
 * Multisite: network activation sets up every site, in batches, with no 200-site
   limit. Network deactivation clears the schedule on every site, uninstall cleans
   up every site, and deleting a site drops its tables.
 * Admin CSS and JavaScript load only on the LinkTender screens (exact screen check).
 * PHP and WordPress versions are checked; on an unsupported server the plugin loads
   nothing and shows a notice.

#### 1.0.2

 * Readme: clearer description of how links are marked Broken, Redirected or Unverified,
   and of the retry schedule.
 * Readme and plugin header: wording now describes only what the plugin does.
 * No changes to checking behaviour or stored data.

#### 1.0.1

 * Faster checking: up to four links are checked at the same time, always on different
   domains. While there is a backlog, batches run every minute instead of every 
   five.
 * Large sites: scanning content now uses bulk database writes and reads at most
   250 posts per batch. A batch on a 20,000-post site went from about 26,000 to 
   about 1,300 database queries.
 * Amazon’s captcha page is recognised as a bot check, and the 400 and 999 codes
   that Facebook and LinkedIn send to automated requests get a plain explanation.
   Both are shown as Unverified.
 * If your server cannot reach the internet, or cannot connect to its own site, 
   links are marked Unverified (or keep their status) instead of becoming broken.
 * Links to wp-admin and the login page are no longer checked.
 * “Use final URL” is hidden when a redirect ends on a login, consent or captcha
   page.
 * A batch no longer waits behind one busy domain: links on other domains are picked
   first.
 * A one-time review request after your first successful fix.

#### 1.0.0

 * First release.

## Meta

 *  Version **1.1.2**
 *  Last updated **8 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [404](https://wordpress.org/plugins/tags/404/)[broken links](https://wordpress.org/plugins/tags/broken-links/)
   [link checker](https://wordpress.org/plugins/tags/link-checker/)[redirects](https://wordpress.org/plugins/tags/redirects/)
   [seo](https://wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://wordpress.org/plugins/linktender/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/linktender/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/linktender/reviews/)

## Contributors

 *   [ linktender ](https://profiles.wordpress.org/linktender/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/linktender/)