{"id":322208,"date":"2026-06-05T07:02:01","date_gmt":"2026-06-05T07:02:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smart-link-checker\/"},"modified":"2026-07-07T02:33:43","modified_gmt":"2026-07-07T02:33:43","slug":"beplus-link-status-scanner","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/beplus-link-status-scanner\/","author":15226952,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.0.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Link Status Scanner by Beplus","header_author":"rimbeplus","header_description":"Automatically detects broken links in posts and pages, with scheduled scanning and email notifications.","assets_banners_color":"dbdcdf","last_updated":"2026-07-07 02:33:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/rimbeplus\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":207,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"rimbeplus","date":"2026-06-05 07:00:33"},"1.1.0":{"tag":"1.1.0","author":"rimbeplus","date":"2026-06-20 10:01:29"},"1.2.0":{"tag":"1.2.0","author":"rimbeplus","date":"2026-07-07 02:33:43"}},"upgrade_notice":{"1.2.0":"<p>This update automatically upgrades the database to add a new <code>link_type<\/code> column. No manual steps required. After upgrading, run a fresh scan from the Broken Links tab to populate link types for existing records.<\/p>","1.0.0":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3561975,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3561975,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3561975,"resolution":"1","location":"assets","locale":"","width":1904,"height":780},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3598445,"resolution":"2","location":"assets","locale":"","width":1746,"height":430}},"screenshots":{"1":"Admin report table showing broken and redirected links with type badges, status filters, and bulk actions.","2":"Export broken links to CSV with filtering by status and link type."}},"plugin_section":[262246],"plugin_tags":[974,14279,14280,252185,186],"plugin_category":[55],"plugin_contributors":[265926],"plugin_business_model":[],"class_list":["post-322208","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-broken-link","plugin_tags-broken-links","plugin_tags-link-checker","plugin_tags-link-monitoring","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-rimbeplus","plugin_committers-bearsthemes","plugin_committers-rimbeplus"],"banners":{"banner":"https:\/\/ps.w.org\/beplus-link-status-scanner\/assets\/banner-772x250.png?rev=3561975","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/beplus-link-status-scanner\/assets\/icon-256x256.png?rev=3561975","icon_2x":"https:\/\/ps.w.org\/beplus-link-status-scanner\/assets\/icon-256x256.png?rev=3561975","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/beplus-link-status-scanner\/assets\/screenshot-1.png?rev=3561975","caption":"Admin report table showing broken and redirected links with type badges, status filters, and bulk actions."},{"src":"https:\/\/ps.w.org\/beplus-link-status-scanner\/assets\/screenshot-2.png?rev=3598445","caption":"Export broken links to CSV with filtering by status and link type."}],"raw_content":"<!--section=description-->\n<p>Link Status Scanner by Beplus scans all your published content for broken links, redirects, and unreachable URLs. It runs in the background using WordPress Cron so your site performance is never impacted.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li>Automatic background scanning \u2014 Uses WP-Cron to scan posts and check links on a schedule you control.<\/li>\n<li>Multi-source scanning \u2014 Detects broken links in post content (<code>&lt;a href&gt;<\/code>), broken images (<code>&lt;img src&gt;<\/code>), Gutenberg block attributes (embed, button, image, file blocks), ACF custom fields, navigation menus, and widget areas.<\/li>\n<li>Link type badges \u2014 Every link is tagged by type (Anchor, Image, Block, ACF, Menu, Widget) so you know exactly where a broken URL came from.<\/li>\n<li>Broken link report \u2014 A clean admin table listing every broken link: URL, type, HTTP status code, the source it was found in, and when it was last checked.<\/li>\n<li>Status filters \u2014 Quickly filter links by All, Broken, Redirect, OK, Unchecked, or Ignored.<\/li>\n<li>Bulk actions \u2014 Re-check, ignore, or delete multiple links at once.<\/li>\n<li>Inline link replace \u2014 Swap any broken URL directly from the admin table without editing the post manually.<\/li>\n<li>Export CSV \u2014 Export your link data to a CSV file, filtered by status and link type, from the Export tab.<\/li>\n<li>Real-time progress \u2014 Scan and check operations show a live progress bar so you always know how far along the process is.<\/li>\n<li>Email notifications \u2014 Get a digest email listing new broken links after each cron check run.<\/li>\n<li>Configurable settings \u2014 Set check frequency (daily\/weekly\/monthly), request timeout, links per cron run, and excluded URL patterns.<\/li>\n<li>Dashboard widget \u2014 A quick summary of total, broken, redirect, and OK links on your WordPress dashboard.<\/li>\n<li>Scan on save \u2014 Newly published or updated posts are scanned immediately when saved.<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>When a post is published or updated, Link Status Scanner extracts all URLs from the content \u2014 anchors, images, Gutenberg block attributes, and ACF fields \u2014 and stores them in the database.<\/li>\n<li>A scheduled cron job also scans navigation menus and widget areas.<\/li>\n<li>A second cron job checks each stored URL by making an HTTP HEAD request and recording the response code.<\/li>\n<li>Broken links (4xx, 5xx, connection errors) are flagged in the admin report with their link type badge.<\/li>\n<li>If email notifications are enabled, you receive a digest email listing newly broken links after each check run.<\/li>\n<\/ol>\n\n<h4>Privacy<\/h4>\n\n<p>Link Status Scanner by Beplus sends HTTP requests to external URLs in order to check their status. No personal data is collected or shared.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>beplus-link-status-scanner<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Settings &gt; Link Status Scanner<\/strong> to view the broken links report.<\/li>\n<li>Click <strong>Scan Posts Now<\/strong> to run an immediate scan, then <strong>Check Links Now<\/strong> to check their HTTP status.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20slow%20down%20my%20site%3F\"><h3>Does this plugin slow down my site?<\/h3><\/dt>\n<dd><p>No. All scanning and HTTP checking happens through WP-Cron, which runs in the background. The only admin-side actions are when you manually trigger a scan or re-check.<\/p><\/dd>\n<dt id=\"what%20types%20of%20links%20are%20scanned%3F\"><h3>What types of links are scanned?<\/h3><\/dt>\n<dd><p>The plugin scans <code>&lt;a href&gt;<\/code> anchors, <code>&lt;img src&gt;<\/code> images, Gutenberg block attributes (embed URL, button URL, image link, file link), ACF custom fields (URL, link, image, and file field types), navigation menus, and classic\/block widget areas. <code>mailto:<\/code>, <code>tel:<\/code>, <code>javascript:<\/code>, and anchor-only <code>#<\/code> links are automatically skipped.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20certain%20domains%20or%20urls%3F\"><h3>Can I exclude certain domains or URLs?<\/h3><\/dt>\n<dd><p>Yes. Go to the Settings tab and add URL patterns (one per line) to the Excluded URL Patterns field. Any link containing that pattern will be skipped.<\/p><\/dd>\n<dt id=\"why%20does%20wp-cron%20not%20run%20on%20schedule%3F\"><h3>Why does WP-Cron not run on schedule?<\/h3><\/dt>\n<dd><p>WP-Cron triggers on page loads. On low-traffic sites it may not run on time. For reliable scheduling, disable WP-Cron and add a real system cron job:\n    *\/5 * * * * curl -s https:\/\/yoursite.com\/wp-cron.php?doing_wp_cron &gt; \/dev\/null 2&gt;&amp;1<\/p><\/dd>\n<dt id=\"what%20does%20%22redirect%22%20status%20mean%3F\"><h3>What does \"Redirect\" status mean?<\/h3><\/dt>\n<dd><p>A redirect (301, 302, 307, 308) means the URL has moved. The link still works but you may want to update it to the final destination for SEO.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20acf%3F\"><h3>Does the plugin work with ACF?<\/h3><\/dt>\n<dd><p>Yes. If Advanced Custom Fields is active, the scanner reads URL, link, image, and file field types. ACF is not required \u2014 the scanner simply skips ACF fields when ACF is not installed.<\/p><\/dd>\n<dt id=\"can%20i%20export%20the%20results%3F\"><h3>Can I export the results?<\/h3><\/dt>\n<dd><p>Yes. The Export tab lets you download a CSV file of all tracked links. You can filter by status (Broken, Redirect, OK, etc.) and by link type (Anchor, Image, Block, ACF, Menu, Widget) before exporting.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Multi-source scanning \u2014 broken images (<code>&lt;img src&gt;<\/code>), Gutenberg block URLs (embed, button, image, file blocks), ACF custom fields, navigation menus, and widget areas are now scanned in addition to post content anchors.<\/li>\n<li>New: Link type column \u2014 every link in the report table is tagged with a color-coded badge (Anchor, Image, Block, ACF, Menu, Widget).<\/li>\n<li>New: Export CSV tab \u2014 export all tracked links to a CSV file, with filters by status and link type. File includes UTF-8 BOM for Excel compatibility.<\/li>\n<li>Improvement: Scan and check operations now show a real-time progress bar.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Inline replace link \u2014 click \"Replace\" on any link row to swap the URL directly from the admin table without editing the post manually.<\/li>\n<li>The replacement updates both the database record and the actual post content.<\/li>\n<li>Status is automatically reset to \"Unchecked\" after replacement so the new URL gets verified on the next check.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Automatic post scanning on save and via WP-Cron.<\/li>\n<li>Admin report with WP_List_Table, status filters, and bulk actions.<\/li>\n<li>Settings page (frequency, timeout, links per run, excluded patterns, email notifications).<\/li>\n<li>Dashboard widget.<\/li>\n<li>Email digest notification for new broken links.<\/li>\n<\/ul>","raw_excerpt":"Automatically detects broken and redirected links in posts, pages, custom fields, menus, and widgets \u2014 with scheduled scanning and email notifications &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/322208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=322208"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bearsthemes"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=322208"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=322208"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=322208"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=322208"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=322208"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=322208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}