Version 1.3.1

New

  • Links are now found outside post content – in custom fields (including ACF), navigation menus, category and tag descriptions, author bios and websites, post excerpts, and the block content the editor stores outside your posts such as synced patterns, templates, template parts and navigation blocks.
  • Page builder support – links inside Elementor, Divi (4 and 5), WPBakery Page Builder, SiteOrigin Page Builder, Avada Builder and SeedProd layouts are now found and reported, including the pictures a block or a section background points at.
  • Broken link reports by email – a weekly email listing the links that broke since the last report, and a monthly scorecard of your site's link health, sent to the recipients you choose.
  • The report is now organised around where each link was found, with every location for a link listed and paginated inline, and a filter to narrow the report to one source – offering only the sources that actually hold links.
  • Filter the report by internal or external links, and by images, videos or non-media links.
  • Export the report to CSV, matching the filters and search you have on screen.
  • Exclude URLs by wildcard, by host, or by regular expression, in a single exclusion list.
  • Added a scan frequency setting to control how often links are rechecked.
  • Added per-source scanning settings, so you choose which places are monitored – navigation menus, custom fields, term descriptions, author bios and websites, synced patterns and templates.
  • When a broken link redirects, the report offers the end of the redirect chain as the replacement.
  • Audio files, and the images that core blocks keep in a block attribute, are now reported.
  • Added Site Health checks that report when link monitoring has stopped, and an admin bar warning when the account is not connected.
  • A dashboard – it opens on what to do next rather than on a list of everything that is wrong. Its main panel ranks the fewest fixes that clear the most broken links: one dead address used in many places, a whole host that has gone, a page carrying several at once, broken images and videos. Alongside it, why your links are failing, the domains costing you the most, how long each has been broken, and where on your site they live. Every figure opens the report already narrowed to it.
  • The Broken Links Highlighter can be switched on and off from the toolbar while you are looking at a page, and each person can turn it off for themselves without changing it for anyone else.
  • Multisite support – the network admin has its own Site Activations screen, where you connect the network's license once and then activate or deactivate the individual sites on the network from a single list.
  • Registered the plugin's abilities with the WordPress Abilities API.
  • A destination whose SSL certificate has expired, or does not match, is now reported as broken. These answer a link check normally, so the report used to call them working links while a browser stops your visitors with a warning screen.
  • Videos embedded as an iframe – pasted in as HTML, or written by a page builder – are now checked, so a video that was taken down no longer leaves a dead player on the page with nothing said about it.
  • The CSV export has a Reason column, so a row reading “Broken” beside a working status code explains itself in a spreadsheet.
  • The dashboard says how many links are still waiting for a verdict, next to the counts they are missing from, and the monthly email names what they are waiting for rather than giving one reason for all of them.

