Custom 404 Error Page für WordPress and ClassicPress - Free Plugin

Plugin Manual for Smart Custom 404 error page [404page]

Free Plugin for WordPress and ClassicPress

What is a 404 error and why does my website need a 404 error page?

The 404 is a HTTP standard response code which indicates that the client was able to communicate with the server but the server could not find what was requested.

If the server does not send a page to be displayed together with the error code the browser shows a default error message, which looks different depending on the used webbrowser.

You can’t avoid 404 errors on your site so it should be needless to say your site should have a custom 404 error page fitting your design instead of showing your visitors a more or less ugly browser error message.

WordPress and 404 error pages

WordPress comes with a built-in feature to deliver a 404 error page when an 404 error occurs. To enable this feature the only thing you have to do is to change the Permalink Structure to anything else but ‘Plain’. As long a you leave this setting to ‘Plain’ the 404 errors are not handled by WordPress but by the webserver.

Creating a custom 404 error page for your WordPress driven site

In WordPress the 404 error page is part of the Theme. Normally you’d need programming skills to create a custom 404 error page. This plugin allows you to create and edit your custom 404 error page as a normal page using the full power of WordPress and making use of all installed pluings and available shortcodes. Plus you can also use your favorite page builder.

The 404page plugin does not redirect your browser to the given page. That’s important because it ensures that a correct code 404 is delivered. This tells search engines that the page does not exist and has to be removed from the index. A redirect would result in a HTTP code 301 or 302 and the page would remain in the search index.


The settings page can be found in your WordPress Admin under Appearance / 404 Error Page.

General Settings

Free WordPress Plugin 404page by Peter's Plugins - General Settings

Page to be displayed as 404 page

Select the page you want to be displayed as your custom 404 error page from the dropdown list. You first have to create the page from the ‘Pages’ menu.

The ‘Edit Page’ button allows you to edit the selected page directly from here. The ‘Test 404 error’ button opens a page with a randomly generated URL which should cause an 404 error. If you select a different page both buttons are disabled and you have to save the settings to enable them again.

Advanced Settings

Free WordPress Plugin 404page by Peter's Plugins - Advanced Settings

Hide the selected page from the Pages list

Activating this option hides the page you selected as custom 404 error page from the ‘Pages’ menu for non admin users. For admin users it’s always visible. The page selected as 404 page is marked.

Free WordPress Plugin 404page by Peter's Plugins

Send an 404 error if the page is accessed directly by its URL

This option is activated by default and it is recommended not to change this setting. With this option active WordPress fires an 404 error in case the page you selected as your custom 404 error page is accessed directly by its permalink. The only reason to deactivate this option is if you explicitly want the page to be accessible.

Force 404 error after loading page

After an 404 error occurred the 404page plugin loads your custom 404 error page. After that page is loaded successfully the 404 error is gone. Naturally the 404page plugin ensures, that a 404 error is sent back to the browser. But WordPress internally the error no longer exists.

This is stringently required because otherwise WordPress above all would load the default 404 error page. If you essentially need the WordPress internal information that an 404 error occurred, this feature forces an 404 error after loading your custom 404 error page. For instance this is required if you use the 404 Detection of the iThemes Security plugin. With this feature activated, the 404page plugin generates an 404 error after WordPress cleared the error once the custom 404 error page was loaded. The 404 error internally is available inside the WordPress header (wp_head). It is not available outside the header to ensure that the page displays properly. This potentially may cause problems with your theme or with other plugins, so please activate this feature only if necessary and extensive test if everything works.

Watch the explanation video

Disable URL autocorrection guessing

Maybe you’ve never noticed the URL Autocorrect Guessing feature of WordPress yet. WordPress tries to guess a redirection for a nonexistent URL if the slug is at the beginning of another URL. The downside ist that WordPress is not exactly good at guessing URLs and often times makes the mistake of redirecting users to unmatched content.

Plus it generally is not a good idea to have automated redirects that are out of your control. In my opinion getting 404 errors is much better than automatic guessing.

This feature stops WordPress from guessing and automated redirecting. If you activate this feature links that worked in the past may work no more, because they are wrong all along and only worked due to the WordPress URL autocorrection guessing.

Watch the explanation video

Send an HTTP 410 error instead of HTTP 404 in case the requested object is in trash

Activating this option has no visual effect. This will cause WordPress to send an HTTP 410 error code instead of an HTTP 404 error code in case the URL that was requested belongs to an object that is currently in trash.

The HTTP 410 response header can be used when a resource has been permanently removed. It informs search engines that the resource requested is no longer available and will not be available again so it can be removed from the search index immediately.

However search engines do not delete URLs from their index the very first time it responds with HTTP 410. But indeed they handle 404 and 410 errors slightly different. Sending a 410 response header should cause a much faster removal than sending a 404 response.

By default WordPress keeps objects in trash for 30 days and permanently deletes them after that. This should be enough time for search engines to drop deleted pages from their index. After an object is deleted permanently, which means it is no longer in trash, trying to access it will result in an HTTP 404 error as usual.

Watch the explanation video

Always send an HTTP 410 error instead of HTTP 404

Activating this option will cause WordPress to always send an HTTP 410 error code instead of an HTTP 404 error code.

See above for more information.

If you activate this option, the option “Send an HTTP 410 error instead of HTTP 404 in case the requested object is in trash” will be disabled.

Activate Compatibility Mode

The 404page plugin uses the WordPress Template System to detect and handle 404 errors. Some plugins and themes bypass this task, thus the 404page plugin does not work properly.

