WooCommerce Products with the visibility status hidden (excluded from catalog) are still indexed by the Yoast SEO tool. TO remove them from the automatically generated Sitemaps and set the index status to “noindex, nofollow” add the following 2 functions to your functions.php
add_filter( 'wpseo_sitemap_entry', 'we_remove_hidden_products', 99, 3); function we_remove_hidden_products($url, $type, $post) { if($post->post_type == 'product' && is_object_in_term( $post->ID, 'product_visibility', 'exclude-from-catalog')){ return ''; } return $url; } add_filter('wpseo_robots', 'we_noindex_hidden_products', 10, 2); function we_noindex_hidden_products($robots, $indexable) { if(!isset($indexable->model)) { return $robots; } if(!isset($indexable->model->object_id)) { return $robots; } if(is_object_in_term( $indexable->model->object_id, 'product_visibility', 'exclude-from-catalog')){ $robots = 'noindex, nofollow'; } return $robots; }
Hello Daniel,
Thanks for posting this! I was wondering if this functions will work with any of the SEO plugins out there, or just Yoast?
Thank you,
Gerardo
Hello!
What is the correct way to rewrite a function for use with $meta_query?
For example, to use “_stock_status” instead of “product_visibility”