Ochrestack

Linkrounds, a broken link checker for WordPress

Tools > Linkrounds on a real WordPress blog: 'Last scan finished November 6, 2026 10:56 pm: 63 different addresses checked, used in 70 places', the counts All (70), Broken (10), Redirected (7), Inconclusive (1), OK (52), Ignored (0), the Export CSV button, and the first two rows, each a docs.blender.org address in full with its link text, the post it is in with Edit and View, a red Broken badge with 404 and 'Page not found (404).', and the time it was last checked

Finds broken links and images from your own server, and calls a link Broken only after it fails twice, an hour apart. No account, no credit card, no link limit.

Linkrounds is free. Download linkrounds-1.1.0.zip (66 KB) and install it under Plugins > Add New Plugin > Upload Plugin. WordPress 6.5 or newer, PHP 7.4 or newer. The WordPress.org listing is not live yet.

Linkrounds Pro: $29 one-time for up to 3 sites; $79 one-time for unlimited sites. Scheduled full scans, an email report of what broke since the last one, and CSV export. An add-on to the free plugin. No renewal; nothing stops working.

The checkout below is the 3-site licence, and it currently charges $19. For the unlimited-sites licence, write to [email protected].

Buy for $19

Polar checkout · download after payment · no renewal · no licence check · 14-day refund · details

Who needs Pro, and who doesn't. WordPress itself has no broken-link checker. Free plugins already check links on your own server without an account: Broken Link Checker's local engine, Dragon Broken Links and DevDome Link Monitor. A buyer who does one cleanup a year needs only the free Linkrounds, and the copy says so. Pro's $29 buys hands-off scheduled full-site scans, an emailed report of what broke since the last one, and a CSV for a client or an editor. Links inside page-builder layouts stored outside the post content, custom fields, widgets and comments are not checked in version one, and the listing says so plainly.

Four answers, in plain words

Each row shows the page the link is on (with Edit and View), the full address, the link text, the status code, the reason and when it was last checked. Filter by answer or post type, search by address, and use Re-check now on any row.

Above: Tools > Linkrounds on the demo blog described below, after the second checks, with Linkrounds Pro active (hence the Export CSV button).

The same results screen straight after the first scan: Broken (0), Inconclusive (11); the two docs.blender.org rows and the Godot row are Inconclusive with 404 and 'Page not found (404). First failure: it is checked again after November 6, 2026 10:51 pm and called Broken only if it fails again.'; the registry.khronos.org/glTF/ row is Inconclusive with 403 and 'Access denied (403). Many sites refuse automated checks while working fine in a browser.'
The first scan, at 9:52 pm: nothing is Broken yet. Each 404 waits for its second check an hour later; the 403 stays Inconclusive. The image at the top of the page is the same screen later, after Linkrounds checked them again by itself.

Fixes you can undo

A Broken row with Edit address open: the old Godot address step_by_step/your_first_game.html, a field holding the new address ending first_2d_game/index.html, and Save and Cancel buttons The message after Save: 'Changed https://docs.godotengine.org/en/stable/getting_started/step_by_step/your_first_game.html in “Our first Godot import: a low-poly lighthouse”. Saved as a revision: you can restore the previous version from the post’s Revisions screen. New address https://docs.godotengine.org/en/stable/getting_started/first_2d_game/index.html checked: OK. The page answered normally (200).'
Edit address on one row, then the message: what changed, where, and the new address already checked.
WordPress's Compare Revisions screen for “Our first Godot import: a low-poly lighthouse”: under Content, one paragraph changed, with step_by_step/your_first_game highlighted in red on the Removed side and first_2d_game/index highlighted in green on the Added side; the paragraphs above and below are identical on both sides
The post's own Revisions screen: the fix is one revision, compared with the version before it; only the address changed. We then restored the earlier version from this screen, and the link came back.

Exclusions and automatic re-checks

