解决Yoast SEO 插件生成的XML站点地图404错误

Yoast SEO 是安装量超过500万的WordPress SEO插件以其可读性分析和SEO分析而闻名。更多介绍请看《强大的WordPress SEO插件:Yoast SEO》。

在测试 Yoast SEO 的时候,倡萌发现它生成的 XML站点地图(XML Sitemap)网址出现404错误。相信不少朋友也会遇到,官方针对这个问题也给出了解决方案

当您启用站点地图功能时,我们的插件会动态生成XML站点地图。

在某些情况下,如果在加载XML网站地图时收到服务器404错误或页面错误,则可能需要添加服务器级别的伪静态重写规则。

如何知道是否需要添加重写规则?

Yoast SEO XML站点地图网址有两种:

  1. 漂亮永久链接:example.com/sitemap_index.xml
  2. 非漂亮永久链接:example.com/?sitemap=1

如果您可以使用【非漂亮永久链接】加载地图,而不能使用【漂亮永久链接】加载并查看站点地图,说明您的服务器未设置重写规则,因此,您需要添加重写规则。

添加重写规则

目前主流的服务器环境为 Apache 和 Nginx,不同的环境添加的规则会不一样,如果不确定使用哪个,请与您的主机提供商联系。 

使用Apache服务器

您应该编辑网站根目录的 .htaccess文件(此处提供入门指南),并在下面的主要WordPress重写规则之前添加以下代码。如果您不确定如何执行此操作,则联系主机提供商可以为您提供帮助。

如果你的WordPress是安装在更目录,可以使用下面的规则:

# Yoast SEO - XML Sitemap Rewrite Fix
RewriteEngine On
RewriteBase /
RewriteRule ^sitemap_index.xml$ /index.php?sitemap=1 [L]
RewriteRule ^locations.kml$ /index.php?sitemap=wpseo_local_kml [L]
RewriteRule ^geo_sitemap.xml$ /index.php?sitemap=geo [L]
RewriteRule ^([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 [L]
RewriteRule ^([a-z]+)?-?sitemap.xsl$ /index.php?yoast-sitemap-xsl=$1 [L]
# END Yoast SEO - XML Sitemap Rewrite Fix

如果您在子文件夹中运行WordPress,则可能必须修改此设置。例如,如果您在名为/wordpress/的子文件夹中运行它, 就需要使用下面的规则:

# WordPress SEO - XML Sitemap Rewrite Fix - for subfolder install
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^sitemap_index.xml$ /wordpress/index.php?sitemap=1 [L]
RewriteRule ^locations.kml$ /wordpress/index.php?sitemap=wpseo_local_kml [L]
RewriteRule ^geo_sitemap.xml$ /wordpress/index.php?sitemap=wpseo_local [L]
RewriteRule ^([^/]+?)-sitemap([0-9]+)?.xml$ /wordpress/index.php?sitemap=$1&sitemap_n=$2 [L]
# END WordPress SEO - XML Sitemap Rewrite Fix

添加了规则以后,可能需要重启一下 Apache,以便规则生效。

使用Nginx服务器

这是您在NGINX服务器上可能需要的重写规则的示例。如果不确定在何处添加这些规则,请联系您的网络主机或服务器管理员以获取帮助。

如果你仅仅安装了 Yoast SEO 插件,只需要添加在站点的Nginx配置文件中,在WordPress伪静态规则的下方添加以下规则即可:

# Rewrites for Yoast SEO XML Sitemap
rewrite ^/sitemap_index.xml$ /index.php?sitemap=1 last;
rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

如果你使用的是宝塔面板可以按照下图所示添加:

如果你购买了高级版 Yoast SEO Premium,并且同时安装了它的附带扩展,比如News SEO、Local SEO、Video SEO 等,那你就需要使用下面的完整规则代码替代:

#Yoast SEO Sitemaps
location ~ ([^/]*)sitemap(.*).x(m|s)l$ {
  ## this rewrites sitemap.xml to /sitemap_index.xml
  rewrite ^/sitemap.xml$ /sitemap_index.xml permanent;
  ## this makes the XML sitemaps work
  rewrite ^/([a-z]+)?-?sitemap.xsl$ /index.php?yoast-sitemap-xsl=$1 last;
  rewrite ^/sitemap_index.xml$ /index.php?sitemap=1 last;
  rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
  ## 以下规则用于高级扩展
  ## News SEO
  rewrite ^/news-sitemap.xml$ /index.php?sitemap=wpseo_news last;
  ## Local SEO
  rewrite ^/locations.kml$ /index.php?sitemap=wpseo_local_kml last;
  rewrite ^/geo-sitemap.xml$ /index.php?sitemap=wpseo_local last;
  ## Video SEO
  rewrite ^/video-sitemap.xsl$ /index.php?yoast-sitemap-xsl=video last;
}

如果添加规则以后,还没有解决问题,尝试重启一下 Nginx,并在网站后台 设置 - 固定链接 界面,重新保存一下设置。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
欢迎关注我们的微信公众号:WPDAXUE

倡萌

一个文科IT宅男,喜欢折腾WordPress和被它折腾 ^_^

2 条评论

    1. 很抱歉,不提供免费汉化,如果你需要中文包,请购买汉化服务https://www.wpdaxue.com/shop/yoast-seo-premium ,支持免费版和收费版

发表评论