PHPackages                             fell-mere/craft-brokenlinks - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fell-mere/craft-brokenlinks

ActiveCraft-plugin[Utility &amp; Helpers](/categories/utility)

fell-mere/craft-brokenlinks
===========================

Scans your Craft CMS site for broken links and displays results in the Control Panel.

1.1.0(yesterday)00proprietaryPHPPHP &gt;=8.2CI passing

Since Mar 6Pushed yesterday1 watchersCompare

[ Source](https://github.com/fell-mere/broken-link-checker)[ Packagist](https://packagist.org/packages/fell-mere/craft-brokenlinks)[ Docs](https://github.com/fell-mere/broken-link-checker)[ RSS](/packages/fell-mere-craft-brokenlinks/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (3)Versions (7)Used By (0)

Broken Links
============

[](#broken-links)

A Craft CMS plugin that scans your site for broken links by crawling each entry's rendered page and checking every outbound link with a HEAD request. Results are stored in the database and viewable in the Control Panel.

Requirements
------------

[](#requirements)

- Craft CMS 5.5.0 or later
- PHP 8.2 or later

Features
--------

[](#features)

- **Background scanning** — scans run as Craft queue jobs, so large sites won't time out
- **Incremental scans** — by default only re-scans entries updated since the last completed scan; force a full scan when needed
- **Configurable batch size** — control how many entries are processed per queue job
- **Dashboard widget** — shows a summary of broken links on the Craft dashboard
- **Export** — download results as a CSV
- **Console command** — trigger scans from the CLI (useful for cron jobs)

Screenshots
-----------

[](#screenshots)

The Broken Links page in the Control Panel — start an incremental scan, force a full scan, open advanced options, or clear stored data:

[![Broken Links control panel](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/overview.png)](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/overview.png)

Every broken link in the Control Panel, with its status, link text, page, and entry:

[![Broken links results in the Control Panel](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/results.png)](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/results.png)

The dashboard widget surfaces a count and the most recent broken links:

[![Broken Links dashboard widget](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/widget.png)](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/widget.png)

Advanced options let you tune the batch size per queue job:

[![Advanced scan options](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/advanced.png)](https://raw.githubusercontent.com/fell-mere/broken-link-checker/main/resources/screenshots/advanced.png)

Installation
------------

[](#installation)

#### With Composer

[](#with-composer)

```
cd /path/to/my-project

composer require fell-mere/craft-brokenlinks

./craft plugin/install brokenlinks
```

Usage
-----

[](#usage)

### Control Panel

[](#control-panel)

Navigate to **Broken Links** in the CP sidebar. Access requires the **Manage broken links** permission, which can be granted per user group under **Settings → Users → Permissions** (admins have it automatically).

ButtonDescriptionStart New ScanScans only entries updated since the last completed scanForce Full ScanScans all entries regardless of last updated dateAdvanced OptionsSet a custom batch size (default: 100 entries per job)View QueueOpens the Craft queue manager to monitor progressClear All DataDeletes all stored broken link records and scan historyResults can be exported as a **CSV** from the results table.

### Console

[](#console)

```
# Run an incremental scan (only updated entries)
./craft broken-links/scan

# Force a full scan of all entries
./craft broken-links/scan --force-full-scan

# Set a custom batch size
./craft broken-links/scan --batch-size=50

# Wait for the scan to complete before exiting (useful in CI)
./craft broken-links/scan --wait

# Check the status of the latest scan
./craft broken-links/status

# Check the status of a specific scan by ID
./craft broken-links/status 42

# Clear all stored data
./craft broken-links/clear-data
```

### Scheduling (cron)

[](#scheduling-cron)

`broken-links/scan` only *queues* the work — a queue runner must process it. Either run a persistent worker (`./craft queue/listen`) or pair the scan with `./craft queue/run`:

```
# Nightly incremental scan
0 2 * * *   cd /path/to/project && ./craft broken-links/scan
# Process the queue (omit if you run a persistent worker)
*/5 * * * * cd /path/to/project && ./craft queue/run
```

> `--wait` polls the scan's status but does **not** run the queue, so it's only useful when a worker is already running.

### Dashboard Widget

[](#dashboard-widget)

Add the **Broken Links** widget to your Craft dashboard. It shows the count of broken links found in the last scan and links directly to the full results. Configure the number of links shown via the widget settings.

How It Works
------------

[](#how-it-works)

1. A **GenerateSitemapJob** fetches all matching entry IDs and splits them into batches.
2. Each batch becomes a **CheckBrokenLinksJob** that:
    - Fetches the rendered HTML of each entry's public URL
    - Extracts all `` links
    - Sends a HEAD request to each link
    - Saves any link returning HTTP 400+ or that is unreachable
3. Results accumulate in the database across batches; the scan is marked complete once **every** batch has finished. Completion is tracked with an atomic per-scan counter, so it stays correct even with multiple concurrent queue workers.

Notes
-----

[](#notes)

- Scans cover enabled entries on the **primary site**.
- Only `http://` and `https://` links are checked; `mailto:`, `tel:`, anchor, and relative links are skipped.
- Each HTTP request has a 5-second timeout. Unreachable hosts (connection refused, DNS failure, etc.) are recorded separately from HTTP error responses.
- **SSRF protection:** links that resolve to private, loopback, or otherwise reserved IP addresses are skipped, *except* links pointing at your own site's hostname — so internal links are still checked while requests to internal infrastructure are blocked.

###  Health Score

43

—

FairBetter than 90% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3994671?v=4)[Fellmere](/maintainers/Fellmere)[@fellmere](https://github.com/fellmere)

---

Top Contributors

[![CraigClem](https://avatars.githubusercontent.com/u/81166917?v=4)](https://github.com/CraigClem "CraigClem (18 commits)")

---

Tags

cmsCraftcraftcmscraft-pluginseolink-checkerbroken-links

### Embed Badge

![Health badge](/badges/fell-mere-craft-brokenlinks/health.svg)

```
[![Health](https://phpackages.com/badges/fell-mere-craft-brokenlinks/health.svg)](https://phpackages.com/packages/fell-mere-craft-brokenlinks)
```

###  Alternatives

[nystudio107/craft-seomatic

SEOmatic facilitates modern SEO best practices &amp; implementation for Craft CMS 5. It is a turnkey SEO system that is comprehensive, powerful, and flexible.

1741.5M51](/packages/nystudio107-craft-seomatic)[verbb/formie

The most user-friendly forms plugin for Craft.

100387.6k57](/packages/verbb-formie)[verbb/navigation

Create navigation menus for your site.

92698.4k18](/packages/verbb-navigation)[verbb/workflow

Enforce multi-step review processes for creating entries.

138123.0k1](/packages/verbb-workflow)[verbb/comments

Add comments to your site.

13753.7k](/packages/verbb-comments)[verbb/vizy

A flexible visual editor field for Craft.

4249.7k](/packages/verbb-vizy)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