The Settings tab: Excluded addresses with staging.lowpolylane.test and *.wordpress.org/support/* typed in, and the help text on subdomains and * wildcards; Content to scan with Posts, Pages, Synced patterns and Links in navigation menus ticked; Second check after: 1 hour, with the note that a link is called Broken only when it fails with not found, gone or a missing domain twice, at least this long apart; Save settings
Settings: exclusions with wildcards, what to scan, and the wait before the second check (1, 6 or 24 hours).

Gentle on your server

Linkrounds Pro

A separate add-on that needs the free plugin. It adds a Schedule & email tab and an Export CSV button.

The Schedule & email tab of Linkrounds Pro after Save schedule: 'Schedule saved. Next scheduled scan: November 9, 2026 6:00 am'; Scheduled full scan: Weekly, on Monday, at 06:00, with the note that times are in the site's time zone (Europe/London); Email the report to: studio@lowpolylane.test and client-editor@lowpolylane.test; 'Last report sent: November 6, 2026 10:57 pm'; and the line 'Linkrounds Pro is a one-time purchase: no renewal, no licence check, nothing stops working.'
Linkrounds Pro's Schedule & email tab on the demo blog: a weekly scan on Monday at 06:00 in the site's time zone, two report addresses, and the time the last report went out.
The first report email from the demo blog (one item left out)
To: [email protected], [email protected]
Subject: [Low Poly Lane] Linkrounds: 8 links broke since the last report

Linkrounds finished a scheduled check of every link on Low Poly Lane (http://lowpolylane.test/) on November 6, 2026 10:57 pm.

This is the first report, so it lists every link that is broken now: 8.

1. https://docs.blender.org/manual/en/latest/render/blender_render/index.html
   On: “Why we still keep the 2.79 manual bookmarked” http://lowpolylane.test/why-we-still-keep-the-2-79-manual-bookmarked/
   Link text: “the Blender Internal chapter of the manual”
   Why: Page not found (404).

2. https://docs.blender.org/manual/en/latest/game_engine/index.html
   On: “Why we still keep the 2.79 manual bookmarked” http://lowpolylane.test/why-we-still-keep-the-2-79-manual-bookmarked/
   Link text: “the game engine manual”
   Why: Page not found (404).

3. http://lowpolylane.test/wp-content/uploads/2025/05/turntable.png
   On: “Cycles or EEVEE for product turntables?” http://lowpolylane.test/cycles-or-eevee-for-product-turntables/
   Link text: “Cycles or EEVEE for product turntables?”
   Why: The file is not in this site’s uploads folder.

[Item 4, a 404 on another project's old code page, left out here.]

5. https://docs.blender.org/manual/en/latest/addons/import_export/scene_gltf2.html
   On: “Where to ask when Blender misbehaves” http://lowpolylane.test/where-to-ask-when-blender-misbehaves/
   Link text: “the glTF add-on page in the manual”
   Why: Page not found (404).

6. https://docs.blender.org/manual/en/latest/files/import_export/scene_gltf2.html
   On: “Resources” http://lowpolylane.test/resources/
   Link text: “glTF import and export”
   Why: Page not found (404).

7. https://docs.godotengine.org/en/stable/getting_started/step_by_step/your_first_game.html
   In a navigation menu, item “Godot tutorial”
   Why: Page not found (404).

8. https://docs.godotengine.org/en/stable/getting_started/step_by_step/your_first_game.html
   In the navigation menu “Main”, link “Godot tutorial”
   Why: Page not found (404).

See and fix them: http://lowpolylane.test/wp-admin/tools.php?page=linkrounds&category=broken

You get this email because your address is set under Tools > Linkrounds > Schedule & email. Change the addresses or turn the schedule off there.

Captured on the demo site, where wp_mail() writes to a file instead of a mail server. The scheduled-scan event was run by hand rather than waiting for Monday, and the report event was run without the usual 65-minute wait; both ran Pro's own code. Two of the ten Broken places had been fixed a minute earlier, so the report lists eight.

Tested on a real site

Every image on this page is a screenshot of a real WordPress 7.1.4 site, running locally on PHP's built-in server with the SQLite Database Integration plugin, taken in Chromium under a virtual display on November 6, 2026, with Linkrounds 1.1.0 and Linkrounds Pro 1.0.1 installed from their zips. The site is "Low Poly Lane", a demo blog of a small 3D studio: 12 posts and 2 pages from 2019 to 2025, a menu, and links to real Blender, Godot and WordPress documentation, some of which has since moved or gone.

AnswerFirst scan, 9:52 pmAfter the second check, 10:53 pm
Broken08 addresses (10 places)
Redirected7 places5 addresses (7 places)
Inconclusive11 places: 10 failures waiting for the second check, 1 refused (403)1 address (1 place), the 403
OK52 places49 addresses (52 places)

63 addresses in 70 places. We opened every Broken address by hand at 10:55 pm with a browser User-Agent: the seven web addresses all returned 404, and the eighth is an image we had deleted from the uploads folder. The one Inconclusive address, registry.khronos.org/glTF/, refused us with 403 by hand too.

Details

What it sends over the network

To check a link, Linkrounds sends a HEAD request from your server to the linked address (and a GET when HEAD does not succeed), with the User-Agent Mozilla/5.0 (compatible; Linkrounds/1.0; link check). This happens during a scan, on Re-check now, in the daily re-check, and when you save a post that contains links (from activation, even before the first scan). Nothing else is sent: no data about your site, your users or your content goes to Ochrestack or to any other service. There is no account, no telemetry and no update or licence check. Pro's email report goes only to the addresses you set, through your site's own mail setup. Results stay in two tables in your own database and are removed when you delete the plugin.

Documentation

The one-page Linkrounds quick start covers installing, the first scan, the four answers, fixing and undoing, exclusions and Pro.

Install

  1. Download linkrounds-1.1.0.zip. Do not unzip it.
  2. In WordPress, open Plugins > Add New Plugin > Upload Plugin, choose the zip, Install Now, Activate.
  3. Open Tools > Linkrounds and click Scan now.
  4. For Pro, install linkrounds-pro.zip the same way after the free plugin, then open Tools > Linkrounds > Schedule & email.

Known limits

Questions

Do I need an account, an API key or a credit card for the free plugin? No. It runs inside your WordPress site. There is nothing to sign up for and no link limit.

Is Pro a subscription? No. $29 once for up to 3 sites (currently $19 at checkout), or $79 once for unlimited sites. There is no renewal and no licence check, and nothing stops working.

A link works in my browser. Why is it Inconclusive? Many sites refuse automated checks (403, 999), ask for a login (401) or slow down busy visitors (429). Linkrounds can't tell whether such a link works, so it says so instead of calling it Broken.