Title: PlugUpp Link &amp; Image Health Audit: Broken Link, Broken Image and Mixed Content Checker
Author: PlugUpp
Published: <strong>July 10, 2026</strong>
Last modified: October 17, 2026

---

Search plugins

![](https://ps.w.org/plugupp-link-image-health-audit/assets/banner-772x250.png?rev
=3602683)

![](https://ps.w.org/plugupp-link-image-health-audit/assets/icon.svg?rev=3602683)

# PlugUpp Link & Image Health Audit: Broken Link, Broken Image and Mixed Content Checker

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

[Download](https://downloads.wordpress.org/plugin/plugupp-link-image-health-audit.1.7.1.zip)

 * [Details](https://en-au.wordpress.org/plugins/plugupp-link-image-health-audit/#description)
 * [Reviews](https://en-au.wordpress.org/plugins/plugupp-link-image-health-audit/#reviews)
 *  [Installation](https://en-au.wordpress.org/plugins/plugupp-link-image-health-audit/#installation)
 * [Development](https://en-au.wordpress.org/plugins/plugupp-link-image-health-audit/#developers)

 [Support](https://wordpress.org/support/plugin/plugupp-link-image-health-audit/)

## Description

PlugUpp Link & Image Health Audit is a broken link checker that checks the links
and images your visitors actually see. It finds broken links, broken images, mixed
content and SSL problems by rendering each of your own pages through the normal 
front-end pipeline and inspecting the final HTML – so it catches links and images
injected by themes, menus, widgets, footers and page builders that database-only
checkers miss.

Everything runs on your own server. There is no external crawler and no per-link
quota. Link checks run on your own server. No page content or link data leaves your
site unless you turn on the premium Safe Browsing check, which sends external URLs
to Google. If you opt in, the plugin sends PlugUpp a weekly summary of which settings
you changed, never content or addresses.

> **Upgrade to Premium** for a Learning Engine that tunes itself to your site, scheduled
> scans and email reports, change detection, soft-error and Safe Browsing checks,
> rule-based exclusions and CSV export. [See plans and pricing](https://plugupp.com/plugins/link-image-health-audit/)

#### What you get on the free plan

 * **Rendered-page scanning** – checks the links and images that actually ship to
   visitors, including those added by your theme, menus, widgets, footers and page
   builder that database-only checkers never see
 * **Links, images and resources** – internal and external links, images, and page
   resources (CSS, JS, icons, fonts)
 * **All your content types** – posts, pages, and any public custom post type, including
   WooCommerce products
 * **Unpublished content too** – optionally scan drafts, scheduled, pending and 
   private content, so links are checked before they go live
 * **Clear verdicts** – broken links and images, SSL and certificate problems, permanent
   and temporary redirects, and hosts that refuse automated visitors, counted separately
   as “Not checkable” rather than reported as broken
 * **Mixed content detection** – flags images, embeds and page resources that load
   over plain HTTP on your HTTPS site, which browsers block or downgrade
 * **Archived-copy links** – every broken external link gets a “View archived copy”
   link to the Wayback Machine, so you can see what the dead page said or pick a
   replacement
 * **By URL and By page views** – sorted worst-first, with separate Issues, Warnings
   and Notices counts so you can triage at a glance
 * **Drill-down with evidence** – see exactly which pages a broken URL appears on,
   and open the page source with the offending link or image highlighted in context
 * **URL parameter handling** – cache-busters and tracking tags (ver, utm_source,
   fbclid and the like) are ignored so the same resource is not counted as many 
   different URLs; the common ones are pre-filled, and you can add your own
 * **Exclude and ignore** – exclude pages from scanning individually, from the Exclusions
   screen, or in bulk from the standard Posts and Pages screens; ignore individual
   URLs
 * **Built-in log viewer** – file-based logging with a viewer on the Logs tab
 * **No quotas, checks stay local** – scan as much as you like. Link checks run 
   on your own server. No page content or link data leaves your site unless you 
   turn on the premium Safe Browsing check

Password-protected content is never scanned – there is no way to render it without
the password. Unpublished content is off by default; when you enable it, drafts,
scheduled, pending and private posts are rendered privately for the scan only and
never shown to visitors.

#### What Premium adds

The premium version is a separate plugin, delivered from plugupp.com, that adds 
intelligence, automation and reporting – still entirely on your own server.

 * **URL Parameter Learning Engine** – watches the parameters in your own scans 
   and suggests the cache-busters and tracking tags worth ignoring, each with evidence,
   a live example you can open both ways, and a one-click add
 * **Image alt-text audit** – finds images with missing, empty or suspicious alternative
   text on the rendered page – including the media-library divergences no database
   tool can see – with WCAG-anchored findings and review tiers
 * **Scheduled scans** – run scans automatically on the schedule you choose, on 
   standard WordPress cron
 * **Email reports** – get the results by email, every run or only when something
   needs attention
 * **Change detection** – a changes-since-last-scan digest: what newly broke, what
   changed, what got fixed
 * **Soft-error detection** – catches pages that return 200 OK but actually show
   an error, a parked domain or an expired-site notice
 * **Google Safe Browsing checks** – check external destinations against Google’s
   malware and phishing lists, with your own API key
 * **Rule-based exclusions** – auto-exclude whole patterns of content by post type,
   category or tag, author, or URL shape; save rule sets and carry them between 
   sites
 * **One-click filters and CSV export** – narrow any view to a specific issue type
   and export it
 * **Multi-site licences** – one licence covers 1, 3, 5 or unlimited sites

[See the full plan comparison and pricing](https://plugupp.com/plugins/link-image-health-audit/)

### External services

This plugin connects to the following external services.

#### Link and image URLs found on your pages

Checking a link or image means requesting the URL to see whether it resolves. This
is the core function of the plugin.

 * When data is sent: during a scan, for every unique external link, image or resource
   URL found in your pages’ rendered output.
 * What data is sent: nothing beyond the HTTP request to the URL itself, made only
   to read its response status (for example 200, 404, or a redirect). Only URLs 
   that already appear on your own pages are contacted. Internal links are checked
   against your own server.

The plugin also renders your own pages by requesting them on your own server (a 
self-request); that is your site contacting itself, not a third-party service.

#### Google Safe Browsing (Premium, optional)

If you enable Safe Browsing checks and provide your own Google API key, the plugin
checks external link destinations against the Google Safe Browsing threat lists.

 * When data is sent: during a scan, only when you have entered a Google API key.
   With no key, this feature is off and nothing is sent.
 * What data is sent: the external URLs found in your scan are sent to the Google
   Safe Browsing Lookup API to check them against Google’s malware and phishing 
   lists.
 * Terms of service: https://cloud.google.com/terms
 * Privacy policy: https://policies.google.com/privacy

#### PlugUpp settings usage (optional)

If you allow it, the plugin sends PlugUpp a summary of which settings you change
and which plugin screens you open, with no content, addresses or names, to https://
usage.plugupp.com. It helps us simplify the plugin. It is part of the PlugUpp opt-
in you can decline, and you can turn it off at any time on the plugin’s Logs tab.

 * When data is sent: only if you opted in to the plugin’s Freemius connection, 
   where “Settings usage” is listed, and “Share settings usage” on the plugin’s 
   Logs tab is on (it is on after you opt in, and you can turn it off there at any
   time). Once a week, and once within a day of saving the plugin’s settings. Never
   when a visitor views your site. Turning it off, or opting out of the connection,
   stops sending and sends one request to delete what was stored for this install.
 * What data is sent: the plugin’s name, version and plan (free or premium), the
   WordPress and PHP versions, a random install ID made on your site, which settings
   differ from their defaults (for a setting with a fixed set of options, the option
   chosen; for text and lists, only that it changed and how many items it holds),
   how often each settings group and tab was opened, and when the setup steps were
   completed, counted from when the plugin first ran.
 * What is never sent: your site address, email addresses, names, page or post content,
   passwords or keys, or any Freemius identifier. The service does not store your
   IP address.
 * Terms of service: https://plugupp.com/terms-of-service/
 * Privacy policy: https://plugupp.com/privacy-policy/
 * Legal notice: https://plugupp.com/legal-notice/

#### Freemius

The plugin uses the Freemius platform for licence activation, plan changes, plugin
updates (for paid plans), and as the Merchant of Record for purchases.

 * When data is sent: on first plugin activation as part of the user-consented opt-
   in flow, on licence activation or deactivation, on plugin update checks (paid
   plans), and on uninstall (for optional feedback). Sending the initial opt-in 
   data is the user’s choice – declining the opt-in still lets the plugin work in
   full. Scanning is fully local and never requires the connection.
 * What data is sent: standard Freemius opt-in data including site URL, administrator
   email address, WordPress version, PHP version, plugin version, and active theme
   name.
 * Terms of service: https://freemius.com/terms/
 * Privacy policy: https://freemius.com/privacy/

## Screenshots

[⌊The dashboard - scan controls, the colour-coded Issues, Warnings and Notices summary,
and the By URL results listing every unique link and image with its verdict, with
hosts that refuse automated visitors counted separately as Not checkable.⌉⌊The dashboard-
scan controls, the colour-coded Issues, Warnings and Notices summary, and the By
URL results listing every unique link and image with its verdict, with hosts that
refuse automated visitors counted separately as Not checkable.⌉[

The dashboard – scan controls, the colour-coded Issues, Warnings and Notices summary,
and the By URL results listing every unique link and image with its verdict, with
hosts that refuse automated visitors counted separately as Not checkable.

[⌊The By page view - every scanned page with its Issues, Warnings and Notices counts,
sorted worst-first for fast triage.⌉⌊The By page view - every scanned page with 
its Issues, Warnings and Notices counts, sorted worst-first for fast triage.⌉[

The By page view – every scanned page with its Issues, Warnings and Notices counts,
sorted worst-first for fast triage.

[⌊Finding details - a broken URL with the pages it appears on and quick actions,
so you can jump straight to the page or view the source.⌉⌊Finding details - a broken
URL with the pages it appears on and quick actions, so you can jump straight to 
the page or view the source.⌉[

Finding details – a broken URL with the pages it appears on and quick actions, so
you can jump straight to the page or view the source.

[⌊View source - the page re-rendered with the exact broken link or image highlighted
in context, so you can see where it lives.⌉⌊View source - the page re-rendered with
the exact broken link or image highlighted in context, so you can see where it lives
.⌉[

View source – the page re-rendered with the exact broken link or image highlighted
in context, so you can see where it lives.

[⌊The Exclusions screen - the pages you have excluded from scanning, with rule-based
auto-exclusion on paid plans.⌉⌊The Exclusions screen - the pages you have excluded
from scanning, with rule-based auto-exclusion on paid plans.⌉[

The Exclusions screen – the pages you have excluded from scanning, with rule-based
auto-exclusion on paid plans.

[⌊Settings - choose which content types are scanned in one list, with link checking
and scan speed folded under their headings until you need them.⌉⌊Settings - choose
which content types are scanned in one list, with link checking and scan speed folded
under their headings until you need them.⌉[

Settings – choose which content types are scanned in one list, with link checking
and scan speed folded under their headings until you need them.

[⌊The URL Parameter Learning Engine (Premium) - suggested parameters with the evidence,
a live example you can open both ways, and a one-click add.⌉⌊The URL Parameter Learning
Engine (Premium) - suggested parameters with the evidence, a live example you can
open both ways, and a one-click add.⌉[

The URL Parameter Learning Engine (Premium) – suggested parameters with the evidence,
a live example you can open both ways, and a one-click add.

[⌊The Images view (Premium) - every image whose alternative text needs attention,
as it was actually rendered, with a plain-English explanation and the WCAG technique
behind each finding.⌉⌊The Images view (Premium) - every image whose alternative 
text needs attention, as it was actually rendered, with a plain-English explanation
and the WCAG technique behind each finding.⌉[

The Images view (Premium) – every image whose alternative text needs attention, 
as it was actually rendered, with a plain-English explanation and the WCAG technique
behind each finding.

[⌊The Not checkable view - links whose host refused our automated request, counted
separately from real problems rather than reported as broken, each saying what was
actually observed, with a one-click way to confirm the link yourself.⌉⌊The Not checkable
view - links whose host refused our automated request, counted separately from real
problems rather than reported as broken, each saying what was actually observed,
with a one-click way to confirm the link yourself.⌉[

The Not checkable view – links whose host refused our automated request, counted
separately from real problems rather than reported as broken, each saying what was
actually observed, with a one-click way to confirm the link yourself.

## Installation

 1. Install from the WordPress.org plugin directory (Plugins > Add New), or upload 
    the plugin ZIP (Plugins > Add New > Upload).
 2. Activate the plugin.
 3. Open the Link Health screen and click “Scan now” in the Scan your site step to 
    check the links and images on your pages and posts. You can leave the page. The
    scan continues in the background.
 4. Review the By URL and By page tabs, and open any finding to see where it appears
    and view the source.

## FAQ

### How is this different from other broken link checkers?

Most checkers read links out of your database. This plugin renders each page the
way a visitor’s browser would and checks the links and images that actually ship–
including ones added by your theme, menus, widgets, footers and page builder, which
database-only checkers never see. It runs entirely on your own server, with no external
crawler and no per-link quota.

### Does it crawl my site?

No. It audits only your known WordPress content and the links and images those pages
output. It never follows links to discover new URLs like a crawler.

### Does it send my site anywhere?

No. Scanning is local. To check whether an external link or image works, the plugin
requests that URL directly from your server – but only URLs that already appear 
on your pages, and only to read their response. Google Safe Browsing checks are 
a Premium, opt-in feature that requires your own Google API key; without one, nothing
is sent to Google.

### Is the free plugin limited?

No. It is fully functional with no limits: it scans all your content – posts, pages,
custom post types and WooCommerce products, and optionally unpublished content –
and checks every link, image and resource. The premium version is a separate plugin,
delivered from plugupp.com, that adds the Learning Engine, scheduled scans and email
reports, change detection, soft-error and Safe Browsing checks, rule-based exclusions
and CSV export. [See the full plan comparison](https://plugupp.com/plugins/link-image-health-audit/)

### Are private or password-protected pages checked?

Password-protected pages are never scanned – there is no way to render them without
the password. Private, draft, scheduled and pending content is skipped by default,
but you can include it by enabling Unpublished content in Settings; it is rendered
privately for the scan only and never shown to visitors. Make a page public (or 
remove its password) and it is picked up on the next scan.

### A link shows as “Not checkable” rather than broken. What does that mean?

Plenty of large sites refuse automated requests while serving people normally – 
review sites, marketplaces, forums and social platforms all do it. The plugin tells
these apart from genuine failures and counts them under “Not checkable” rather than
as issues, so you are not chasing false positives. You can open the link, confirm
it works and mark it checked in one click.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“PlugUpp Link & Image Health Audit: Broken Link, Broken Image and Mixed Content 
Checker” is open source software. The following people have contributed to this 
plugin.

Contributors

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

[Translate “PlugUpp Link & Image Health Audit: Broken Link, Broken Image and Mixed Content Checker” into your language.](https://translate.wordpress.org/projects/wp-plugins/plugupp-link-image-health-audit)

### Interested in development?

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

## Changelog

#### 1.7.1

 * Re-sync of the shared agent-access component to 0.1.10

#### 1.7.0

 * New: an agent interface. An AI agent working on your site, such as Claude, can
   read what each scan found, link by link and page by page, in the same words the
   Dashboard uses. It can also read and change your settings, excluded pages, ignored
   links and the links you marked as checked, and save them as one file to apply
   later. It works through WP-CLI and, on WordPress 6.9 or later, the Abilities 
   API. Applying a change never starts a scan.
 * New (paid): an agent can also read and apply your exclusion rules and saved rule
   sets, and send a test email report to one address or to the plugin log only.
 * Fixed: when a linked site answered “too many requests” (429) or “temporarily 
   unavailable” (503), the check of that batch of links stopped with an error. The
   link is now checked again a little later, as intended.
 * Fixed: uninstalling the plugin now also removes the links you marked as checked,
   your exclusion rules and your saved rule sets.

#### 1.6.0

 * New: before your first scan, the Dashboard shows one step, Scan your site, with
   the Scan now button in it. When the scan finishes, the Dashboard shows your results.
   It used to open on a row of empty counts.
 * Improved: Content types is one list. Posts, Pages, custom post types and WooCommerce
   products sit together.
 * Improved: on the Settings page, Checking and Scan speed are folded under their
   headings, each with a short summary. A folded group that holds a changed setting
   opens by itself and says how many settings are changed.
 * Improved: each Scan speed setting has a line of help that says when to change
   it.
 * Improved: the Settings link on the Plugins screen opens the Dashboard, where 
   you start a scan.
 * New: optional settings usage. If this site is opted in to PlugUpp, the plugin
   sends a weekly summary of which settings you changed, never your content, addresses
   or keys. Turn it off on the Logs tab.
 * Fixed: the By page and By URL lists told you to run a scan from a Scan tab that
   no longer exists. They now point to the Scan now button above them.
 * Fixed: the Cancel button is only active while a scan is running, and Scan now
   only while it is not. Both used to look active all the time.

#### 1.5.1

 * Security: updated the bundled Freemius library to version 2.13.5. It fixes how
   some account and licence messages are shown in your admin.
 * Fixed: minor bug fixes.

#### 1.5.0

 * Improved: a clearer Settings screen. Your settings sit on one card, grouped in
   the order you set them up: what to scan, how links are checked, and scan speed.
   Settings that are on or off are now switches.
 * Improved: a choice with a few options is now a row of buttons, so you can see
   every option at once. The log level on the Logs tab works this way too.
 * Improved: each setting has one short line of help. Click the ? beside it to read
   more.
 * Fixed: in Premium, “suggested to review” beside URL parameters now opens your
   suggestions. A line of code no longer appears after it.
 * Fixed: when a batch of links was slow to answer, a second scan run could start
   while the first was still working. The scan now holds its place for as long as
   a batch takes.
 * Improved: on servers that run WordPress’s scheduled tasks from a system cron 
   job, scans now work in short steps, the same as on every other host.
 * Fixed: the Standard parameters list tags vero_id and vero_conv as Vero. They 
   were tagged WordPress.
 * Maintenance: the new screen saves your settings exactly as before. Nothing you
   have set changes.

#### 1.4.0

 * Added: a “Not checkable” result. Some large sites refuse automated visitors while
   serving people normally, and the audit now counts those separately instead of
   calling them broken. Nothing in that view is a problem to fix, so it never inflates
   your issue count.
 * Added: “Mark as checked”. Open a not-checkable link, confirm it works, and record
   that in one click. It then counts as OK. The link is still tested on every scan,
   so a genuine failure is still reported, and the confirmation lasts six months
   before the audit asks you to look again.
 * Fixed: links that a consent or cookie banner has blocked are no longer reported
   as broken. A blocked embed leaves a placeholder in the page instead of its real
   address, and the audit now reads the real address and checks that.
 * Fixed: sign-in walls are no longer reported as broken. Instagram, Facebook and
   similar sites answer an automated request with a sign-in page whether the page
   exists or not, so the audit says it could not check rather than guessing.
 * Fixed: many working links reported as broken because the host refuses a lightweight
   existence check but serves the page normally. The audit now confirms with a full
   request before reporting anything as broken. This affected map scripts, share
   links, camera images and more.
 * Fixed: a host that asks us to slow down or reports itself temporarily unavailable
   is no longer recorded as broken. The audit waits, honours the delay the host 
   asks for, and tries again before saying anything.
 * Fixed: a link that redirects only to add or remove a trailing slash is now a 
   notice, not a warning. The old advice to update the link was pointless when the
   address is the same one.
 * Fixed: “View source” could not find references written in inline CSS, or in markup
   using single quotes, and wrongly said the reference was not in the page.
 * Fixed: pages whose address redirects elsewhere could never be rendered, which
   marked the whole scan as degraded, skipped change detection and triggered a repeat
   scan that failed the same way.
 * Fixed: exclusion rules of type URL were discarded on save unless you pressed 
   Enter first, and the URL rule operators are now explained in the builder.
 * Improved: results wording throughout, so every verdict says what was actually
   observed and what, if anything, you should do about it.

#### 1.3.0

 * Added: image alt-text audit (Premium) – finds images with missing, empty or suspicious
   alternative text on the rendered page, with review tiers and per-image ignores
   on a new Images view; anything you ignore also shows on the Ignored view.
 * Added: archive pages in the By page view now have Re-scan and Exclude actions,
   and excluded archive pages show a readable name instead of an internal reference.
 * Fixed: excluding a page now removes its findings from the results immediately
   instead of waiting for the next scan.
 * Fixed: the images count in the By page view counted responsive-image variants
   separately; it now counts each image once.
 * Maintenance: confirmed compatible with WordPress 7.1.

#### 1.2.2

 * Fixed: scans now pause and resume automatically when the site is briefly unavailable,
   for example while WordPress runs a scheduled update (maintenance mode), instead
   of recording every page as a scan error.
 * Fixed: pages that cannot be checked during a scan now keep their previous results
   instead of losing them; the report says so, and a follow-up scan runs automatically.

#### 1.2.1

 * Improved: scans now run to completion on their own and finish much faster on 
   standard shared hosting. Both scan phases – rendering your pages and checking
   the links found – keep themselves moving in the background instead of waiting
   for WP-Cron, which stays in place as a safety net.
 * Fixed: a scan could stall partway through on hosting where WP-Cron only runs 
   when the site gets a visit. Stalled scans now recover automatically.

#### 1.2.0

 * Added: mixed content detection – images, embeds and page resources that load 
   over plain HTTP on an HTTPS site are flagged as warnings, with a plain-English
   explanation on the finding.
 * Added: every broken external link now carries a “View archived copy” link to 
   the Wayback Machine, so you can see what the dead page used to say or pick a 
   replacement URL.

#### 1.1.1

 * Improved: the activity log gains an “Errors and warnings” level, and the log 
   file is now named after the plugin for easier identification.
 * Fixed: uninstalling the plugin now removes all of its stored data and scheduled
   tasks.

#### 1.0.4

 * Initial public release.

## Meta

 *  Version **1.7.1**
 *  Last updated **5 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 **
 *  Language
 * [English (US)](https://wordpress.org/plugins/plugupp-link-image-health-audit/)
 * Tags
 * [404 checker](https://en-au.wordpress.org/plugins/tags/404-checker/)[broken image checker](https://en-au.wordpress.org/plugins/tags/broken-image-checker/)
   [Broken Link Checker](https://en-au.wordpress.org/plugins/tags/broken-link-checker/)
   [ssl checker](https://en-au.wordpress.org/plugins/tags/ssl-checker/)
 *  [Advanced View](https://en-au.wordpress.org/plugins/plugupp-link-image-health-audit/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/plugupp-link-image-health-audit/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/plugupp-link-image-health-audit/reviews/)

## Contributors

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

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/plugupp-link-image-health-audit/)