YoastSEOサイトマップから特定コンテンツ(カスタム投稿,著者,タクソノミーなど)を除外する方法

アフィリエイト広告を利用しています

WordPress

WordPressプラグイン「YoastSEO」を使用時に、作成していない著者ページやカスタム投稿がgoogle検索にひっかかったり、search consoleでエラーが出たときにサイトマップから特定のコンテンツ/ページを除外する方法をメモしておきます。

この記事はYoastSEOのドキュメントXML Sitemaps – API documentationにありそうなパターンを追記・翻訳したものなので、詳しくはこちらもご確認ください。

YoastSEOサイトマップから特定コンテンツを除外

以下をコードを記載していますので、コピーし、functions.phpに貼り付けて適宜修正してください。

YoastSEOのプラグイン有効化判定

Detect Yoast SEO plugin
I want to detect Yoast SEO. I already use this function: function active( $plugin ) { $network_active = false; if ( is_multisite() ) { $plugins...
if ( is_plugin_active( 'wordpress-seo/wp-seo.php') || is_plugin_active( 'wordpress-seo-premium/wp-seo-premium.php' ) ) {
   /* Let's do cool things */
}

上のifの中に書くのがもちろんベターです。
これがなくてもYoastSEOを有効化していれば動きます。

特定ページを除外

/**
 * Excludes posts from XML sitemaps.
 *
 * @return 配列にposts IDを入れてください。
 */
function exclude_posts_from_xml_sitemaps() {
    return [ 1, 2, 3 ];
}

add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', 'exclude_posts_from_xml_sitemaps' );

特定のカスタム投稿を除外

/**
 * Exclude a post type from XML sitemaps.
 *
 * @param boolean $excluded  Whether the post type is excluded by default.
 * @param string  $post_type The post type to exclude.
 *
 * @return bool Whether or not a given post type should be excluded.
 */
function sitemap_exclude_post_type( $excluded, $post_type ) {
    return $post_type === 'recipes';
}

add_filter( 'wpseo_sitemap_exclude_post_type', 'sitemap_exclude_post_type', 10, 2 );

カスタム投稿を複数除外

/**
 * Exclude a post type from XML sitemaps.
 *
 * @param boolean $excluded  Whether the post type is excluded by default.
 * @param string  $post_type The post type to exclude.
 *
 * @return bool Whether or not a given post type should be excluded.
 */
function sitemap_exclude_post_type( $excluded, $post_type ) {
    return in_array($post_type, array('recipes', 'fruits', 'fishes'), true);
}

add_filter( 'wpseo_sitemap_exclude_post_type', 'sitemap_exclude_post_type', 10, 2 );

特定タクソノミーを除外

/**
 * Exclude a taxonomy from XML sitemaps.
 *
 * @param boolean $excluded Whether the taxonomy is excluded by default.
 * @param string  $taxonomy The taxonomy to exclude.
 *
 * @return bool Whether or not a given taxonomy should be excluded.
 */
function sitemap_exclude_taxonomy( $excluded, $taxonomy ) {
    return $taxonomy === 'ingredients';
}

add_filter( 'wpseo_sitemap_exclude_taxonomy', 'sitemap_exclude_taxonomy', 10, 2 );

特定の著者ページを除外

/**
 * サイトマップから著者ID 5の著者を除外
 *
 * @param array $users Array of User objects to filter through.
 *
 * @return array The remaining authors.
 */
function sitemap_exclude_authors( $users ) {
   return array_filter( $users, function( $user ) {
        if ( $user->ID === 5 ) {
            return false;
        }

        return true;
    } );
}

add_filter( 'wpseo_sitemap_exclude_author', 'sitemap_exclude_authors', 10, 1 );

すべての著者ページを除外

function sitemap_exclude_authors( $users ) {
   return array_filter( $users, function( $user ) {
            return false;
    } );
}

add_filter( 'wpseo_sitemap_exclude_author', 'sitemap_exclude_authors', 10, 1 );

特定タームを除外

/**
 * タームID 3と11のタームを除外
 *
 * @param array $terms Array of term IDs already excluded.
 *
 * @return array The terms to exclude.
 */
function sitemap_exclude_terms( $terms ) {
    return [ 3, 11 ];
}

add_filter( 'wpseo_exclude_from_sitemap_by_term_ids', 'sitemap_exclude_terms', 10, 1 );

YoastSEOのサイトマップにページを追記

WordPressに(カスタム)投稿として登録せずに、スクレイピングなどで(都度)動的に生成しているWordPressのページはサイトマップに登録されません。
(これが当てはまる人はあまりいないと思いますが^^;)

そのような時などに、サイトマップにページを追記したい場合は以下コードを使用します。

/**
 * Writes additional/custom XML sitemap strings to the XML sitemap index.
 *
 * @param string $sitemap_custom_items XML describing one or more custom sitemaps.
 *
 * @return string The XML sitemap index with the additional XML.
 */
function add_sitemap_custom_items( $sitemap_custom_items ) {
    $sitemap_custom_items .= '
<sitemap>
<loc>http://www.example.com/external-sitemap-1.xml</loc>
<lastmod>2017-05-22T23:12:27+00:00</lastmod>
</sitemap>';
    return $sitemap_custom_items;
}

add_filter( 'wpseo_sitemap_index', 'add_sitemap_custom_items' );

上記コードやサイトマップを生成するphpクローラー(こんなのとか)を用意すれば動的なページもサイトマップに登録できるかと思います。

元講師&現役エンジニアがおすすめプログラミングスクールを詳細解説!

正直プログラミングは独学でもなんとか習得できますが、スクールに通ったほうが断然習得が早く、実務的なスキルが身につきます。

独学で疲弊している方やプログラミングで手に職をつけたい方はスクールを検討してみませんか?

プログラミングスクールの講師を経験した現役エンジニアが他のサイトにはない視点でプログラミングスクールの詳細やおすすめのスクールを徹底解説!

WordPress
xingxingをフォローする
tech x note |

コメント

タイトルとURLをコピーしました