1. TOP
  2. wordpressテーマカスタマイズ
  3. 記事をSEOに最適化するための機能をWordPressにプラグインなしで実装

記事をSEOに最適化するための機能をWordPressにプラグインなしで実装

WordPressをSEOに最適化するためのプラグインとして『All in One SEO Pack』が有名でとても便利ですが、多機能な代わりに設定を間違えると逆にサイトの検索順位を落としてしまう可能性があります。

設定ミスを無くし動作を軽量化も見込めるように、カスタムフィールドを使用して記事ごとに『description』『keywords』『noindex』の設定を行える機能をテーマに追加しましょう。

今回は、SEOに最適化させるために『description』『keywords』『noindex』をWordPressの各記事で設定するためのBOXを追加する方法についてご紹介します。

ディスクリプションを設定できるようにする

ディスクリプションを各記事ごとに設定するときは、WordPressの記事の投稿画面に標準で搭載されている抜粋欄を利用します。

抜粋欄に入力した内容を出力するために、header.phpのheadタグ内に下記のソースを追加してください。

<meta name="description" content="<?php echo strip_tags( get_the_excerpt() ); ?>" />

『get_the_excerpt() 』は、各記事の抜粋欄に記述した内容を出力するためのテンプレートタグです。抜粋欄に入力されている場合は抜粋欄の内容、抜粋欄に何も記述が無い場合は、記事の冒頭から110文字を自動で抜粋して出力します。

また、『strip_tags()』も記述して、記事を出力した場合にhtmlタグが一緒に出力されないようにしておきましょう。

※日本語で利用する場合は、WordPressに標準で搭載されている『WP Multibyte Patch』プラグインを必ず有効化してください。

headタグにmetaタグを追加したら、続いてWordPressの管理画面から抜粋欄を有効化します。抜粋欄を投稿ページに表示するためには、WordPress管理画面の『記事投稿画面』→『表示オプション』の抜粋欄にチェックを入れてください。

チェックを入れると、エディタの下に『抜粋』という入力欄が表示され入力した内容が『meta name=”description”』としてheadタグ内に出力され、検索エンジンや記事一覧でも表示されるようになります。

固定ページで抜粋欄が使えるようにする
固定ページでも抜粋欄を使用したい場合は、functions.phpで有効化させる必要があります。
functions.phpを編集する際は、必ずバックアップをとって慎重に編集してください。

functions.phpに記述

add_post_type_support( 'page', 'excerpt' );

上記のソースコードを追加するだけで、固定ページでも抜粋欄が使用できるようになります。必要に応じて有効化しておきましょう。

投稿記事と固定ページで『キーワード』『noindex』を設定できるようにする

記事ごとに『キーワード』と『noindex』の設定は、サイトをSEOに最適化させるために使えるようにしておきたい機能です。

キーワードは、今のGoogleの検索ロジックでは効果が無いとも言われていますが、いつ仕様変更が行われるかわからないので、念のために設定しておきましょう。

『キーワード』と『noindex』は投稿記事にのみに設定する場合が多いのですが、固定ページのお問合せページなどのあまりコンテンツがないページをnoindexに設定できるように、今回は投稿ページと固定ページの両方に設定します。

投稿記事と固定ページで『キーワード』と『noindex』を設定するために、functions.phpで新しいカスタムフィールドを作成しましょう。

functions.phpに追加したソースコードは下記の通りです。
functions.phpを編集する際は、必ずバックアップをとって慎重に編集してください。

functions.phpに追加

function add_seo_custom_fields() {
$screen = array('page' , 'post');
add_meta_box( 'seo_setting', 'SEO', 'seo_custom_fields', $screen );
}
function seo_custom_fields() {
global $post;
$meta_keywords = get_post_meta($post->ID,'meta_keywords',true);
$noindex = get_post_meta($post->ID,'noindex',true);
if($noindex==1){ $noindex_check="checked";}
else{$noindex_check= "/";}
echo '<p>meta keywordを設定 半角カンマ区切りで入力<br />';
echo '<input type="text" name="meta_keywords" value="'.esc_html($meta_keywords).'" size="80" /></p>';
echo '<p>低品質コンテンツの場合はチェック<br>';
echo '<input type="checkbox" name="noindex" value="1" ' . $noindex_check . '> noindex</p>';
}
function save_seo_custom_fields( $post_id ) {
if(!empty($_POST['meta_keywords']))
update_post_meta($post_id, 'meta_keywords', $_POST['meta_keywords'] );
else delete_post_meta($post_id, 'meta_keywords');
if(!empty($_POST['noindex']))
update_post_meta($post_id, 'noindex', $_POST['noindex'] );
else delete_post_meta($post_id, 'noindex');
}
add_action('admin_menu', 'add_seo_custom_fields');
add_action('save_post', 'save_seo_custom_fields');

