WP 404 Auto Redirect to Similar Post

Description

Welcome to WP 404 Auto Redirect to Similar Post!

This plugin automatically redirect 404 pages to similar posts based on Title, Post Types & Taxonomies. If nothing similar is found, visitors will be redirected to the homepage or a custom URL.

Features:

  • Automatically detect any 404.
  • Automatically search a similar post based on multiple factors:
    • Title
    • Potential Post Type
    • Potential Taxonomy
  • If nothing similar is found, set your Fallback Behavior:
    • Redirect to homepage
    • Redirect to a custom URL
    • Display the default 404 page
  • Choose the redirection HTTP header status:
    • 301 headers
    • 302 headers
  • Exclude Post Types from possible redirections.
  • Exclude Taxonomies from possible redirections.
  • Exclude Posts based on a custom post meta.
  • Exclude Terms based on a custom term meta.
  • Display the Debug Console instead of being redirected (Admin).
  • Preview possible redirection from the administration panel.

*New* Features:

  • Expose ‘WP-404-Auto-Redirect’ headers on 404 pages. (Admin).
  • Log redirections in the /wp-content/debug.log file.
  • Create your own search engines logic.
  • Create your own search engines groups & fire sequence.

*New* Engines & Groups:

WP 404 Auto Redirect to Similar Post 1.0 introduces the concept of engines and groups which let you customize your own searching & matching logic. The plugin comes with 5 engines and 1 default group out of the box!

Default Group Engines:

  1. Fix URL
    Find and fix common URL mistakes.

  2. Direct Match
    Search for a Post that perfectly match keywords.

  3. Search Post
    Search for a similar Post.

  4. Search Term
    Search for a similar Term.

  5. Search Post: Fallback
    If a Post Type is set in the WP Query, redirect to the Post Type Archive.

But Also:

  • Easy to Install / Uninstall.
  • No useless data saved in Database.
  • Blazing Fast Performance.

Compatibility:

WP 404 Auto Redirect to Similar Post is 100% compatible with all popular manual redirection plugins:

If you use one of them, but missed a manual redirection and a 404 is about to be displayed, WP 404 Auto Redirect to Similar Post will cover you.

Reviews

They talk about us! 🙂

Screenshots

  • Admin: Settings Page
  • Admin: Post Types
  • Admin: Taxonomies
  • Admin: Engines
  • Front: Debug Console

Installation

WordPress Install

  1. Upload the plugin files to the /wp-content/plugins/wp-404-auto-redirect-similar-post directory, or install the plugin through the WordPress plugins screen directly.
  2. Activate the plugin through the ‘Plugins’ screen in WordPress.
  3. Go to Settings > WP 404 Auto Redirect to change your settings.
  4. Everything is ready! Now try to trigger a 404 page!

FAQ

Developers: Create a Custom Group

Advanced Usage: If you don’t know how to use filters & actions, please read the official WordPress Plugin API.

// Create a Group with only 3 Default Engines, and set a custom fire sequence
add_action('wp404arsp/search/init', 'my_404_group');
function my_404_group($query){

    wp404arsp_register_group(array(

        // Set Group Name
        'name' => 'My Group',

        // Set Group Slug
        'slug' => 'my_group',

        // Set Engines & the fire sequence
        'engines' => array(
            'default_post',     // Add Default: Search Post Engine
            'default_fix_url',  // Add Default: Fix URL Engine
            'default_direct',   // Add Default: Default: Direct Match Engine
        )

    ));

}

// Trigger the Custom Group: 'My Group' when the 404 Page URL starts with '/product/xxxx/'
add_filter('wp404arsp/search/group', 'my_404_group_trigger', 10, 2);
function my_404_group_trigger($group, $query){

    // Developers: Print $query array for more request context

    // Our condition: 404 Page URL starts with '/product/xxxx/'
    if(preg_match('#/product/(.+?)/?$#i', $query['request']['url'])){
        $group = 'my_group'; // My Group Slug
    }

    // Always return Group
    return $group;

}

Developers: Create a Custom Engine

Advanced Usage: If you don’t know how to use filters & actions, please read the official WordPress Plugin API.

// Create a Custom Engine
add_action('wp404arsp/search/init', 'my_404_group_engine');
function my_404_group_engine($query){

    wp404arsp_register_engine(array(

        // Set Engine Name
        'name' => 'My Engine',

        // Set Engine Slug
        'slug' => 'my_engine',

        // Set Engine Weight (Score = Keyword_Found * Weight)
        'weight' => 100,

        // Set Primary Option (true|false). If Primary is true, then stop fire sequence if the score > 0.
        'primary' => true

    ));

    // Use the engine in a new Group called 'My Group'
    wp404arsp_register_group(array(

        // Set Group Name
        'name' => 'My Group',

        // Set Group Slug
        'slug' => 'my_group',

        // Set Engines & the fire sequence
        'engines' => array(
            'my_engine', // Add My Engine
        )

    ));

}

