如何从Yoast的sitemap_index.xml中移除指定默认站点地图
解决方案:移除Yoast自动生成的特定站点地图索引项,保留自定义地图
你之前用wpseo_sitemap_exclude_post_type失败的原因是这个过滤器会全局排除整个文章类型的所有站点地图相关生成,包括你自定义的地图。下面提供两种精准解决的方法:
方法1:直接修改站点地图索引XML,移除指定默认地图
通过wpseo_sitemap_index过滤器操作索引的XML内容,精准删除不需要的默认站点地图项,不会影响自定义地图:
add_filter( 'wpseo_sitemap_index', 'exclude_yoast_default_sitemaps_from_index' ); function exclude_yoast_default_sitemaps_from_index( $sitemap_index ) { // 定义要移除的默认站点地图文件名 $exclude_sitemaps = [ 'page-sitemap.xml', 'people-sitemap.xml' ]; // 解析XML内容 $xml = simplexml_load_string( $sitemap_index ); if ( $xml === false ) { return $sitemap_index; } // 筛选要移除的节点 $nodes_to_remove = []; foreach ( $xml->sitemap as $sitemap ) { $filename = basename( (string)$sitemap->loc ); if ( in_array( $filename, $exclude_sitemaps ) ) { $nodes_to_remove[] = $sitemap; } } // 移除节点 foreach ( $nodes_to_remove as $node ) { unset( $node[0] ); } // 返回修改后的XML return $xml->asXML(); }
方法2:移除Yoast默认的文章类型站点地图提供者
Yoast为每种文章类型的站点地图都注册了对应的提供者,通过wpseo_register_sitemap_providers过滤器移除指定提供者,从根源阻止默认地图生成:
add_filter( 'wpseo_register_sitemap_providers', 'remove_yoast_default_post_type_sitemap_providers' ); function remove_yoast_default_post_type_sitemap_providers( $providers ) { // 移除页面类型的站点地图提供者 if ( isset( $providers['post-type-page'] ) ) { unset( $providers['post-type-page'] ); } // 移除people自定义文章类型的站点地图提供者 if ( isset( $providers['post-type-people'] ) ) { unset( $providers['post-type-people'] ); } return $providers; }
注意事项
- 代码可添加到当前主题的
functions.php文件,或自定义插件中; - 修改完成后,前往Yoast SEO后台(工具 → 站点地图)清除缓存,刷新站点地图索引页面即可生效;
- 两种方法都不会影响你通过Yoast API创建的自定义站点地图,因为自定义地图的生成逻辑独立于默认的文章类型提供者。
内容的提问来源于stack exchange,提问作者Kory
相关产品推荐
相关产品推荐

