已下载超过100万次,Yoast插件WordPress SEO是迄今为止最好和最完整的WordPress SEO插件。虽然它在过去没有给我们任何问题,但对于一些用户来说这是一个痛苦。最近,我们的一位客户遇到了由YoastWordPress SEO插件生成的站点地图出现404错误的问题。在尝试了一些事情之后,我们能够找到解决方案。在本文中,我们将向您展示如何通过Yoast修复WordPress SEO插件中的站点地图404错误。

更新:重要的是您了解此问题很可能是由编码不佳的主题函数或插件引起的。Yoast的插件在我们的网站上运行良好。只是想非常清楚这一点。

你应该尝试的第一件事就是打开你的.htaccess文件(你可以从WordPress SEO插件>编辑文件选项中实际执行此操作)并只需在其中添加以下代码:

# 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

对于大多数人来说,这解决了这个问有人报告说,虽然此代码修复了该问题,但页面仍然发送了404响应标头,这意味着Google网站管理员工具无法找到它。在我们客户的情况下,上述解决方案没有解决问题。

虽然不是首选,但我们别无选择,只能编辑核心插件文件来解决问题。正如hadjedj.vincent所建议的那样,我们编辑了位于“/wp-content/plugins/wordpress-seo/inc/class-sitemaps.php”中的 class-sitemaps.php

您需要查看函数init()代码并使该部分看起来像这样:

/**
	 * 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();
	}

基本上我们正在做的是添加全局$ wp_rewrite;在已经存在的所有内容之前并在代码之后添加flush_rules。通过在插件添加它,它似乎修复了我们客户的网站上的404问题。我们不知道为什么Yoast默认不这样做,但似乎有相当多的用户有这个站点地图404问题。这个问题在评论中有解释。

更新:我们的一些用户报告说,在应用上述修复后,他们仍然需要取消选中YoastSEO插件中的sitemap选项并保存他们的设置。之后重新检查站点地图的选项修复了它们的错误。