Search by

justinholtweb / craft-appleseed

justinholtweb

Broken link checker for Craft CMS 5

Package info

github.com/justinholtweb/craft-appleseed

Type:craft-plugin

pkg:composer/justinholtweb/craft-appleseed

Statistics

Installs: 68

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 1

5.2.5 2026-10-08 11:18 UTC

This package is auto-updated.

Last update: 2026-10-08 11:19:23 UTC


README

Appleseed proactively discovers and checks every link across your Craft CMS site, helping you find and fix broken links before your visitors do.

Features

  • Hybrid link discovery -- scans entry fields in the database and spiders rendered pages
  • Smart HTTP checking -- HEAD-first with GET fallback, retries with exponential backoff, per-domain rate limiting
  • CP Dashboard -- summary cards, filterable results table, detail views, ignore/rescan actions
  • Scheduled scans -- optional daily, weekly, or monthly automatic scanning
  • Entry-save scanning -- optionally check links whenever an entry is saved
  • Email notifications -- get notified when broken links exceed your threshold
  • CSV export -- download results for offline review
  • Ignore patterns -- regex-based URL exclusion
  • Console commands -- craft appleseed/scan for CLI/cron usage
  • Badge count -- broken link count shown in the CP nav

Requirements

  • Craft CMS 5.0.0 or later
  • PHP 8.2 or later

Installation

composer require justinholtweb/craft-appleseed
php craft plugin/install appleseed

Console Commands

# Run a full scan
php craft appleseed/scan

# Scan a single entry
php craft appleseed/scan/entry --id=123

# Check a single URL
php craft appleseed/check-url https://example.com

Configuration

Visit Settings > Appleseed in the control panel, or create a config/appleseed.php file:

<?php

return [
    'checkExternalLinks' => true,
    'timeout' => 10,
    'maxRetries' => 3,
    'rateLimitPerSecond' => 1.0,
    'spiderEnabled' => true,
    'maxPagesToSpider' => 200,
    'scanBatchSize' => 50,
    'scanFrequency' => 'manual', // manual, daily, weekly, monthly
    'scanOnEntrySave' => false,
    'notificationEmails' => '',
    'notificationThreshold' => 1,
    'emailLayoutTemplate' => '',
    'ignorePatterns' => '',
    'userAgent' => 'Appleseed Link Checker (Craft CMS)',
    // Status the dashboard filters by on first load: '' (all), broken, redirect,
    // working, server_error, timeout, dns_error
    'defaultStatusFilter' => '',
];

Scheduled scans

Scans are manual by default -- nothing is queued when the plugin is installed or updated. Pick a scanFrequency of daily, weekly, or monthly to scan automatically. The schedule is measured from your most recent completed scan, so run one from the dashboard (or with php craft appleseed/scan) to start the clock.

Read-only settings

When allowAdminChanges is disabled for the environment, the settings screen renders read-only: the fields show the active configuration but can't be edited, and saving is rejected. Set your values in config/appleseed.php on those environments.

Only admins can change settings. Users with the "Manage Appleseed settings" permission see them read-only, because settings are project config — including the template that lays out the report email.

What gets checked

Appleseed only requests http and https URLs whose host is one of your Craft sites or resolves to public addresses. Links to localhost, private networks (10.x, 192.168.x, …) or cloud metadata endpoints are recorded as not checked, with the reason, and a redirect into one of those is stopped at the hop. Your own sites' hosts are always checked, even when they resolve to a private address.

License

MIT