// Trigger the Custom Group: 'My Group' when the 404 Page URL starts with '/product/xxxx/'
add_filter('wp404arsp/search/group', 'my_404_group_trigger', 10, 2);
function my_404_group_trigger($group, $query){

    // Developers: Print $query array for more request context

    // Our condition: 404 Page URL starts with '/product/xxxx/'
    if(preg_match('#/product/(.+?)/?$#i', $query['request']['url'])){
        $group = 'my_group'; // My Group Slug
    }

    // Always return Group
    return $group;

}

// Define a Custom Engine Logic
add_filter('wp404arsp/search/engine/my_engine', 'my_404_engine_definition', 10, 3);
function my_404_engine_definition($result, $query, $group){

    // Developers: Print $query array for more request context

    // You have access to $query & the current $group as a context for the engine logic
    // In this example 'My Engine' is the only engine in 'My Group'
    // 'My Group' is triggered when the 404 Page URL starts with '/product/xxxx/'

    // What we want: Search for a similar post inside a specific Post Type: 'project'

    // Grab all Keywords in the URL
    $keywords = explode('-', $query['request']['keywords']['all']);

    // Run Search
    $search = wp404arsp_search(array(
        'keywords'  => $keywords,   // Add keywords
        'mode'      => 'post',      // Search for Post
        'post_type' => 'project',   // inside Post Type: 'project'
    ), $query);

    // Found something!
    if($search['score'] > 0){

        // Return result
        return array(
            'score' => $search['score'],
            'url'   => get_permalink($search['post_id']),
            'why'   => "This engine is Awesome! We found a similar Product inside the Post Type <strong>project</strong>!"
        );

    }

    // Nothing found :(
    else{

        return "Mehh... No similar Product found inside the Post Type <strong>project</strong>.";

    }

}

Developers: Manipulate existing Groups & Engines

Advanced Usage: If you don’t know how to use filters & actions, please read the official WordPress Plugin API.

add_action('wp404arsp/search/init', 'my_404_manipulate_groups_and_engines');
function my_404_manipulate_groups_and_engines($query){

    // Move the default engine 'Direct Match' at the end of the 'Default Group' fire Sequence
    wp404arsp_reorder_group_engines(array(

        // Target Group Slug
        'group' => 'default',

        // Target Engine Slug
        'engine' => 'default_direct',

        // Set new Position in fire sequence. (In this example: 4 instead of 2).
        'order' => 4

    ));

    // Register new Engines & Fire Sequence for the existing Group 'My Group'
    wp404arsp_register_group_engines(array(

        // Target Group Slug
        'group' => 'my_group',

        // New Engines & Fire Sequence
        'engines' => array(
            'my_engine',    // Add Custom: My Engine
            'default_post'  // Add Default: Search Post Engine
        )

    ));

    // Deregister an existing Engine.
    // The engine will be removed from any Groups which use it. The engine won't be registered anymore.

    // Target specific Engine Slug
    wp404arsp_deregister_engine('my_another_engine');

}

Developers: Always use a custom Group

Advanced Usage: If you don’t know how to use filters & actions, please read the official WordPress Plugin API.

// Always trigger the Custom Group 'My Group' instead of the Default Group
add_filter('wp404arsp/search/group', 'my_404_group_trigger_forever', 10, 2);
function my_404_group_trigger_forever($group, $query){

    // Developers: Print $query array for more request context

    // Always return 'My Group'
    return 'my_group';

}

Developers: Disable the plugin initialization at some conditions

Advanced Usage: If you don’t know how to use filters & actions, please read the official WordPress Plugin API.

// Do not load the plugin if the 404 URL starts with '/calendar/xxxx/'
add_filter('wp404arsp/init', 'my_404_no_init', 10, 2);
function my_404_no_init($init, $query){

    // Developers: Print $query array for more request context

    if(preg_match('#/calendar/(.+?)/?$#i', $query['request']['url'])){
        $init = false;
    }

    return $init;

}

Developers: Send an e-mail after every redirection

Advanced Usage: If you don’t know how to use filters & actions, please read the official WordPress Plugin API.

// Do something after a redirection
add_action('wp404arsp/after_redirect', 'my_404_after_redirect');
function my_404_after_redirect($query){

    // Developers: Print $query array for more request context

    // Send me an e-mail
    wp_mail(
        'my@email.com', 
        'WP 404 Auto Redirect: New redirection', 
        'Hi! New redirection from ' . $args['request']['url'] . ' to ' . $query['redirection']['url'], 
        array('Content-Type: text/html; charset=UTF-8')
    );

    return;
}

Reviews

June 20, 2024
What an amazing plugin. Install it, and your 404 problems disappear…and I don’t mean just hidden…they are now MANAGED by intelligent redirection to appropriate content. Set it and forget it. This plugin made me look like a HERO to my client who bungled their URL’s during a mass import. Fixed them in 5 minutes over the phone.
June 11, 2024
I run an online shop and the products change often. If I delete products, the customer ends up on a 404 page. Now, the plugin redirects the customer to a similar product page. Most of the time the selection is very good. As a fallback, I was able to enter a self-designed 404 landing page. This is how GOOGLE loves me again. Renata from gesunde-geschenke.com
Read all 108 reviews

