hissezhaut / laravel-link-checker by parweb
forked from spatie/laravel-link-checker

Check all links in a Laravel app
Package Data
Maintainer Username: parweb
Maintainer Contact: freek@spatie.be (Freek Van der Herten)
Package Create Date: 2016-12-05
Package Last Update: 2016-12-05
Home Page: https://murze.be/2015/11/a-package-to-check-all-links-in-a-laravel-app/
Language: PHP
License: MIT
Last Refreshed: 2024-02-25 15:18:12
Package Statistics
Total Downloads: 11
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 0
Total Watchers: 2
Total Forks: 0
Total Open Issues: 0

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=https://laravel.com

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 freek@spatie.be 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.