Updated

  • The highlighter now explains a broken link where you find it. Hovering a marked link shows what it points at, why the check failed, and a note that only logged-in editors can see the marks – along with where to turn them off. The panel stays open while you move the pointer onto it. The highlighter is also enabled by default for new users.
  • The report shows how long each link has been broken and can be sorted by it, so the breakage that has been live longest is easy to find.
  • The Broken Link Checker widget on your WordPress dashboard now shows the single most useful thing to fix, rather than a chart of your link totals.
  • AIOSEO's Details column now marks broken links with a broken chain icon and links the count straight to the rows behind it, for any post title.
  • AIOSEO's 404 log now shows how many of your posts link to each 404'd URL.
  • Rewrote the email template so it renders correctly in Outlook, Gmail, and clients that invert colours.
  • The broken links report is substantially faster – counts are cached, rows no longer cost a query each, and paging no longer recounts the whole table.
  • Every source is now indexed regardless of the settings, so switching a source on shows its links immediately instead of waiting for a full rescan. Switching one off no longer deletes anything.
  • A synced pattern, template or navigation block is reindexed as soon as it is saved, so a link you fix there leaves the report right away.
  • A synced pattern is only editable from the report by someone who can edit that particular pattern, since a pattern belongs to whoever created it.
  • Removing a URL exclusion now restores the links it had removed from every source, not just from posts.
  • An action a source cannot perform now explains why on hover instead of quietly disappearing.
  • An image's alternative text is not something the report can rewrite, and it now says so instead of appearing to save the change.
  • Replaced the link status details modal with an inline panel that states exactly what a change will affect.
  • Elementor pages no longer report the same link twice, a page built with a builder is reported as a page, and a builder that is no longer active stops being reported.
  • The report can now be sorted by when each link was last checked.
  • Reorganised the settings – the link settings have their own section, the Advanced Settings master switch is gone, and scan sources use the same post type toggles as the rest of the plugin.
  • Your link quota is now explained where it is shown, and turns red as it approaches the limit.
  • Improved the account connection and activation prompts, and added a newsroom panel for plugin news.
  • The report now says why a check failed rather than only that it did. A destination that blocked the check, one that did not respond in time, one that could not be reached at all, one whose address cannot exist, and a page that is there and asks to be signed in to each read differently, instead of all of them showing the same error. The last of those is the one worth calling out: a link wanting a login used to be reported as an error, which sent you looking for a fault in an address that is fine.
  • No Broken Link Checker JavaScript is loaded on admin screens that do not need it. A small script used to run on every page in the dashboard to style one menu item, which is now done in CSS.
  • The highlighter now marks broken images, frames and embedded players. They have no text to underline, so they take a dashed outline drawn inside their own box, and a player is outlined when one of the sources behind it is broken.
  • A link whose address holds a character no browser accepts is now marked by the highlighter in Firefox and Safari as well as Chrome, and is reported rather than quietly dropped from the scan.
  • The scan no longer waits out its idle timer when links fall due inside it, so a post you save, an import, or a plugin update is picked up straight away instead of up to an hour later.

Fixed

  • Dismissed links were counted and listed under the Pending filter, so the filter counts did not add up to the total.
  • A link could be counted and listed under two filter tabs at once, so the tabs added up to more than the total. A link that had ended up with two check records behind it is now repaired, and the scan no longer creates them.
  • A link edit that changed nothing reported success, closing the panel over content that still carried the old URL.
  • Searching the report treated an underscore or a percent sign in a URL as a wildcard, so a search could match links that did not contain it.
  • Relative link URLs are now kept relative when they are sanitised.
  • On some sites a script error broke the post editor, and the plugin was not the obvious cause because the error named an AIOSEO object. The script no longer depends on data a page may not have printed.
  • A recheck the service refused – an unverified license, or a month of link checks already used – advised trying again, which could never work. It now says what actually happened.
  • Two links whose addresses differ only in capitalisation were treated as one. The filter tabs added up to more than the total, and one of the pair was counted but never listed, exported, or fixable from the report.
  • The email report counted a link that redirected and then broke as both broken and a redirect, where the report on screen counts it as broken only.
  • Editing a link did nothing for an address the scan had tidied up on the way in – surrounding spaces, a backslash in place of a slash, a default port, a dot segment, a non-English path – which is the shape a broken link is most likely to have been written in.
  • Editing a link could not rewrite the address on an iframe, video or audio tag, and it dropped the part after the # from a link that had one, so two links pointing at different places on the same page were both sent to the same place.
  • Editing a link whose anchor text begins inside the surrounding HTML could damage the markup around it.
  • A post dated in the future – a scheduled post, or content an importer forward-dated – was re-read on every scan and never settled, so the scan never got as far as your menus, custom fields, term descriptions, author profiles, patterns and templates.
  • The second-opinion recheck kept picking the same few links every run, so the rest of the queue was never reached and a dead host never settled.
  • A link our service could not fetch was never rechecked from your own site, so it never resolved, was counted against your credits on every scan, and could settle as a working link.
  • A link that failed every recheck kept the status code the service had last seen, so a row could read “the destination returned a 200 error”.
  • Searching the report for something that matches nothing listed every link instead of none.
  • The Activate button was live with the license key field empty, and pressing it answered “an unknown error occurred” rather than asking for a key.
  • Addresses that 1.3.0 stored in a mangled form – two links glued into one, a host with the path run into it – are re-read when you upgrade instead of staying in the report as broken.
  • An excluded post recorded by anything other than the settings screen could stop the scan with a fatal error.

