Blog

【WordPress】attachment.phpを使って「添付ファイルのページ」選択時に直接メディアファイルを表示させる方法

2020.01.02 2020.10.24 WordPress

今回は、attachment.phpを利用してメディア追加時に「添付ファイルのページ」を選択された際にメディアファイルを直接開くようにする方法をご紹介します。

【WordPress】attachment.phpを使って「添付ファイルのページ」選択時に直接メディアファイルを表示させる方法

添付ファイルページは低品質コンテンツと判定されるおそれ

WordPressでは投稿にメディア(画像など)を追加する際に、

  • なし
  • メディアファイル
  • 添付ファイルのページ
  • カスタムURL

という感じでリンク先を選択できるようになっています。

「なし」は画像にリンクを設置しない、「カスタムURL」は任意のURLへのリンクを設置できるというものです。

そして「メディアファイル」はブラウザでメディアファイルを直接開くもの、「添付ファイルのページ」はWordPressで自動生成される添付ファイルページへのリンクを設置するものです。

「メディアファイル」と「添付ファイルのページ」の違いを分かっていて使い分けている場合はいいのですが、そうでないと知らないうちにサイトのSEO的な評価を下げてしまうおそれがあります。

というのも、添付ファイルページはメディアファイルを張り付けただけの簡素なページであるため、Googleから「低品質コンテンツ」と判定される可能性があり、それが大量にインデックスされることでサイト全体の評価を下げてしまいかねないからです。

もちろんnoindexを設定しておけば問題ないはずですが、使用しているテーマによっては対応していないものもあります。

attachment.phpでメディアファイルを直接表示させる

WordPressテーマに添付ファイル用のテンプレートファイル(attachment.php)が用意されていない場合、single.php(またはsingular.php)が適用されます。

single.phpが適用される場合、添付ファイルごとにnoindex設定することが難しいため、解決方法としては以下の2つが考えられるかと思います。

  • attachment.phpを作成してnoindexを設定する
  • attachment.phpでメディアファイルが直接表示されるようにする

single.phpを流用してattachment.phpを作成&noindex設定だけ変更するのが簡単ではあります。

しかし添付ファイルページが大量に生成されるのが気持ち悪いという場合には、attachment.phpに以下のように記述すれば解決できそうです。

<?php
if ( ( $meta = wp_get_attachment_metadata( get_the_ID() ) ) ) {
	$file = WP_CONTENT_DIR.'/uploads/'.$meta['file'];
	header( sprintf( 'Content-type: %s', $meta['sizes']['thumbnail']['mime-type'] ) );
	header( sprintf( 'Content-Length: %d', filesize( $file ) ) );
	readfile( $file );
} else {
	header( sprintf( 'Location: %s', get_bloginfo( 'url' ) ) );
}

これで、メディア追加時に「添付ファイルのページ」が選択された場合、添付ファイルページではなくメディアファイルが直接ブラウザで表示されるようになります。

まとめ

以上、attachment.phpを使って「添付ファイルのページ」選択時に直接メディアファイルを表示させる方法でした。
添付ファイルページがインデックスされてもSEO的に問題ないという意見もありますが、それでも低品質コンテンツと判定される可能性がある以上は対処しておいた方がいいかなと思います。

自分のWordPressサイトで作成したページ数に比べて、Googleにインデックスされているページ数がやけに多いなという場合には、おそらく添付ファイルページがインデックスされています。

検索エンジンで「site:自分のURL」で検索して確認してみましょう。

参考ページ
WordPressのテーマにattachment.phpを追加して、添付ファイルページを失くしてみた – SUSH-i BLOG