如何通过slug将指定URL从Yoast生成的站点地图中排除?
Yoast SEO站点地图按slug/URL排除内容方案
完全可以通过slug实现排除,根据你要排除的内容是否还在后台存在,对应两种实现方案:
方案1:内容仍在后台存在,仅需排除出站点地图
核心逻辑是先通过slug查询到对应内容ID,再传入Yoast官方提供的排除过滤器即可,代码如下:
function exclude_posts_from_xml_sitemaps_by_slug() { // 填入需要排除的页面slug,你给出的示例URL对应slug为example2、example3、example4 $exclude_slugs = [ 'example2', 'example3', 'example4' ]; $exclude_ids = []; foreach ( $exclude_slugs as $slug ) { // 若排除的是文章,第二个参数改为'post';自定义文章类型填对应别名即可 $post = get_page_by_path( $slug, OBJECT, 'page' ); if ( $post ) { $exclude_ids[] = $post->ID; } } return $exclude_ids; } add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', 'exclude_posts_from_xml_sitemaps_by_slug' );
方案2:内容已从后台删除,但站点地图仍残留无效URL
首先优先尝试刷新Yoast站点地图缓存:进入后台→Yoast SEO→常规→功能,关闭XML站点地图保存后再重新开启,同时清空站点全局缓存,多数情况下残留URL会自动消失。
如果缓存清理后仍存在,可以直接通过URL匹配过滤站点地图条目,代码如下:
add_filter( 'wpseo_sitemap_entry', function( $url, $type, $post ) { // 填入需要排除的完整URL $exclude_urls = [ 'https://website/example2', 'https://website/example3', 'https://website/example4' ]; if ( in_array( $url['loc'], $exclude_urls ) ) { return false; } return $url; }, 10, 3 );
注意事项
- 代码建议添加到子主题的
functions.php文件,或使用自定义代码片段插件添加,避免主主题更新后代码被覆盖 - 添加代码后需要清空缓存再访问站点地图验证生效情况
内容的提问来源于stack exchange,提问作者dcron
相关产品推荐
相关产品推荐