Version 1.3.0

New

  • Video support – Broken Link Checker now auto-detects video links and checks whether the linked video still exists, instead of just making sure that the link works. YouTube, Vimeo and 10+ platforms supported!
  • Broken links are now scanned a second time client-side to reduce false-negatives due to WAF blocks or timeouts.

Updated

  • Added support for HTML API for WP 6.6 and above to make link updates/removals more reliable.
  • Added a license recheck action link to settings to refresh subscription data (useful in case of connection issues/subscription upgrades) + an indicator for the amount of sites that are active under the subscription.
  • Added a mechanism to prevent duplicate actions from being scheduled.
  • Link Assistant and Broken Link Checker now clean up database rows for trashed, private, or deleted posts so tables don't accumulate invisible bloat over time.
  • Hardened options against unintended frontend exposure.

Fixed

  • Setup Wizard sometimes not triggering due to missing cache table.
  • Relative URLs are now resolved against the post permalink before storing them to the DB.
  • Malformed URLs sent to Broken Link Checker server in rare cases.
  • Scan sometimes getting stuck due to duplicate rows in the DB.

Version 1.2.10

Fixed

  • PHP error when connecting BLC when AIOSEO is not active.

Version 1.2.9

Updated

  • Links that have never been checked before are now prioritized better.
  • Improved scheduled action scheduling to prevent duplicate actions.
  • Improved request handling with concurrency guards and caching to reduce outbound request volume.
  • Added transient fallback mechanism for caching in case aioseo_cache table doesn't exist.
  • Various performance improvements.

Fixed

  • Subsite database table cache no longer includes tables of all other subsites for multisites.
  • Rare issue where some links wouldn't be indexed due to special characters like new lines.

Version 1.2.8

Updated

  • Changed wording to reflect that free subscriptions never expire, but that their quota resets each month.

Version 1.2.7

New

  • Users using AIOSEO, Broken Link Checker and Link Assistant now see their broken links count in the AIOSEO Details post column.

Updated

  • Compatibility with WordPress 6.9.
  • Cache class now uses JSON instead of PHP serialization to prevent cache misses when charsets don't match.
  • Various database performance improvements.
  • Hardened database queries against SQL attacks.

Fixed

  • “Good” filter now no longer shows URLs that still need to be scanned for the first time.

Version 1.2.6

New

  • Added Link Distribution dashboard widget to the WordPress admin dashboard.
  • Added reminder emails to inform users when Broken Link Checker is not connected.

Updated

  • All BLC plans, including free, now support external links.
  • The free BLC plan now includes 50 more links for free, for a total of 250.
  • Added warning messages when indexed link count is larger than plan link quota or link quota is (almost) depleted.
  • Added hook to filter URLs when they are indexed to add compatibility with WP Offload Media.
  • Hardened REST API routes and added permission checks to improve security.

Fixed

  • Link scan sometimes getting stuck if AIOSEO is not installed due to missing function.

Version 1.2.4

Updated

  • Hardening for ORDER BY/LIMIT clauses in database queries.

Version 1.2.3

Updated

  • Updated: Added support for updating/removing relative URLs.

Version 1.2.2

New

  • Added support for indexing and checking media URLs.

Updated

  • Improved link removal process to increase rate of success.

Fixed

  • Link Status row now closes after performing a table action to ensure no data leaks through to the next row.