Contributors & Developers

“WP 404 Auto Redirect to Similar Post” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.0.5

  • Fix: Escaping URL in Debug Console
  • General: Bumped WordPress version to 6.5

1.0.4

  • Fix: Security issue
  • Fix: Fallback & Preview inputs sanitization
  • Improvement: Code formatting and comments
  • Improvement: Readme typo, code example formatting and RankMath compatibility
  • General: Bumped WordPress version to 6.4

1.0.3

  • Improvement: Enhanced search algorithm & matching

1.0.2

  • Fix: Request sanitization compatibility for nginx servers

1.0.1

  • Fix: Priority exception when it equals 0
  • Fix: Settings page link missing from plugins page

1.0

  • Added: Log redirections in the /wp-content/debug.log file.
  • Added: Expose ‘WP-404-Auto-Redirect’ headers on 404 pages. (Admin).
  • Added: Groups & Engines Feature.
  • Added: Groups & Engines Documentation & Examples (developers).
  • Added: Groups & Engines Admin panel.
  • Added: Index.php file redirecting to root domain (avoid plugin folder file listing).
  • Added: action('wp404arsp/search/init', $query)
  • Added: filter('wp404arsp/search/group', $group, $query)
  • Added: filter('wp404arsp/search/query', $query)
  • Added: filter('wp404arsp/search/engine/{engine}', $result, $query, $group)
  • Added: filter('wp404arsp/search/results', $query)
  • Added: filter('wp404arsp/search/redirect', $redirect, $query)
  • Improvement: Core reworked from scratch for better extensibility.
  • Removed: ‘Hooks’ tab

0.9.0.2

  • Fix: Plugin priority set to 999 by debault
  • Added: New Filter available ('wp404arsp/init', $init, $request_uri)
  • Added: Filters & Actions documentation
  • Added: Hooks tab documentation in Administration panel
  • Improvement: Plugin’s page description
  • Removed: Unnecessary filter ('wp404arsp/settings', $settings)

0.9.0.1

  • Fix: Paged request redirection “Uncaught Argument” error

0.9

  • Fix: 302 headers option would not save
  • Fix: Redirection loop in some specific cases – Direct match on private posts
  • Fix: Ajax URL for custom /wp-admin/ path (Preview Mode)
  • Added: New Filter available ('wp404arsp/settings', $settings)
  • Added: New Filter available ('wp404arsp/redirect', $args, $settings)
  • Added: New Action available ('wp404arsp/after_redirect', $args, $settings)
  • Added: New page header ‘WP-404-Auto-Redirect: true’ on redirection
  • Added: Exclude posts with the post meta: wp404arsp_no_redirect = 1 from possible redirections.
  • Added: Exclude terms with the term meta: wp404arsp_no_redirect = 1 from possible redirections.
  • Added: Exclude one or multiple taxonomies from possible redirections.
  • Added: Disable Taxonomy Redirection – Never redirect to terms archives.
  • Added: Plugin priority – Advanced users only (Default 999).
  • Improvement: Revamped code
  • Improvement: Administration panel with tabs
  • Improvement: Plugin is now translation ready

0.7.7

  • Fix: PHP header() error on upgrade
  • Fix: Exclude Post Type from Redirections UI & Logic
  • Fix: ‘Compatibility’ typo in description
  • Added: 999 priority on template_redirect action for compatibility
  • Improvement: Updated Plugin Screenshot

0.7.6

  • Fix: Typos & added better descriptions
  • Fix: minor PHP Notice
  • Added: “Custom Redirect URL” as Fallback Behavior (Feature Request)
  • Added: “Exclude Post Type” Multi-select to possible redirections (Feature Request)
  • Improvement: Better overall request validation

0.7.2

  • Added: Re-introduced Term search as fallback (if no similar post found)
  • Improvement: Direct match algorythm
  • Improvement: Sanitization of requests with an extension
  • Improvement: Post_type matching to only search “active” post_types

0.7.1

  • Fix: Bug while displaying legacy 404
  • Fix: PHP notice on preview mode
  • Improvement: Post Types handle
  • Improvement: Paged request handle

0.7

  • Added: Settings page
  • Added: Debug mode for administrators (settings page)
  • Added: Ability to disable “Redirect to Homepage” if nothing found (Feature request)
  • Added: Ability to choose between 301 or 302 HTTP Headers
  • Added: Ability preview URL Redirections
  • Improvement: Reworked code

0.4.0.2

  • Fix: Sanitization bug
  • Fix: Debug typo

0.4

  • Improvement: Revamped Code
  • Improvement: Processing speed
  • Improvement: Better Post Type / Category / Taxonomy matching

0.3.2

  • Added: Debug monitoring
  • Improvement: Better management of paged requests

0.3

  • Initial Release