追加するソースコードは以上です。3つの関数を組み合わせてカスタムフィールドを作成し、一番下の『add_action』で関数の動作を指定します。ここでは詳しい説明は省き、どのような設定をしているかのみをご説明します。

add_seo_custom_fields

投稿画面のエディタの下に、新しくカスタムフィールドの値を入力するための場所を追加する関数です。『add_meta_box()』で追加する場所の詳細を指定します。

add_meta_box( '編集画面のID', 'タイトル', '使用する関数', '出力する画面の種類');

seo_custom_fields

カスタムフィールドの値や値の入力欄に出力する値を設定するための関数です。追加するカスタムフィールドの名前や入力欄の大きさなどをここで指定します。

save_seo_custom_fields

カスタムフィールドの値を保存するための関数です。カスタムフィールドの中の値が、空の場合を除いて値を保存します。

関数をfunctions.phpに保存すると、WordPress管理画面の投稿画面のエディタの下にSEO用の入力欄が出力されます。

上記の入力欄が出力されていても、まだメタデータはheadタグに反映されません。カスタムフィールドの値をheadタグ内にメタデータとして出力するために設定を行いましょう。

カスタムフィールドの値をheadタグに出力するための設定を行う

カスタムフィールドの値をheadタグ内にメタデータとして出力するために、header.phpにmetaダグを設定していきます。

noindexを出力するための設定

noindexを出力する設定は、管理画面のチェックBOXを確認してチェックが入っている場合のみメタデータを出力するようにします。

header.phpの<head>内に記述

<?php if( is_single() || is_page() ): ?>
<?php if(get_post_meta(get_the_ID(),'noindex',true)){ echo'<meta name="robots" content="noindex"/>';}; ?>
<?php endif; ?>

上記のコードをheadタグ内に記述することで、投稿ページや固定ページで設定したnoindex設定が反映されるようになります。

『<?php if( is_single() || is_page() ): ?>』で条件を指定しないと、トップページやカテゴリページなどのインデックスページで、noindexしているページがループの先頭にきた場合にnoindexされてしまうので注意してください。

この現象は『All in One SEO Pack』などでも発生してしまう現象のようですが、それを回避するために投稿記事と固定ページのみで出力するように必ず投稿記事と固定ページの場合のみ出力するように条件を指定しておきましょう。

キーワードを出力する設定を行う

カスタムフィールドに値がある場合はその値をmetaキーワードとして出力し、未入力の場合は記事に設定されている’tag’をキーワードとして自動で出力するよう設定します。

※すでに『meta_keywords』が設定してある場合は、重複を防ぐために元の記述と入れ替えてください。

header.phpの<head>内の『meta name=”keywords”』の設定と置き換え

<?php $customfield = get_post_meta($post->ID, 'meta_keywords', true); ?>
<?php if( empty($customfield) ): ?>
<?php if ( has_tag() ): ?>
<?php $tags = get_the_tags();
$kwds = array();
foreach($tags as $tag){
$kwds[] = $tag->name;
}	?>
<meta name="keywords" content="<?php echo implode( ',',$kwds ); ?>">
<?php endif; ?>
<?php else: ?>
<meta name="keywords" content="<?php echo esc_attr( $post->meta_keywords ); ?>">
<?php endif; ?>

上記のソースコードを設定することでmetaキーワードが<head>内に出力されるようになります。また、タグを自動出力せずにカスタムフィールドに値が設定されている場合のみキーワードを出力する場合は、下記のソースコードでメタキーワードを呼び出すことができます。

<?php if(get_post_meta(get_the_ID(),'meta_keywords',true)){ ?><meta name="keywords" content="<?php echo esc_attr( $post->meta_keywords ); ?>"><?php } ?>

metaデータの出力を確認する

設定が完了したら、カスタムフィールドの値がきちんとheadタグに反映されるかを値を入れて確認しましょう。適当なページの『キーワード』・『noindex』・『抜粋』に入力して記事を更新しブラウザで確認してください。
metaデータはサイトの情報を出力する大切な部分ですので、必ず確認作業を忘れずに行なってください。

ページのソースは、ブラウザ上で右クリック→『ページのソースを表示』より確認することができます。(chromeの場合)

上の画像のように、SEO用のカスタムフィールドと抜粋欄に入力した内容が<head>内にきちんと出力されていれば設定完了です。

サイトのmetaデータはSEOを考える上で必要不可欠なので、是非設定してみてください。metaデータを自由に設定し、より良いSEO対策を行いましょう。