In such cases try to activate Compatibility Mode, which uses its completely own method to detect and handle 404 errors. This maybe can solve incompatibility with your theme or another plugin. Only activate Compatibility Mode if the 404page plugin does not work properly. Otherwise it makes no sense at all.

Watch the explanation video

Special Operating Methods

If the 404page plugin detects that you are using the WPML plugin (the 404page plugin is officially certified as WPML compatible by the WPML team) or the Customizr theme it automatically switches to a specific adapted mode to achieve best compatibility.

Native Mode

A theme can activate the native mode to fully control the 404page plugin.

Note about XML sitemaps

If you use a plugin to generate a XML sitemap, then it is recommended to exclude your custom 404 error page so that it is not transmitted to search engines.

If you are using the XML sitemap feature of Yoast SEO the 404 page is excluded automatically, you don’t have to exclude it manually.

Note about Caching

If you are using a caching plugin, 404 errors may not be recognized correctly. Maybe URLs that lead to a 404 error are cached (which shouldn’t be). In this case an HTTP status code 200 is sent instead of 404 if the same URL is requested again and is in cache.

It depends on the caching plugin used whether it works properly in combination with the 404page plugin or not.

The 404page Plugin detects the WP Super Cache and the W3 Total Cache plugin and disables caching automatically in case of 404 errors to avoid this problem. Other caching plugins may be added in future versions. Currently it is recommended to use WP Super Cache or W3 Total Cache to be on the safe side.

Block & Shortcode

The plugin adds one block for the block-based editor and one shortcode for the classic editor.


The Plugin offers a block “URL causing 404 error” for the block-based editor to show the URL that caused the error. The block offers three display options:


to show the page including path
e.g. does/not/exist

Domain Path

to show the URL without protocol and parameters


to show the complete URL

Free WordPress Plugin 404page by Peter's Plugins - The Block
Free WordPress Plugin 404page by Peter's Plugins - The Block Options


The Plugin offers a shortcode [pp_404_url] for the classic editor to show the URL that caused the error. There are three possible options:

[pp_404_url page]
to show the page including path
e.g. does/not/exist

[pp_404_url domainpath]
to show the URL without protocol and parameters

[pp_404_url full]
to show the complete URL
(this is the default and can be omitted)

For developers

CSS styling

The plugin adds a CSS class error404 to the <body> HTML tag. You can use this class for extra styling.

Action Hook

The plugin adds an action hook 404page_after_404 which you can use to add extra functionality. The exact position the action occurs after an 404 error is detected depends on the Operating Method. Your function must not generate any output. There are no parameters.



If the 404page plugin is installed and activated it defines the PHP constant PP_404. Check existence of it to detect the 404page plugin.



The pp_404_is_active() function returns true if there is a custom 404 page selected in the plugin’s settings and the selected page exists. Otherwise it returns false.


The pp_404_get_page_id() function returns  the ID of the selected 404 page. In a multilingual environment it returns the ID of the 404 page in the current language.


The pp_404_get_all_page_ids() function returns an array of page IDs for all languages. If no multilingual plugin is active, the array has only one element.

pp_404_get_the_url( $type )

The pp_404_get_the_url() function returns the URL that caused the 404 error. There is one optional parameter to style the result.

Parameter $type string (Optional):

pp_404_get_the_url( 'page' )
to get the page including path
e.g. does/not/exist

pp_404_get_the_url( 'domainpath' )
to get the URL without protocol and parameters

pp_404_get_the_url( 'full' )
to get the complete URL
(this is the default and can be omitted)

Native theme support

As a theme developer you can activate a special native mode to fully control the 404page plugin.

Except of function pp_404_set_native_support() the following functions are only available if Native Mode is activated.


Call the pp_404_set_native_support() function to activate Native Mode. If Native Mode is activated the 404page plugin does not generate any output. Independently, the error404 CSS class is added to the <body> tag anyway.


The pp_404_get_the_title() function retrieves the title of the custom 404 error page, like get_the_title(). It accepts no parameters.


The pp_404_the_title() function displays the title of the custom 404 error page, like the_title(). It accepts no parameters.


The pp_404_get_the_content() function retrieves the content of the custom 404 error page, like get_the_content(). It accepts no parameters.


The pp_404_the_content() function displays the content of the custom 404 error page, like the_content(). It accepts no parameters.

Sample code

Important advice: This sample code just illustrates how the native mode works. The pp_404_set_native_support() function must not be used inside a template file. You have to call it in the functions.php file of your theme immediately. This ensures that the Operating Method setting is deactivated on the settings page and a message is shown that native mode is active.

<div class="container">

  <div id="primary">

    <div id="content">


        $pp404 = false;

        // instead of is_404() you'll probably use another code to identify a 404 error
        // if PP_404 is defined the 404page plugin is active
        // if pp_404_is_active() returns true a custom 404 page is selected and exists ?>
        if ( is_404() && defined( 'PP_404' ) && pp_404_is_active() ) { 

          $pp404 = true; 



      <?php // using a do while loop ensures that the loop is exuted at least once even if there are no posts ?>
      <?php do { ?>

        <?php if ( !$pp404 ) { the_post(); } ?>

        <article class="post">

          <h1 class="title"><?php if ( $pp404 ) { pp_404_the_title(); } else { the_title(); } ?></h1>

          <div class="the-content">

            <?php if ( $pp404 ) { pp_404_the_content(); } else { the_content(); } ?>

            <?php if ( ! $pp404 ) { wp_link_pages(); } ?>



      <?php } while ( have_posts() ); ?>