{"id":398973,"date":"2026-11-05T03:18:02","date_gmt":"2026-11-05T03:18:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/neomor-broken-link-fixer\/"},"modified":"2026-11-05T03:17:41","modified_gmt":"2026-11-05T03:17:41","slug":"plainsum-broken-link-fixer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/plainsum-broken-link-fixer\/","author":23599380,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Plainsum Broken Link Fixer","header_author":"Plainsum","header_description":"Finds broken links and images in your posts, pages and menus, then helps you fix them: edit the URL everywhere, unlink, ignore or recheck, with an undo log. Runs entirely on your own server.","assets_banners_color":"e8ece4","last_updated":"2026-11-05 03:17:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/plainsum-broken-link-fixer\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":121,"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":"neomordev","date":"2026-11-05 03:17:41","revision":3785143}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3785143,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3785143,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3785143,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3785143,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3785143,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3785143,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3785143,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3785143,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3785143,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3785143,"resolution":"5","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Broken links grouped by URL, with every post that uses each one.","2":"Change a URL everywhere in one step, with a clear undo path.","3":"The Fix log records every change and restores it with one click.","4":"Settings: control batch size, speed, content types and skipped sites.","5":"Scanning in small batches with live progress."}},"plugin_section":[],"plugin_tags":[905,17210,14279,40482,14280],"plugin_category":[],"plugin_contributors":[290822],"plugin_business_model":[],"class_list":["post-398973","plugin","type-plugin","status-publish","hentry","plugin_tags-905","plugin_tags-broken-link-checker","plugin_tags-broken-links","plugin_tags-dead-links","plugin_tags-link-checker","plugin_contributors-neomordev","plugin_committers-neomordev"],"banners":{"banner":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/banner-772x250.png?rev=3785143","banner_2x":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/banner-1544x500.png?rev=3785143","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/icon.svg?rev=3785143","icon":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/icon.svg?rev=3785143","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/screenshot-1.png?rev=3785143","caption":"Broken links grouped by URL, with every post that uses each one."},{"src":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/screenshot-2.png?rev=3785143","caption":"Change a URL everywhere in one step, with a clear undo path."},{"src":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/screenshot-3.png?rev=3785143","caption":"The Fix log records every change and restores it with one click."},{"src":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/screenshot-4.png?rev=3785143","caption":"Settings: control batch size, speed, content types and skipped sites."},{"src":"https:\/\/ps.w.org\/plainsum-broken-link-fixer\/assets\/screenshot-5.png?rev=3785143","caption":"Scanning in small batches with live progress."}],"raw_content":"<!--section=description-->\n<p>Broken Link Fixer finds links and images that no longer work and helps you repair them, instead of just handing you a long list.<\/p>\n\n<p>It reads your published posts, pages, menus and block-theme navigation, then checks each address in small, slow batches in the background. Your site stays fast, your database stays small, and nothing is sent to a cloud service.<\/p>\n\n<p><strong>Fix, don't just find<\/strong><\/p>\n\n<p>Broken links are grouped by URL. Each group shows every post and menu item that uses it, with one-click fixes:<\/p>\n\n<ul>\n<li><strong>Edit URL<\/strong>: change the address everywhere it is used, in one step.<\/li>\n<li><strong>Unlink<\/strong>: remove the link but keep the text (or remove a broken image).<\/li>\n<li><strong>Not broken<\/strong>: mark a false alarm so Broken Link Fixer stops reporting it.<\/li>\n<li><strong>Recheck<\/strong>: test the link again right now.<\/li>\n<li><strong>Update URL<\/strong> on redirected links: switch to the final address and skip the extra hop.<\/li>\n<li><strong>Undo<\/strong>: every edit and unlink is recorded in the Fix log, with a restore button.<\/li>\n<\/ul>\n\n<p><strong>Built to be gentle<\/strong><\/p>\n\n<ul>\n<li>Checks run in background batches through WP-Cron. You choose how many links per batch and how long to wait between batches. The default is 10 links every 30 seconds.<\/li>\n<li>At most two requests per website per batch, so linked sites are not hammered.<\/li>\n<li>One database row per distinct URL, never one per occurrence. A cap on stored URLs, a capped fix log, and automatic clean-up of links that no longer appear in any post.<\/li>\n<li>Links on your own site are checked without a web request when possible: posts are looked up directly and uploaded files are checked on disk.<\/li>\n<\/ul>\n\n<p><strong>Fewer false alarms<\/strong><\/p>\n\n<ul>\n<li>\"Broken\" means a real 404 or 410, a domain that does not exist, or a link that keeps failing across several checks.<\/li>\n<li>Sites that block automated checks (401, 403, 429 and similar) are listed as \"Could not verify\", not broken.<\/li>\n<li>Temporary server errors and timeouts are retried before they are reported.<\/li>\n<li>HEAD requests that a server refuses are confirmed with a tiny GET before judging.<\/li>\n<li>You can skip domains that always block bots, such as social networks.<\/li>\n<\/ul>\n\n<p><strong>Private by design<\/strong><\/p>\n\n<ul>\n<li>No account, no license key, no external service run by the plugin author.<\/li>\n<li>The only network requests are the checks themselves, sent from your server to the addresses already in your content.<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<p>Broken Link Fixer exposes neutral hooks so other plugins can build on it. Examples: the <code>nblf_link_status_changed<\/code>, <code>nblf_scan_finished<\/code>, <code>nblf_after_fix<\/code> and <code>nblf_after_undo<\/code> actions; the <code>nblf_link_actions<\/code> action (add buttons to a link card); and the <code>nblf_check_result<\/code>, <code>nblf_should_check_url<\/code>, <code>nblf_request_args<\/code>, <code>nblf_post_types<\/code>, <code>nblf_post_statuses<\/code>, <code>nblf_max_links<\/code> and <code>nblf_capability<\/code> filters.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Broken Link Fixer does not connect to any service operated by its author or anyone else.<\/p>\n\n<p>To do its job it sends HTTP requests (HEAD, and a small GET when needed) from your server to the URLs that appear in your own content, to find out whether they work. Those requests include a User-Agent that names the plugin and your site address (for example <code>Mozilla\/5.0 (compatible; PlainsumBrokenLinkFixer\/1.0.0; +https:\/\/example.com\/)<\/code>), so the owners of linked sites can see who is checking. Nothing else about your site, your users or your content is sent. Requests to private or internal addresses are blocked.<\/p>\n\n<p>You control the speed in Tools &gt; Broken Link Fixer &gt; Settings, and you can add any domain to the skip list so it is never requested.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>plainsum-broken-link-fixer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin from the Plugins screen.<\/li>\n<li>Activate it.<\/li>\n<li>Go to Tools &gt; Broken Link Fixer and click <strong>Scan site<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20need%20an%20account%20or%20an%20api%20key%3F\"><h3>Does it need an account or an API key?<\/h3><\/dt>\n<dd><p>No. Everything runs on your own server.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%20or%20fill%20my%20database%3F\"><h3>Will it slow down my site or fill my database?<\/h3><\/dt>\n<dd><p>Checks run in the background in small batches, with a cap on requests per batch. Broken Link Fixer stores one row per distinct URL, caps the number of stored URLs, and trims its own log. Visitors never wait for a check.<\/p><\/dd>\n<dt id=\"how%20do%20the%20background%20checks%20run%3F\"><h3>How do the background checks run?<\/h3><\/dt>\n<dd><p>Through WP-Cron. If WP-Cron is disabled on your site, keep the Broken Link Fixer screen open: it advances the scan while you watch. A real server cron that calls wp-cron.php works too.<\/p><\/dd>\n<dt id=\"why%20is%20a%20link%20marked%20%22could%20not%20verify%22%3F\"><h3>Why is a link marked \"Could not verify\"?<\/h3><\/dt>\n<dd><p>Many sites answer automated requests with 403 or 429 even though the page works in a browser. Broken Link Fixer does not call those links broken. You can recheck them, mark them as not broken, or add the domain to the skip list.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20fix%3F\"><h3>Can I undo a fix?<\/h3><\/dt>\n<dd><p>Yes. Open the Fix log tab and click Undo. Broken Link Fixer restores the exact earlier content. If a post was edited after the fix, an Edit URL fix reverses just that URL; for other cases it leaves the post alone and tells you.<\/p><\/dd>\n<dt id=\"what%20does%20unlink%20do%20to%20images%3F\"><h3>What does Unlink do to images?<\/h3><\/dt>\n<dd><p>For a broken image it removes the image tag. For a broken link it removes the link and keeps the text. Menu items can only be edited, not unlinked.<\/p><\/dd>\n<dt id=\"which%20content%20is%20scanned%3F\"><h3>Which content is scanned?<\/h3><\/dt>\n<dd><p>Published, scheduled and private content of every public post type, reusable blocks, block-theme navigation, and custom links in classic menus. You can narrow the post types in Settings.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Broken Link Fixer removes its three database tables and its settings.<\/p><\/dd>\n<dt id=\"can%20other%20plugins%20extend%20it%3F\"><h3>Can other plugins extend it?<\/h3><\/dt>\n<dd><p>Yes. See the hooks listed under \"For developers\".<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Find broken links and images in your posts, pages and menus, then fix them in one click. Runs on your own server in small batches. No account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/398973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=398973"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neomordev"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=398973"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=398973"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=398973"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=398973"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=398973"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=398973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}