Laravel: How to create a custom 404 page with Blade

Updated: January 18, 2024 By: Guest Contributor Post a comment

Introduction

Dealing with errors gracefully is an essential part of web development. When a user requests a page that doesn’t exist, presenting them with a generic error message can be frustrating and unhelpful. This is where the 404 page comes in; a thoughtfully designed 404 can improve the user’s experience even when they’re lost. Laravel makes customizing the 404 page straightforward with its Blade templating engine.

This tutorial will guide you through creating a custom 404 error page in Laravel. We’ll start with setting up a basic Laravel app, handling the exceptions to show a custom 404 page, and then designing a Blade template for our custom 404 page.

Setting Up a Basic Laravel Application

1. First, you’ll need to have Composer installed on your machine as Laravel utilizes it for dependency management. If you haven’t already installed Composer, you can find instructions on this page: How to set up PHP Composer in Windows or this page How to Set Up PHP Composer in MacOS.

2. Once Composer is installed, you can create a new Laravel application by running the following command in your terminal:

composer create-project --prefer-dist laravel/laravel name-of-your-app

With your new Laravel application ready, navigate to your project directory:

cd name-of-your-app

Then, serve the application:

php artisan serve

A Laravel development server will start, and you can view your application by visiting http://localhost:8000 in your browser.

Understanding the Exception Handler

In Laravel, all exceptions are handled by the App\Exceptions\Handler class. It includes a method called render which determines the response for various exceptions.

public function render($request, Exception $exception)
{
    return parent::render($request, $exception);
}

This method uses the parent class’s render method to respond according to the type of exception. For most exceptions, this is adequate, but we can modify it to customize our 404 response.

Creating a Custom 404 Blade Template

1. In your Laravel application, navigate to the resources/views directory.

2. Create a new Blade template file named 404.blade.php. This will be your custom 404 page:

touch resources/views/errors/404.blade.php

Edit the file with your preferred text editor and add the HTML structure you would like to use. For example:

<!-- resources/views/errors/404.blade.php -->
<!doctype html>
<html lang="en">
<head>
    <title>Page Not Found</title>
    <!-- Add any stylesheets here -->
</head>
<body>
    <h1>Oops! The Page you're looking for isn't here.</h1>
    <p>Maybe the page was moved or deleted, or perhaps you just typed the wrong address. Why not try a search, or start from the homepage? </p>
</body>
</html>

3. Now you can style your custom 404 page with CSS. Create a new stylesheet in the public/css directory, and link it in your custom 404 template:

<link rel="stylesheet" href="{{ asset('css/style.css') }}">

All that’s left is to visit a URL that doesn’t exist on your Laravel server, and you should see your custom 404 page.

See also:

Testing Your Custom 404 Page

Testing is as simple as going to a URL that you know does not exist on your site. Your Laravel application will automatically serve your new custom view for 404 errors, thanks to Laravel’s auto-discovery of error templates based on HTTP status codes.

For example, visiting http://localhost:8000/thispagedoesnotexist should now display your custom 404 page instead of the default error page.

Conclusion

Customizing a 404 error page in Laravel is both essential and easy to do. A custom 404 page can reflect your app’s theme, guide users when they’re lost, and it provides a much more refined experience. By utilizing Laravel’s handling of exceptions and the Blade template engine, you’re enhancing your application’s professionalism and usability.

Remember to regularly update your custom 404 page. Keeping it relevant and informative helps retain users who might otherwise leave your site due to an unfortunate dead end.