{"id":369799,"date":"2026-09-17T05:27:19","date_gmt":"2026-09-17T05:27:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/link-sentinel-broken-link-checker\/"},"modified":"2026-09-17T05:27:06","modified_gmt":"2026-09-17T05:27:06","slug":"linkmender","status":"publish","type":"plugin","link":"https:\/\/gu.wordpress.org\/plugins\/linkmender\/","author":23567190,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Linkmender \u2013 Broken Link Scanner","header_author":"prayasa","header_description":"Find and fix broken links, redirects and missing images. 100% local \u2014 no cloud service, no external API, no data leaves your site.","assets_banners_color":"215661","last_updated":"2026-09-17 05:27:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":24,"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":"prayasa","date":"2026-09-17 05:27:06","revision":3699584}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3699584,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3699584,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3699584,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3699584,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3699584,"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":3699584,"resolution":"1","location":"assets","locale":"","width":1240,"height":1180},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3699584,"resolution":"2","location":"assets","locale":"","width":1400,"height":1526},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3699584,"resolution":"3","location":"assets","locale":"","width":1400,"height":1346}},"screenshots":{"1":"Dashboard: link health cards, scan controls and the results table.","2":"Row actions: Recheck, Edit URL, Unlink, Ignore.","3":"Settings: batch size, pause, timeout, exclusions.","4":"Dashboard widget."}},"plugin_section":[262246],"plugin_tags":[905,14279,163,14280,726],"plugin_category":[50],"plugin_contributors":[281189],"plugin_business_model":[],"class_list":["post-369799","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-905","plugin_tags-broken-links","plugin_tags-images","plugin_tags-link-checker","plugin_tags-redirects","plugin_category-media","plugin_contributors-prayasa","plugin_committers-prayasa"],"banners":{"banner":"https:\/\/ps.w.org\/linkmender\/assets\/banner-772x250.png?rev=3699584","banner_2x":"https:\/\/ps.w.org\/linkmender\/assets\/banner-1544x500.png?rev=3699584","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/linkmender\/assets\/icon.svg?rev=3699584","icon":"https:\/\/ps.w.org\/linkmender\/assets\/icon.svg?rev=3699584","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/linkmender\/assets\/screenshot-1.png?rev=3699584","caption":"Dashboard: link health cards, scan controls and the results table."},{"src":"https:\/\/ps.w.org\/linkmender\/assets\/screenshot-2.png?rev=3699584","caption":"Row actions: Recheck, Edit URL, Unlink, Ignore."},{"src":"https:\/\/ps.w.org\/linkmender\/assets\/screenshot-3.png?rev=3699584","caption":"Settings: batch size, pause, timeout, exclusions."}],"raw_content":"<!--section=description-->\n<p>Linkmender scans the published content on your site, checks every link and image it finds, and shows you what is broken, what redirects, and what needs a second look. Then it lets you fix things without leaving the results screen.<\/p>\n\n<p>Everything runs on your own server. There is no account to create, no API key, no usage quota and no data sent to a third party.<\/p>\n\n<p><strong>What it checks<\/strong><\/p>\n\n<ul>\n<li><code>&lt;a href&gt;<\/code> links (internal and external) and <code>&lt;img src&gt;<\/code> images in posts, pages and public custom post types<\/li>\n<li>Optionally, links stored in custom fields (post meta)<\/li>\n<li>In-page anchors (<code>#section<\/code>) are recorded but not fetched<\/li>\n<\/ul>\n\n<p><strong>What you get<\/strong><\/p>\n\n<ul>\n<li>A dashboard with counts of broken links, redirects and warnings<\/li>\n<li>A sortable, searchable results table with status and type filters<\/li>\n<li>Row and bulk actions: <strong>Recheck<\/strong>, <strong>Edit URL<\/strong> (replaces the URL inside the post), <strong>Unlink<\/strong> (removes the tag, keeps the text), <strong>Ignore \/ Unignore<\/strong><\/li>\n<li>A WordPress Dashboard widget with the current link health<\/li>\n<li>A \"Last full scan\" indicator and a progress bar while a scan runs<\/li>\n<\/ul>\n\n<p><strong>How it stays lightweight<\/strong><\/p>\n\n<ul>\n<li>Scans run in the background in small batches (20 URLs per run by default) using WP-Cron single events<\/li>\n<li>Keeping the Linkmender screen open acts as a keep-alive so scans progress even on sites where WP-Cron is slow<\/li>\n<li>Each URL is checked once per scan even if it appears in many posts<\/li>\n<li><code>HEAD<\/code> requests first, with a small ranged <code>GET<\/code> fallback for servers that refuse <code>HEAD<\/code><\/li>\n<li>Network errors are retried with exponential back-off before a link is marked broken<\/li>\n<li>Content is re-parsed automatically when a post is saved, so results stay current between scans<\/li>\n<\/ul>\n\n<p><strong>Statuses<\/strong><\/p>\n\n<ul>\n<li><strong>OK<\/strong> \u2014 2xx response<\/li>\n<li><strong>Redirect<\/strong> \u2014 3xx response; the redirect target is recorded<\/li>\n<li><strong>Broken<\/strong> \u2014 4xx\/5xx response, or unreachable after 3 attempts<\/li>\n<li><strong>Warning<\/strong> \u2014 a network error that will be retried<\/li>\n<\/ul>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<p>Linkmender only ever contacts the URLs that appear in your own content, from your own server, with a clear user agent. It does not phone home, does not collect analytics and does not display promotional notices.<\/p>\n\n<p><strong>Extending<\/strong><\/p>\n\n<p>Developers can hook into the plugin: <code>lmnd_parsed_links<\/code>, <code>lmnd_pre_check_url<\/code>, <code>lmnd_check_result<\/code>, <code>lmnd_http_args<\/code>, <code>lmnd_scan_complete<\/code>, <code>lmnd_link_checked<\/code>, <code>lmnd_bulk_action<\/code>, <code>lmnd_row_actions<\/code>, <code>lmnd_admin_tabs<\/code>, <code>lmnd_pro_features<\/code> and more.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>linkmender<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Tools \u2192 Linkmender<\/strong> and click <strong>Scan now<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20my%20links%20to%20an%20external%20service%3F\"><h3>Does this send my links to an external service?<\/h3><\/dt>\n<dd><p>No. Every request is made from your own server with the WordPress HTTP API. The plugin never contacts any server other than the URLs found in your content.<\/p><\/dd>\n<dt id=\"will%20scanning%20slow%20down%20my%20site%3F\"><h3>Will scanning slow down my site?<\/h3><\/dt>\n<dd><p>Scans run in small batches with a configurable pause between them, and never run longer than about 40 seconds in one go. You can lower the batch size on shared hosting.<\/p><\/dd>\n<dt id=\"a%20working%20site%20is%20reported%20as%20broken.%20why%3F\"><h3>A working site is reported as broken. Why?<\/h3><\/dt>\n<dd><p>Some sites block automated requests (LinkedIn, some CDNs, some bot-protection services). Add such domains to <strong>Settings \u2192 Exclude domains<\/strong>, or set a browser-like user agent under <strong>Settings \u2192 User agent<\/strong>.<\/p><\/dd>\n<dt id=\"what%20does%20%22unlink%22%20do%3F\"><h3>What does \"Unlink\" do?<\/h3><\/dt>\n<dd><p>For a text link it removes the <code>&lt;a&gt;<\/code> tag and keeps the link text. For an image it removes the <code>&lt;img&gt;<\/code> tag. The change is saved to the post like a normal edit, so it appears in the post's revision history.<\/p><\/dd>\n<dt id=\"does%20it%20check%20links%20inside%20page%20builders%20or%20widgets%3F\"><h3>Does it check links inside page builders or widgets?<\/h3><\/dt>\n<dd><p>It checks the rendered HTML stored in <code>post_content<\/code>, which covers the block editor, the classic editor and most page builders that store HTML. Builders that store their layout only as shortcodes or JSON in post meta are covered by the \"Also scan custom fields\" option when the meta contains HTML or a bare URL.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%3F\"><h3>Is there a Pro version?<\/h3><\/dt>\n<dd><p>Not yet. The <strong>Pro<\/strong> tab lists what is planned. The free version is complete and will stay free.<\/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>Scheduled events are removed. The results table and settings are kept unless you enable <strong>Settings \u2192 Delete the links table and all settings when the plugin is deleted<\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Find and fix broken links, redirects and missing images. 100% local: no cloud service, no external API, nothing leaves your site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/369799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=369799"}],"author":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/prayasa"}],"wp:attachment":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=369799"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=369799"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=369799"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=369799"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=369799"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=369799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}