{"id":356643,"date":"2026-09-02T17:31:19","date_gmt":"2026-09-02T17:31:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/link-sentry\/"},"modified":"2026-09-04T10:48:56","modified_gmt":"2026-09-04T10:48:56","slug":"onsite-link-verdict","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/onsite-link-verdict\/","author":23552364,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.6.6","stable_tag":"0.6.6","tested":"7.1","requires":"6.1","requires_php":"7.4","requires_plugins":null,"header_name":"Onsite Link Verdict \u2014 Broken Link Checker","header_author":"Onsite Tools","header_description":"Finds broken links on your site. Runs entirely on your own server \u2014 no cloud account, no signup, no data leaves your site.","assets_banners_color":"12161a","last_updated":"2026-09-04 10:48:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/onsitetools.dev\/onsite-link-verdict\/","header_author_uri":"https:\/\/profiles.wordpress.org\/onsitetools\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":85,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.6.5":{"tag":"0.6.5","author":"onsitetools","date":"2026-09-02 17:30:44","revision":3678450},"0.6.6":{"tag":"0.6.6","author":"onsitetools","date":"2026-09-04 10:48:56","revision":3681053}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3678494,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3678494,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3678494,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3678494,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.6.5","0.6.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3678450,"resolution":"1","location":"assets","locale":"","width":1055,"height":1275},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3678450,"resolution":"2","location":"assets","locale":"","width":1055,"height":1476},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3678450,"resolution":"3","location":"assets","locale":"","width":1033,"height":405}},"screenshots":{"1":"The Broken tab, with the \"What's happening\" column explaining each result in plain language \u2014 not just a bare status code.","2":"The Unverifiable tab: 401, 403, 429, 451 and 999 responses kept separate from real broken links, because the server is blocking the check, not telling you the page is gone.","3":"Choosing how fast to check. Three settings, each with its cost written next to it \u2014 and the wait worked out for the number of links actually waiting on your own site."}},"plugin_section":[],"plugin_tags":[905,14279,40482,14280,186],"plugin_category":[52,55],"plugin_contributors":[278915],"plugin_business_model":[],"class_list":["post-356643","plugin","type-plugin","status-publish","hentry","plugin_tags-905","plugin_tags-broken-links","plugin_tags-dead-links","plugin_tags-link-checker","plugin_tags-seo","plugin_category-performance","plugin_category-seo-and-marketing","plugin_contributors-onsitetools","plugin_committers-onsitetools"],"banners":{"banner":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/banner-772x250.png?rev=3678494","banner_2x":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/banner-1544x500.png?rev=3678494","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/icon-128x128.png?rev=3678494","icon_2x":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/icon-256x256.png?rev=3678494","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/screenshot-1.png?rev=3678450","caption":"The Broken tab, with the \"What's happening\" column explaining each result in plain language \u2014 not just a bare status code."},{"src":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/screenshot-2.png?rev=3678450","caption":"The Unverifiable tab: 401, 403, 429, 451 and 999 responses kept separate from real broken links, because the server is blocking the check, not telling you the page is gone."},{"src":"https:\/\/ps.w.org\/onsite-link-verdict\/assets\/screenshot-3.png?rev=3678450","caption":"Choosing how fast to check. Three settings, each with its cost written next to it \u2014 and the wait worked out for the number of links actually waiting on your own site."}],"raw_content":"<!--section=description-->\n<p>Onsite Link Verdict checks the links and images in your posts, pages and comments and tells you which ones are dead.<\/p>\n\n<h4>It knows the difference between \"broken\" and \"I could not check it\"<\/h4>\n\n<p>This distinction is the whole reason this plugin exists.<\/p>\n\n<p>Plenty of servers refuse automated requests. Amazon answers <code>503<\/code> to bots. X answers <code>403<\/code>. LinkedIn answers <code>999<\/code>. A site behind a firewall throws a challenge page. <strong>None of those links are broken<\/strong> \u2014 they open perfectly well in your browser. Report them as broken and you hand the user a list of two hundred problems, of which one hundred and ninety are not problems, and they stop trusting the list.<\/p>\n\n<p>So Onsite Link Verdict only ever calls a link broken when it has proof:<\/p>\n\n<ul>\n<li>The destination server says the page is gone \u2014 <code>404<\/code> or <code>410<\/code>. And even then we ask a second time, with a different method, before accusing the link: there are servers that answer <code>404<\/code> to one kind of request and <code>200<\/code> to another, and a wrong accusation here is the most expensive kind.<\/li>\n<li>Or there is no server answering at all, three checks in a row \u2014 a domain that expired, a host that vanished.<\/li>\n<\/ul>\n\n<p><strong>Everything else goes to a separate \"Unverifiable\" tab<\/strong>, with a plain-language note about what happened. If a server answered us \u2014 with <code>403<\/code>, <code>503<\/code>, a rate limit, a challenge page, anything that is not <code>404<\/code> or <code>410<\/code> \u2014 it answered, and that is not proof the page died. Your list of real problems stays short, and short means believable.<\/p>\n\n<h4>It runs on your own server, and stays out of the way<\/h4>\n\n<p>There is no account to create, no cloud service and no credit card. Your posts, pages and comments are not uploaded anywhere \u2014 see \"External services\" below for everything that does leave your site, and why.<\/p>\n\n<p>Checking links is real work for the same server that answers your readers. Onsite Link Verdict is built around that:<\/p>\n\n<ul>\n<li><strong>No checking work happens inside the page your visitor is waiting for.<\/strong> It runs on your site's cron, in a request of its own.<\/li>\n<li><strong>At most 100 links per run, and never more than 45 seconds of wall clock<\/strong>, whichever comes first. Both are configurable; both are hard ceilings, not intentions.<\/li>\n<li><code>HEAD<\/code> requests first, falling back to <code>GET<\/code> only when a verdict depends on it. At most 2 KB of any response body is ever read.<\/li>\n<li>The same URL repeated across fifty posts is fetched <strong>once<\/strong>, not fifty times. Measured: 90 links across 15 posts, pointing at 6 different addresses, cost <strong>8 requests<\/strong>.<\/li>\n<li>A site that already told us it does not talk to robots is not asked again the next day.<\/li>\n<\/ul>\n\n<h4>What it checks<\/h4>\n\n<ul>\n<li><strong>Internal links<\/strong> \u2014 links to your own posts and pages. If one points at something that is still a draft, private or pending, you are told exactly that, instead of being told the page no longer exists<\/li>\n<li><strong>External links<\/strong> \u2014 links out to other sites<\/li>\n<li><strong>Images<\/strong>, including the ones a page builder pulls in<\/li>\n<li><strong>Links inside comments<\/strong><\/li>\n<li><strong>Redirects<\/strong> \u2014 it follows the chain, and says so when the chain loops or never arrives anywhere<\/li>\n<\/ul>\n\n<h4>A local broken link checker: no cloud service, no credits<\/h4>\n\n<p>The link scanner runs locally, on your own site's cron, on the same server that answers your readers. There is no cloud service behind the plugin, no API key and no account to create: the results live in a table in your own database, and your content is never uploaded anywhere.<\/p>\n\n<p>Some things do go out of your site \u2014 the servers hosting the links being checked, and Freemius, which runs our licensing and checkout. <strong>They are set out one by one, with the domains and with what you can decline, under \"External services\" below.<\/strong><\/p>\n\n<p>What that buys you:<\/p>\n\n<ul>\n<li><strong>Nothing is metered.<\/strong> How many links you check does not change the price, because there is no price. Fifty thousand links cost the same as fifty. One structural limit worth knowing: a single post or comment with more than 1,000 links is checked to the first 1,000, and the panel tells you when that happens.<\/li>\n<li><strong>No back end holds your data.<\/strong> There is nowhere for your content to be uploaded to, because there is no service on the other end holding it. What that means for your own processing records is your call \u2014 this is a description of the plugin, not legal advice.<\/li>\n<li><strong>It works from inside the site.<\/strong> A staging site, an intranet, a site behind HTTP authentication or a firewall is not reachable from the public internet \u2014 but the plugin is not arriving from the internet, it is already there. Those pages get checked like any other.<\/li>\n<\/ul>\n\n<p>The privacy note for the plugin is at https:\/\/onsitetools.dev\/privacy\/ and says the same thing in more detail.<\/p>\n\n<p>Once the first sweep is done it keeps monitoring. Every link is checked again after a week, and one that is failing after a day, so a page that dies next month turns up next month \u2014 you do not have to remember to run an audit.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li>Checks links <strong>and<\/strong> images, in posts, pages, custom post types and comments<\/li>\n<li><strong>Sees inside page builders.<\/strong> On a page built with Elementor, Divi, SiteOrigin or Beaver the links are not in the stored post content \u2014 they are assembled when the page is rendered. Onsite Link Verdict renders the page first and reads what a visitor sees, so those links are found<\/li>\n<li>Four clear tabs: Broken, Warnings, Unverifiable, Good<\/li>\n<li>Plain-language explanation of the results that matter \u2014 not just a bare status code<\/li>\n<li><strong>It knows your own site.<\/strong> A link to one of your pages that is still a draft, private or pending gives visitors a <code>404<\/code> \u2014 and instead of telling you the page no longer exists, Onsite Link Verdict tells you it exists and is not published, and which status it is in<\/li>\n<li>Automatic checks on your site's cron, or start a full-site scan with one click. The scan itself is done in small slices and picks up where it left off, so it never has to finish inside a single request<\/li>\n<li>Progress you can actually see \u2014 \"750 of 1,000 links checked (75%)\", with a rough time estimate, so you know it is working and not stuck<\/li>\n<li>Recheck any link on demand \u2014 it goes to the front of the queue and is checked on the next pass<\/li>\n<li>Entries disappear when the content does: remove a link from a post, trash the post, or delete a comment, and the entry leaves the list. The table does not grow forever<\/li>\n<li>Warns you if your site's cron is disabled, so checks do not silently never run<\/li>\n<li>Clean uninstall \u2014 removes its table, options and scheduled events<\/li>\n<\/ul>\n\n<h4>What it does not do<\/h4>\n\n<p>Onsite Link Verdict <strong>finds<\/strong> broken links and tells you exactly which post, page or comment each one is in. It does not edit your content: you fix each link in the editor, where you can see it in context.<\/p>\n\n<p>That is deliberate. Where a link should point is a judgement about your content, and the editor is where you can see the sentence it sits in.<\/p>\n\n<p>Replacing one URL across an entire site in a single step is the obvious next thing to want. That is what Pro is for, below.<\/p>\n\n<h4>Onsite Link Verdict Pro<\/h4>\n\n<p>Everything above is free, and stays free. Pro does the mechanical part, for people with more than a handful of links to fix:<\/p>\n\n<ul>\n<li><strong>Bulk-replace a URL everywhere at once.<\/strong> You type the new address, you see a list of every place it will change with the text around it, and only then does anything happen. There is an undo, and the undo refuses to run if you edited the content afterwards.<\/li>\n<li><strong>It will not touch what it cannot verify.<\/strong> If a link comes from a shortcode, a page builder or a theme filter, the address is not in the content we would be saving. Onsite Link Verdict says so and leaves it alone, so the report you get matches what actually changed.<\/li>\n<li><strong>Silence the domains that never answer bots.<\/strong> One pattern per line, and they stop appearing.<\/li>\n<li><strong>Export any tab to CSV<\/strong>, in a form that opens correctly in Excel.<\/li>\n<\/ul>\n\n<p>Pro is an annual licence, from 29 EUR a year plus VAT, for one site. It is bought from https:\/\/onsitetools.dev\/onsite-link-verdict\/ and there is a link inside the plugin. The free version never asks you for an email address of its own: the only place an email is shared is the activation opt-in described above, which you can decline.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin contacts two external destinations: the websites you link to, and Freemius, which\nhandles our licensing and payments. Here is what goes to each, and when.<\/p>\n\n<h4>1. The websites you link to<\/h4>\n\n<p>Checking whether a link is alive means requesting it from the server that hosts it. That server\nreceives the address being checked and, in the <code>User-Agent<\/code> header that identifies the checker,\nyour site's address and the plugin's version. This happens for every link in your content, on the\nplugin's own schedule. It is what the plugin is for, and it cannot be switched off without\nswitching off the checking.<\/p>\n\n<p>Links to your own site are requested the same way, over HTTP, from your own server. When one of\nthose answers <code>404<\/code> or <code>410<\/code>, the plugin then looks the address up in your own database, so it can\ntell you the page exists but is a draft, private or pending, instead of reporting it gone.<\/p>\n\n<h4>2. Freemius<\/h4>\n\n<p>Freemius Inc. runs our licensing, updates and checkout. It is contacted in four situations, and\nonly the first is optional.<\/p>\n\n<p><strong>On activation, if you opt in.<\/strong> WordPress shows you a screen asking whether to share information\nabout your site. There are four groups, and you can clear all but the first:<\/p>\n\n<ul>\n<li>your WordPress user's first and last name and email address (required to opt in at all);<\/li>\n<li>the home page address and title, the WordPress and PHP versions, and the site language;<\/li>\n<li>this plugin's own version and whether it is active or uninstalled;<\/li>\n<li>the names, slugs and versions of the plugins and themes installed on the site, and whether each\nis active. <strong>This one is ticked for you<\/strong> unless you clear it.<\/li>\n<\/ul>\n\n<p><strong>You can decline the whole screen<\/strong>, and the plugin works exactly the same \u2014 declining is handled\nentirely inside your own site and sends nothing.<\/p>\n\n<p><strong>On a schedule, if you opted in.<\/strong> Your site then checks in with Freemius periodically to see\nwhether a licence has been bought or changed. This happens in the free version too, and needs no\nlicence key.<\/p>\n\n<p><strong>When you open the \"Change Plan\" screen<\/strong> inside WordPress. That screen loads the current prices\nfrom Freemius when you open it, whether or not you opted in.<\/p>\n\n<p><strong>When you deactivate the plugin.<\/strong> WordPress shows a short form asking why; if you fill it in, the\nreason goes to Freemius. Closing it sends nothing.<\/p>\n\n<p>And, in the paid add-on only, your licence key is validated with the same service.<\/p>\n\n<p>Domains contacted: <code>api.freemius.com<\/code>, <code>wp.freemius.com<\/code>, <code>checkout.freemius.com<\/code>.\nFreemius terms: https:\/\/freemius.com\/terms\/ \u00b7 Freemius privacy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<h4>Nothing else<\/h4>\n\n<p>No other destination is contacted. Your posts, pages and comments are not uploaded anywhere, and\nthe result of every check is stored in a table in your own database.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Tools \u2192 Onsite Link Verdict<\/strong>.<\/li>\n<li>Run the first scan. Depending on your site's size, the first full pass may take a while \u2014 it runs in small batches on purpose.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20my%20content%20anywhere%3F\"><h3>Does this send my content anywhere?<\/h3><\/dt>\n<dd><p>No. Your posts, pages and comments stay where they are, and the results are stored in your own database. There is no cloud service behind the plugin holding your content. See \"External services\" below for everything that does go out, and why.<\/p><\/dd>\n<dt id=\"what%20data%20does%20the%20plugin%20handle%3F\"><h3>What data does the plugin handle?<\/h3><\/dt>\n<dd><p>It reads your posts, pages and comments and stores the links it finds in a table in your own database. Your content is not uploaded, and there is no cloud service behind it.<\/p>\n\n<p>Two destinations are contacted, and both are set out in full under \"External services\" above: the servers that host the links being checked, and Freemius, which runs our licensing and checkout. The Freemius contact starts with an opt-in screen you can decline.<\/p>\n\n<p>What that means for your own processing records is for you to decide \u2014 this is a description of the plugin, not legal advice.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>It is built not to. Work happens in small scheduled batches with a hard cap, not all at once.<\/p><\/dd>\n<dt id=\"can%20it%20fix%20the%20broken%20links%20for%20me%3F\"><h3>Can it fix the broken links for me?<\/h3><\/dt>\n<dd><p>No. It finds them and tells you exactly where each one is; you change the link in the post editor, where you can see it in context. Replacing a URL across the whole site in one step \u2014 with a preview of every change before it happens, and an undo \u2014 is what the paid add-on does.<\/p><\/dd>\n<dt id=\"why%20is%20a%20link%20listed%20as%20%22unverifiable%22%3F\"><h3>Why is a link listed as \"Unverifiable\"?<\/h3><\/dt>\n<dd><p>Because the server answered us with something that is not <code>404<\/code> or <code>410<\/code>. Some servers refuse automated requests \u2014 Amazon, X, LinkedIn and anything behind a bot firewall all do. The link is probably fine; open it in your browser to confirm.<\/p>\n\n<p>They are kept separate on purpose. A refusal is not a death: the page is there, and a reader with a browser reaches it. Nor is it something you can fix from your own site, since what a distant server does with an automated request is not yours to configure.<\/p><\/dd>\n<dt id=\"why%20is%20it%20taking%20so%20long%20to%20check%20my%20links%3F\"><h3>Why is it taking so long to check my links?<\/h3><\/dt>\n<dd><p>Because it deliberately works in small bites in the background. How long depends on how many links you have and which speed you picked: the panel shows the estimate for your own site next to each setting, under Tools \u2192 Onsite Link Verdict.<\/p>\n\n<p>If it is slower than you want, change the setting to Fast \u2014 but read what it says there first. Checking faster means hammering the sites you link to harder, and more of them will start refusing the checks, which puts those links in \"Couldn't verify\" instead of giving you a real answer.<\/p><\/dd>\n<dt id=\"i%20added%20an%20exclusion%20rule%20and%20the%20links%20are%20still%20in%20the%20list\"><h3>I added an exclusion rule and the links are still in the list<\/h3><\/dt>\n<dd><p>They leave the list as each post is checked again, not all at once. A rule takes effect the next time Onsite Link Verdict scans the post, page or comment a link sits in \u2014 so on a small site they disappear quickly, and on a site with hundreds of posts a full sweep takes several background runs. Nothing is stuck; the list is catching up.<\/p>\n\n<p>If you want a rule to take effect on one specific post right away, open that post and save it. That schedules a fresh scan of it.<\/p>\n\n<p>(Exclusion rules are part of Pro.)<\/p><\/dd>\n<dt id=\"the%20plugin%20never%20seems%20to%20check%20anything\"><h3>The plugin never seems to check anything<\/h3><\/dt>\n<dd><p>Your site's cron is probably disabled. Onsite Link Verdict shows a warning at the top of its page when it detects this. Ask your host how to set up a real cron job.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.6.6<\/h4>\n\n<ul>\n<li>The plugin now links to its own home page, so you can reach the documentation and the paid add-on from the plugins screen instead of searching for them.<\/li>\n<li>The description says what the plugin checks \u2014 internal links, external links, images, links in comments and redirect chains \u2014 which it never actually said anywhere.<\/li>\n<li>Corrected: the description still said the paid add-on was not on sale yet. It has been on sale since 2 September.<\/li>\n<li><strong>A new \"External services\" section sets out both destinations the plugin contacts<\/strong> \u2014 the websites you link to, and Freemius for licensing and checkout \u2014 naming the domains, what is sent to each, when, and which parts you can decline. The description used to claim that nothing left your site at all, which was not true: checking a link means contacting the server that hosts it, and the activation opt-in shares your details if you accept it. It is written out now instead of being claimed away.<\/li>\n<li>Corrected: the description said there was no cap on how many links are checked. There is one \u2014 a single post or comment is checked to its first 1,000 links. The panel already told you when that happened; the description did not.<\/li>\n<\/ul>\n\n<h4>0.6.5<\/h4>\n\n<ul>\n<li>Fixed: the \"Change Plan\" page inside WordPress could open with no plans on it at all. It was asking for prices in US dollars, and the plans are priced in euros. It now opens in euros. The hosted checkout was never affected \u2014 it picks the currency from where you are.<\/li>\n<\/ul>\n\n<h4>0.6.4<\/h4>\n\n<ul>\n<li>Fixed: after entering a valid licence key, the panel could still show the invitation to buy Pro. There is one more step after the key \u2014 a confirmation email \u2014 and until you click the button in it the paid features stay off. The panel now says that, instead of behaving as though you had never bought anything.<\/li>\n<\/ul>\n\n<h4>0.6.3<\/h4>\n\n<ul>\n<li>Fixed: if a background run was interrupted \u2014 the host cutting the request short, the site running out of memory \u2014 the plugin waits ten minutes and then takes the job back. Two runs that reached that moment together could both decide it was theirs and start checking at the same time, which is twice the work on your server for no extra result. Only one can take it now, and the database is what decides.<\/li>\n<li>The exclusion rules typed into the box are cleaned before being stored. Web addresses with %-encoded characters are kept exactly as written.<\/li>\n<\/ul>\n\n<h4>0.6.2<\/h4>\n\n<ul>\n<li>The list of links now comes first on the page. The speed setting and the note about the paid add-on moved below it. They were sitting between the tabs and the list, which meant that on a laptop you opened the tool to look at your broken links and saw a setting instead.<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>Fixed: the line above the list still estimated the wait as if every run took an hour, which stopped being true when the speed settings arrived. On Normal it promised \"about 19 hours\" in the speed box and warned \"about 4 days\" two lines below, for the same site. Both numbers now come from the same calculation.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li><strong>You can now choose how fast it checks.<\/strong> Finding links was always quick; checking whether they are alive was capped at 100 an hour, which meant a site with ten thousand posts waited nearly two weeks for a complete picture. There are now three settings \u2014 Careful, Normal and Fast \u2014 and the panel shows what each one means for the number of links waiting on <em>your<\/em> site. The default is Normal, which is sixteen times faster than before.<\/li>\n<li>Faster is not automatically better, and the plugin says so: the quicker you check, the more of the sites you link to will start refusing the checks, and a refused check means the link lands in \"Couldn't verify\" instead of getting a real answer. Careful is there for shared hosting.<\/li>\n<li>The per-run time limit did not change. It is the ceiling that actually protects your server, and a run still stops when it hits it.<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Renamed. The plugin was called Link Sentry; it is now Onsite Link Verdict, after the WordPress.org review pointed out that the old name was too close to an existing service and to a registered trademark. Nothing about what the plugin does has changed.<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Fixed: with both the free and the paid version installed at the same time \u2014 which is exactly the moment somebody upgrades \u2014 the paid version could quietly fall back to the free feature set. Only one of the two folders was ever searched for classes. Each folder now looks in its own.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Housekeeping, with nothing to see on your site: the code for the paid add-on is now packaged and distributed separately, the way the plugin directory requires. The free version does exactly what it did before.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li><strong>Links inside page builders are now found.<\/strong> Elementor, Divi, WPBakery and many shortcodes hook into <code>the_content<\/code> and need to know which post they are drawing, which they ask the global <code>$post<\/code>. Onsite Link Verdict was not setting it up, so on a page built with Elementor \u2014 where the post content itself is empty \u2014 the scan found <strong>nothing<\/strong> and reported a clean bill of health. A false all-clear is worse than a false positive: with a false positive you lose time, with this you lose the page and never know. Verified against a real Elementor install.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>A link is never reported as broken on the strength of a <code>HEAD<\/code> request alone. Some servers answer <code>404<\/code> to <code>HEAD<\/code> and <code>200<\/code> to <code>GET<\/code> \u2014 zazzle.com does exactly this \u2014 and a <code>404<\/code> is the one verdict Onsite Link Verdict gives immediately, with no second chance. Every <code>404<\/code> and <code>410<\/code> is now confirmed with a <code>GET<\/code> before the link is accused. Healthy links still cost a single request.<\/li>\n<li>A server that answers is never reported as broken. Only <code>404<\/code>, <code>410<\/code> and a total absence of response now count as proof. This fixes the case where a site that persistently answers <code>503<\/code> to bots \u2014 Amazon does exactly this \u2014 was reported as a broken link after three checks.<\/li>\n<li>Challenge pages and bot walls are recognised from the response headers (<code>CF-Mitigated<\/code>, <code>CF-Chl-Bypass<\/code>, <code>X-DataDome<\/code>, <code>Retry-After<\/code>) and go straight to Unverifiable, whatever status code they carry.<\/li>\n<li>Links already settled as unverifiable are no longer re-checked on the short daily cycle. We stop knocking on doors that told us to go away.<\/li>\n<li>The Unverifiable tab explains why a server error ended up there, instead of showing a status code that seems to contradict the verdict.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"A broken link checker that runs on your own server: finds dead links and images, with no cloud service, no account and no credits.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356643"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/onsitetools"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356643"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356643"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356643"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356643"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356643"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}