=== LinkVeri – Honest Dead Link Detection ===
Contributors: kylin010, freemius
Tags: broken links, link checker, 404, dead links, seo
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Finds the broken links other checkers miss. Only 404 and 410 count as broken, nothing else. Scans page builders, menus, widgets and comments.

== Description ==

Most broken link checkers have the same two problems: they **miss** links, and they **cry wolf** about the ones they find.

LinkVeri fixes both.

= It doesn't cry wolf =

Other checkers mark a link "broken" the moment they get a 403 or a 301. But a 403 means *the site refused to answer us* — not that the page is gone. And a 301 is just a redirect, which is completely normal.

LinkVeri reports three states instead of two:

* **Broken** — only 404 and 410, the two status codes that actually mean "this resource does not exist"
* **Couldn't verify** — the site blocked our check (403, 429, timeout). We tell you honestly instead of guessing
* **OK** — everything else

When a site returns 403, LinkVeri sends one extra request to a deliberately non-existent path on the same domain. If that comes back 404, the site does let checkers through, so the original 403 is a genuine permission restriction and the page exists. If that is blocked too, the site blocks everything and we simply cannot know — so we say so.

Stack Overflow, Medium, Quora, Etsy, Home Depot and Indeed all block automated checks. Other plugins report every link to those sites as broken. LinkVeri doesn't.

= It looks where others don't =

Links hide in places most checkers never open:

* **Page builder content** — Elementor stores content as JSON in post meta, including headers and footers. On one real site, **26% of all links existed only there**
* **Navigation menus** — links in your menu appear on *every page*. Many checkers skip them entirely
* **Widgets** — footer social links and partner links. No major competitor scans these at all
* **Comments** — both links in the text and the commenter's website field
* **Custom fields and ACF**
* **Category and tag descriptions**

= It won't slow your site down =

LinkVeri checks a handful of links every few minutes, forever. No burst, no spike. When a visitor is browsing your site, it automatically drops to the smallest batch size to stay out of the way.

Most internal links are resolved directly from your database instead of over HTTP. Only the few it cannot classify locally are requested, which keeps the plugin from competing with your real visitors for PHP processes.

Need results right now? Click **Scan entire site**. It runs only while you have that page open, shows live progress, and stops the moment you close the tab or press Stop.

= LinkVeri Pro =

The free version finds and reports broken links, with no limit on how many. It never modifies your content.

LinkVeri Pro adds one-click fixing: replace a dead link, or unlink it while keeping the text, across every place it appears. Before changing anything, Pro saves the original content to its own backup table — not to WordPress revisions, which plenty of sites disable — so every fix is one undoable batch.

== Installation ==

1. Upload the plugin to `/wp-content/plugins/linkveri/`, or install it through **Plugins → Add New**
2. Activate it
3. Open **LinkVeri** in your admin menu

That's it. Checking starts automatically in the background. Click **Scan entire site** if you want results immediately.

== Frequently Asked Questions ==

= Will this slow down my website? =

No. The background check handles only a few links every five minutes and automatically backs off when your site is busy. Internal links don't generate HTTP requests at all.

= Why does a link show as "Couldn't verify" instead of broken? =

Because the target site refused our check. Many large sites (Stack Overflow, Medium, Amazon, LinkedIn) block automated requests. That tells us nothing about whether the page exists, so we don't guess. Open the link yourself to confirm.

= Can the plugin fix links for me? =

Detection is free and unlimited. Replacing or unlinking dead links in one click, with automatic backups and undo, is part of LinkVeri Pro.

= Does it work with Elementor? =

Yes, including headers and footers built with Elementor. This is where a large share of links usually live, and where most checkers never look.

= Does it check images? =

Yes. `<img>` and `<iframe>` sources are checked alongside regular links.

== External services ==

= Checking links =

To find out whether a link still works, LinkVeri sends an HTTP HEAD request (and, if the site rejects HEAD, a small GET limited to the first 2 KB) from your server to that link's address. Before contacting any site for the first time it reads that site's robots.txt and honours it. Requests go only to links found in your own content; nothing is sent about your site or you. The User-Agent is fixed and documented at https://linkveri.com/bot so site owners can identify and, if they wish, block it. Links pointing at private or internal network addresses are never requested.

= Freemius =

LinkVeri uses the Freemius SDK for licensing, updates of the Pro version, and optional usage tracking. Tracking is opt-in: nothing is sent unless you explicitly allow it on the screen shown after activation, and you can skip it. If you opt in, Freemius receives the information listed on that screen — your site URL, WordPress and PHP versions, the plugin version, and activation/deactivation events. Freemius privacy policy: https://freemius.com/privacy/ — terms: https://freemius.com/terms/

== Changelog ==

= 1.0.0 =
* First release.
* Three-state reporting: only 404 and 410 count as broken; blocked checks are labelled honestly instead of guessed.
* Finds links other checkers miss: Elementor and other page builders, navigation menus, widgets, comments, custom fields and term descriptions.
* Most internal links are resolved against the database instead of over HTTP, so a scan barely touches your own site's PHP workers.
* Continuous background checking that slows down when visitors are active, rather than pausing or hammering.
* Honours robots.txt (RFC 9309) before requesting anything on another site.
* Pro: one-click replace and unlink, with every change backed up and undoable.
* English and Simplified Chinese.
