WordPress SEO の XML サイトマップに全添付画像を出力する方法

February 10, 2015

WordPress SEO by Yoast プラグインのサイトマップは、記事に掲載した画像を自動的に取得して、XML サイトマップに image:image タグを出力してくれます。多くの場合、デフォルトのままで問題ありません。でも、要素の背景に指定した画像(background-image)や、ショートコードなどのプログラムで挿入した画像は拾ってくれないため、それらを XML サイトマップに出力する方法をご紹介します。

How to Output All Attachment Images into WordPress SEO XML Sitemap

WordPress SEO プラグインは、記事本文にある img タグから出力する画像を取得しています。背景画像やショートコードによる挿入画像が反映されないのはこれが原因です。しかし幸いなことに、XML サイトマップに出力する image:image タグを制御できるフィルターがプラグインに予め組み込まれています。そのフィルターをフックすれば万事解決。さすが Yoast さん。抜かりありませんね。

wpseo_sitemap_urlimages フィルター

サイトマップの各種フィルターは WordPress SEO プラグインの class-sitemaps.php で定義されています。

wp-content/plugins/wordpress-seo/inc/class-sitemaps.php

記事ごとの画像を制御するフィルター wpseo_sitemap_urlimages は、パラメータとして画像情報の配列と、投稿 ID($post->ID)を引数に取ります。フィルター関数の戻り値に画像情報の配列を返すことで内容を制御できます。

画像情報の配列の構造

画像情報の配列 $urlimages は、以下の構造になっています。連想配列の配列ですね。

$urlimages[] = array(
		'src' => '画像の src 属性(絶対パス)',
		'title' => '画像のタイトル(任意)',
		'alt' => '画像の alt 属性(任意)'
)

XML サイトマップへの出力サンプル

画像情報は以下の形式で XML サイトマップに出力されます。以下の例は画像が 1つの場合ですが、画像が複数の場合は <image:image>~</image:image> が繰り返し出力されます。

<url>
	<loc>http://example.com/post-000/</loc>
	<lastmod>2014-10-21T14:17:02+09:00</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.6</priority>
	<image:image>
		<image:loc>画像の src 属性(絶対パス)</image:loc>
		<image:title><![CDATA[画像のタイトル(任意)]]></image:title>
		<image:caption><![CDATA[画像の alt 属性(任意)]]></image:caption>
	</image:image>
</url>

XML サイトマップの画像関連タグの詳細については以下をご参照ください。

WordPress SEO の XML サイトマップに全添付画像を出力するサンプル コード(PHP)

サンプル コードとして、投稿に添付された画像すべてを XML サイトマップに出力するためのフィルター関数を置いておきます。

function my_wpseo_sitemap_urlimages( $urlimages, $post_id ){
	if ( 'post' != get_post_type( $post_id ) ) return $urlimages;

	$images = get_posts( array(
		'numberposts' => -1,
		'post_type' => 'attachment',
		'post_mime_type' => 'image',
		'post_parent' => $post_id,
	) );

	$new_urlimages = array();
	if ( $images ) {
		foreach ( $images as $i ) {
			$img['src'] = $i->guid;
			$img['title'] = $i->post_title;
			$img['alt']  = get_post_meta( $i->ID, '_wp_attachment_image_alt', true );

			$new_urlimages[] = $img;
		}
		$urlimages = $new_urlimages;
	}
	return $urlimages;
}

add_filter( 'wpseo_sitemap_urlimages', 'my_wpseo_sitemap_urlimages', 10, 2 );

プチ解説

メディア ライブラリで、サイトマップに出力したい画像を「投稿に添付」した上で、「メディアを編集」してタイトルと代替テキスト(alt)を入力しておくとシアワセになれます。キャプションや説明を使いたい場合は、14~16行目を適宜、書き換えてください。

添付画像(post_type が attachment)の post オブジェクトについて以下のページに助けていただきました。ありがとうございます。

XML サイトマップに画像を出力する目的は もちろん SEO

書くまでもなかった。

Google はウェブ検索と同様に、画像検索でもユーザーに最適な関連性の高い検索結果を提供することを目指しています。Google のウェブマスター向けガイドラインと下記のベスト プラクティスに従うことで、検索結果にご自分の画像が含まれる可能性が高くなります。

サイトマップに出力されていない画像はインデックスされない訳ではありませんが、オリジナリティの高い(=検索エンジンが高く評価してくれそうな)画像は、タイトルなどの情報を付け加えて積極的にアピールしておいた方が良さそうですね。できることは全部やろう。

2 thoughts on “WordPress SEO の XML サイトマップに全添付画像を出力する方法

    1. Fanny

      THE 2nd IS A RIGHT TO OWN A FIREARM. THE GOREVNMENT WANTS TO TURN EVERYTHING AROUND EVER CHANCE THEY GET. MIGHT BE TRYING TO BE A POLICE STATE. WAIT IT ALLREADY IS I FORGOT

      Reply

コメントを残す

メールアドレスが公開されることはありません。