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クローラー(こんなのとか)を用意すれば動的なページもサイトマップに登録できるかと思います。
コメント