Check all links in a Laravel application
PHP JavaScript HTML Shell
Latest commit 2c2969f Jan 8, 2017 @freekmurze freekmurze wip
Failed to load latest commit information.
resources v2 Dec 4, 2016
src wip Jan 8, 2017
tests v2 Dec 4, 2016
.editorconfig work in progress Nov 5, 2015
.gitattributes work in progress Nov 5, 2015
.gitignore add node js server Nov 16, 2015
.scrutinizer.yml work in progress Nov 5, 2015
.travis.yml v2 Dec 4, 2016 wip Jan 8, 2017 work in progress Nov 5, 2015 Update (#8) Jan 2, 2017 v2 Dec 4, 2016
composer.json wip Dec 5, 2016
phpunit.xml.dist wip Nov 6, 2015

Check all links in a Laravel app

Latest Version on Packagist Software License Build Status SensioLabsInsight Quality Score Total Downloads

This package provides a command that can check all links on your laravel app. By default it will log all links that do not return a status code in the 200- or 300-range. There's also an option to mail broken links.

If you like this package, take a look at the other ones we have made.


You're free to use this package (it's MIT-licensed), but if it makes it to your production environment you are required to send us a postcard from your hometown, mentioning which of our package(s) you are using.

Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium.

The best postcards will get published on the open source page on our website.


You can install the package via composer:

composer require spatie/laravel-link-checker

Next, you must install the service provider:

// config/app.php
'providers' => [

You must register the \Spatie\LinkChecker\CheckLinksCommand:

// app/Console/Kernel.php
protected $commands = [

You can optionally publish the config-file with:

php artisan vendor:publish --provider="Spatie\LinkChecker\LinkCheckerServiceProvider" --tag="config"

This is the contents of the published config file:

return [

     * The base url of your app. Leave this empty to use
     * the url configured in config/app.php
    'url' => '',

     * The profile determines which links need to be checked.
    'default_profile' => Spatie\LinkChecker\CheckAllLinks::class,

     * The reporter determines what needs to be done when the
     * the crawler has visited a link.
    'default_reporter' => Spatie\LinkChecker\Reporters\LogBrokenLinks::class,

     * To speed up the checking process we'll fire off requests concurrently. Here
     * you can change the amount of concurrent requests.
    'concurrency' => 10

     *  Here you can specify configuration regarding the used reporters
    'reporters' => [

        'mail' => [

             * The `from` address to be used by the mail reporter.
            'from_address' => '',

             * The `to` address to be used by the mail reporter.
            'to_address' => '',


You can start checking all links by issuing this command:

php artisan link-checker:run

Want to run the crawler on a different url? No problem!

php artisan link-checker:run --url=

Schedule the command

To frequently check all links you can schedule the command:

// app/console/Kernel.php

protected function schedule(Schedule $schedule)

Mail broken links

By default the package will log all broken links. If you want to have them mailed instead, just specify Spatie\LinkChecker\Reporters\MailBrokenLinks in the default_reporter option in the config file.

Creating your own crawl profile

A crawlprofile determines which links need to be crawled. By default Spatie\LinkChecker\CheckAllLinks is used, which will check all links it finds. This behaviour can be customized by specify a class in the default_profile-option in the config file. The class must implement the Spatie\Crawler\CrawlProfile-interface:

interface CrawlProfile
     * Determine if the given url should be crawled.
     * @param \Spatie\Crawler\Url $url
     * @return bool
    public function shouldCrawl(Url $url);

Creating your own reporter

A reporter determines what should be done when a link is crawled and when the crawling process is finished. This package provides two reporters: Spatie\LinkChecker\Reporters\LogBrokenLinks and Spatie\LinkChecker\Reporters\MailBrokenLinks. You can create your own behaviour by making a class adhere to the Spatie\Crawler\CrawlObserver-interface:

interface CrawlObserver
     * Called when the crawler will crawl the url.
     * @param \Spatie\Crawler\Url $url
    public function willCrawl(Url $url);

     * Called when the crawler has crawled the given url.
     * @param \Spatie\Crawler\Url                      $url
     * @param \Psr\Http\Message\ResponseInterface|null $response
    public function hasBeenCrawled(Url $url, $response);

     * Called when the crawl has ended.
    public function finishedCrawling();

To make it easier to create a reporter, you can extend Spatie\LinkChecker\Reporters\BaseReporter which provides many useful methods.

Change log

Please see CHANGELOG for more information what has changed recently.


First start the test server in a seperate terminal session:

cd tests/server

With the server running you can execute the tests

composer test


Please see CONTRIBUTING for details.


If you discover any security related issues, please email instead of using the issue tracker.


About Spatie

Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.


The MIT License (MIT). Please see License File for more information.