Catch 404 after changing permalink structure from /%postname%/ to /tegory%/%postname%/

I made a site some time ago and after some days some posts were indexed by search engines. Today I changed the permalink structure from /%postname%/ to /%category%/%postname%/.

After that, when people come to my site from search engines a 404 page not found error appears. I want to change all old URLs to the new category base URL without any 404 error.

Read More

How can I do it?
By the way, I use Yoast plugin.

Related posts

Leave a Reply

2 comments

  1. That happens because WordPress reads your old post name as category name now – and it cannot find that category.

    Solution: filter 404_template and try to find the post and its permalink. Then redirect.

    <?php  # -*- coding: utf-8 -*-
    /* Plugin Name: Redirect to category */
    
    add_filter( '404_template', 't5_redirect_to_category' );
    
    function t5_redirect_to_category( $template )
    {
        if ( ! is_404() )
            return $template;
    
        global $wp_rewrite, $wp_query;
    
        if ( '/%category%/%postname%/' !== $wp_rewrite->permalink_structure )
            return $template;
    
        if ( ! $post = get_page_by_path( $wp_query->query['category_name'], OBJECT, 'post' ) )
            return $template;
    
        $permalink = get_permalink( $post->ID );
    
        wp_redirect( $permalink, 301 );
        exit;
    }
    
  2. You need to add 301 redirects from your old page urls to the new ones.

    This plugin should accomplish what you want: http://wordpress.org/extend/plugins/redirection/

    Because it detects changes to your permalinks and automatically adds redirects, you will need to switch back to your old permalink structure, activate the plugin, and then update your permalinks to the new structure.

    Hope this helps.