WordPress.org

Support

Support » Plugins and Hacks » Yoast SEO » [Resolved] [Plugin: WordPress SEO by Yoast] FIX for sitemap_index.xml 404 error

[Resolved] [Plugin: WordPress SEO by Yoast] FIX for sitemap_index.xml 404 error

  • Hi,

    Here is a little fix for some of us that have 404 errors on the sitemap_index.xml file with WordPress SEO plugin…

    Open your .htaccess file, and add this at the top of it :

    # WordPress SEO - XML Sitemap Rewrite Fix
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^sitemap_index\.xml$ /index.php?sitemap=1 [L]
    RewriteRule ^([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 [L]
    </IfModule>
    # END WordPress SEO - XML Sitemap Rewrite Fix

    It should work for most of us !

    http://wordpress.org/extend/plugins/wordpress-seo/

Viewing 15 replies - 1 through 15 (of 29 total)
  • LOL – one more thing!
    If you are running SuperCache and using a CDN (FYI I am using rackspace) this worked for me:

    Add in the SuperCache settings page –>> CDN tab –>> to the “exclude if substring” setting –>> .xsl

    Another thing if you’re running W3 Total Cache and your sitemap index just shows up as a white page, Deactivate W3TC and then reactivate it.

    Seems to make that an easy fix thankfully!

    Johan82

    @johan82

    Yes it seems to work, the sitemap is showing up but it’s still sending a 404 as the response header which means that Google Webmaster Tool won’t find it.

    Any suggestions?

    hadjedj.vincent

    @hadjedjvincent

    Yes, keep the modified .htaccess file and edit /wp-content/plugins/wordpress-seo/inc/class-sitemaps.php

    replace init() function (line 80) with :

    /**
    	 * Initialize sitemaps. Add sitemap rewrite rules and query var
    	 */
    	function init() {
    		global $wp_rewrite;
    		$GLOBALS['wp']->add_query_var( 'sitemap' );
    		$GLOBALS['wp']->add_query_var( 'sitemap_n' );
    		add_rewrite_rule( 'sitemap_index\.xml$', 'index.php?sitemap=1', 'top' );
    		add_rewrite_rule( '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' );
    		$wp_rewrite->flush_rules();
    	}

    Regards

    Johan82

    @johan82

    I actually just managed to fix this. The problem was a plugin that had flush_rewrite_rules(); after a custom post type. So when I removed it, it worked.

    But thanks for the help anyway!

    hadjedj.vincent

    @hadjedjvincent

    Can u give up the name of faulty plugin ?
    It can help the developer 😉

    Regards

    Johan82

    @johan82

    It was actually my own plugin, not a public one, don’t know why I added that, probably it was included in a tutorial i read when i created the custom post type way back when and can’t remember where I read it, sorry.

    This has been frustrating me for ages, so thanks for finding a solution. I’ve adapted it for use with nginx, just add the following to the server block:

    rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
    rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
    skipshean

    @skipshean

    FINALLY this is resolved for me. THANK YOU so much for fixing this!

    Jonathan, thanks for the NGINX adaptation. I put this in the server block of our config and it works like a charm. What I don’t understand, however, is why this isn’t picked up when non-existent content is passed to index.php via

    if (!-e $request_filename) { rewrite . /index.php last; }

    Anyone have any insight?

    Hmm, maybe something to do with fastcgi_intercept_errors?

    Thanks hadjedj.vincent! The solution you provided worked for me.

    I’m new to nginx and I’m a little thrown when you say to add the fix to the server block. I added it to my config file, but I got no results. Can you explain so a fifth grader can understand how to insert the fix.

    PS: I’m not a fifth grader! Just need a simple step-by-step. lol…

    Thanks!

    Kredacter,

    You should insert the code in the server block for the site you want it work on, in my case I have multiple sites on one server so use multiple config files in my sites-available folder. You may have a single site configured in your main nginx.conf.

    So your server block should look something like this:

    server {
    
    	server_name  YourDomain.com;
    	root   /var/www/YourDomain/public;
    
    	#	Fix Yoast SEO Sitemaps
            rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
    	rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
    }

    Then you just need to tell nginx to re-read it’s config files. In Ubuntu use the command service nginx reload. Hope that helps.

    Thanks Jonathan! I was able to get everything to work by making the change in my config file… But… 🙁 I updated to the latest version of the plugin 1.1.3 and added the news module. Now a new problem. I get a 404 error when I submit to Google Webmaster Tools. The news sitemap returns a “not found” from the plugin xml sitemap dashboard as well as GWT. Any thoughts? Is anybody else having this problem?

Viewing 15 replies - 1 through 15 (of 29 total)
  • The topic ‘[Resolved] [Plugin: WordPress SEO by Yoast] FIX for sitemap_index.xml 404 error’ is closed to new replies.
Skip to toolbar