=== Glimmernet Spot Check ===
Contributors: glimmernet
Tags: broken links, link checker, links, maintenance, editing
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 8.1
Stable tag: 1.0.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

An on-demand broken link checker. It checks the links on one page when you ask, instead of crawling your whole site in the background.

== Description ==

Spot Check is an on-demand broken link checker. It checks the links on one post or page when you ask, and it shows you the results right away.

It is not a crawler. It never scans your site in the background, never stores link history, and never changes your content. Nothing happens unless you ask for it.

**How to use it**

You can start a check from two places. While viewing or editing a post, click **Check Links** in the black admin toolbar. Or hover over a row on the Posts or Pages screen and click **Check Links** there.

A panel opens with every link in the post. As each check finishes, the link gets a colored dot.

**What the colors mean**

* **Green:** the link works.
* **Red:** the link is broken. The page is gone, the domain is dead, or the server never answered. Placeholder links, such as empty links, a lone "#", or javascript: links, are also marked red.
* **Yellow:** we could not verify it, because the site refused our automated check. The link is probably fine, so click it yourself to be sure.
* **Gray:** skipped. Some things simply can't be checked, like email links and in-page anchors.

**Why yellow exists**

Some websites block all automated requests. They answer with "403 Forbidden" even though the page works fine for people. Many link checkers report these as broken, which is a false alarm. Spot Check marks them yellow instead and leaves the final call to you.

**How it checks**

Links to your own site are checked right in your browser, while links to other sites are checked by your server. The split exists because of a browser security rule. Browsers are not allowed to read responses from other websites, but servers are.

**Works with any editor**

The Check Links button lives in the admin toolbar and the post list, so it does not depend on your editor. It works the same with the Block Editor, the Classic Editor, Divi, Kadence, and other builders.

**Light and safe**

Only people who can edit a post can check its links. The plugin stores a single small settings row, and uninstalling removes it.

== Frequently Asked Questions ==

= A link shows yellow with "403 Forbidden" but it opens fine when I click it. Is it broken? =

Probably not. Some sites block automated requests, and government and news sites do this a lot. They send "403 Forbidden" to robots but show the page to people just fine. Spot Check marks these yellow instead of red, which means "check this one yourself." The link stays in future checks, so if the page ever truly dies, it will show up red.

= Why doesn't it check my header, footer, or menu links? =

Spot Check reads the saved body of one post. Header, footer, menu, sidebar, and widget links live outside the post body, so they are not included. Links created by dynamic blocks, like a "latest posts" block, are not seen either. Most page builder content is covered, too. Divi, Kadence, and block themes store the page body where Spot Check can read it. A few builders add some links only at view time, though — see the next question.

= A link is on my page, but Spot Check didn't list it. Why? =

Most likely a page builder added that link as the page loads, not when you saved. Spot Check reads your saved page content, where most links live, so it finds those. But some builders, like Elementor, keep their layout in a separate place. They turn certain links into real HTML only when a visitor views the page. Those links are not in your saved content yet, so Spot Check can't see them. When it detects one of these builders, it shows a short note in the results so nothing feels hidden. To check every link on the live page, run a full-site scanner like Broken Link Checker alongside it.

= A link shows an SSL error, but it loads fine in my browser. Why? =

Your server checks security certificates more strictly than your browser does. Some sites have sloppy certificate setups that browsers quietly work around but servers refuse. When that happens, Spot Check tries once more with the certificate check turned off. It then reports the real page status, along with a note about the certificate problem.

= I just fixed a link, but the old one still shows up. =

Spot Check reads the last saved version of the post. Save or update the post first, then run the check again.

= Does it slow down my site or store data? =

No. Checks only run while the results panel is open, and the results are thrown away when you close it. The plugin stores one small settings row, which is deleted if you uninstall.

= Can it fix broken links for me? =

Not in this version, and that is a deliberate choice. Spot Check is a safe,
read-only diagnostic. It tells you what is wrong and never touches your content,
so it cannot damage a page while trying to help. Editing links automatically is
also harder than it looks, because builders like Divi and Elementor store
content in their own shortcodes and data structures rather than plain HTML.
Changing a link safely in every builder, without breaking the layout or
corrupting saved data, is a genuinely non-trivial problem. A safe "fix this URL"
feature is on the roadmap for when it can be done with full accuracy and data
integrity.

= Which post types does it work on? =

All public post types, including custom ones. New post types are turned on automatically, and you can turn any type off under Settings → Spot Check.

== Installation ==

1. Install and activate the plugin.
2. Open any post and click **Check Links** in the admin toolbar, or hover over a post on the Posts screen.
3. If you like, visit **Settings → Spot Check** to adjust post types, the timeout, or the User-Agent.

== Screenshots ==

1. The results panel with live green, red, and yellow statuses and a summary line.
2. The Check Links button in the admin toolbar.
3. The Check Links row action on the Posts screen.
4. The settings screen.

== Changelog ==

= 1.0.1 =
* Added a notice in the results panel when a page is built with a data-model builder (Elementor, Beaver Builder, Oxygen, Bricks). Some links those builders' add-ons render on the fly are not in the saved content Spot Check reads, so the notice keeps the list from looking complete when it isn't.
* Clarified the FAQ about which links are and aren't covered.

= 1.0.0 — 2026-06-12 =
* First release.
* Hybrid checking: links to your own site are checked in the browser, and links to other sites are checked by the server.
* Honest results: blocked responses like 403 show as yellow "could not verify" instead of broken.
* Server checks send browser-like request headers, which reduces false 403 blocks.
* SSL retry: when a certificate fails, the real page status is still fetched and reported.
* Placeholder links are flagged, never skipped. Empty links, a lone "#", javascript: links, and empty mailto: links all show as broken.
* Works with any editor through the admin toolbar button and the post list row action.
* Results stream in live, five at a time, with a reason for each link and a summary line.
* Settings for post type opt-out, request timeout, User-Agent, and blocked-response handling.
* Every request verifies the edit_post capability and a nonce.
* Read-only by design: no crawling, no cron, no stored history. Uninstall removes the single settings option.

== Upgrade Notice ==

= 1.0.1 =
Adds an on-screen notice when a page uses a builder like Elementor, so you know some add-on links may render dynamically and fall outside the check.

= 1.0.0 =
First release.
