趣深い.com

コケの成長を眺めて暮らしています

※本サイトはプロモーションが含まれています

プラグインなしで!カスタムフィールドを使って、noindex、nofollowを設定する方法。

 2015/11/16      WordPress

By: Simon Cunningham

By: Simon Cunningham

WordPressでプラグインを使わず、カスタムフィールドを使ってnoindex(とfollw)を設定する方法を紹介します。

全ては「header.php」をいじるだけで完成します。怖い怖い「functions.php」はノータッチでフィニッシュですので安心して下さい。でもバックアップは取りながらやって頂くのが確実です。

私は以前までAll in One SEO Packを使っていたのですが、なぜ使っているのか自分でもよく意味がわかっておらず、見よう見まねで初期設定をした後は放置でした。
このプラグイン、WordPressなら必須!みたいに言われていますが、実はそんなもん使わずに上位表示している人もかなり居るっていうじゃありませんか。
しかも、実はその機能の大半は自分でなんとか頑張れば設定出来るんですって。

おまけにプラグインはたくさん入れると重くなってサイトの表示が遅くなるし、色々いれてやっていると機能が被ってひっちゃかめっちゃかになります。

私がAll in One SEO Packで使っていたのは、
・個別の記事のnoindex
・個別の記事のメタディスクリプション(思いついたときだけ)
の2つだけでした。

あとはもうよくわかりませんし、StingerとかSimplicityとか、良いテーマは逆に被る機能があって邪魔になるので、大概オフにしてました。

せっかくプラグインを入れても2つくらいしか使わないんだったら、自分でカスタマイズしてやってみようと思って着手したうちの1つが、今回のnoindex-nofollow機能です。導入自体さっと終わります。

カスタムフィールドを使ってnoindex,nofollowを設定する方法

たったの3行程で終わりです。(いや、2かな・・・)

①header.phpにコードを記述
②カスタムフィールドを投稿画面で表示させる
③設定する
という流れになります。簡単です。

header.phpにコードを書く

コピペ出来ます。

<?php 
// ①投稿ページと固定ページだけが対象ですという命令
if ( is_single() || is_page() ) { 
 // ②カスタムフィールドでnoindex が設定された場合
 if( get_post_meta($post->ID, "noindex", true) ) {
  // ③さらにカスタムフィールドでnoffolow が設定された場合
  if( get_post_meta($post->ID, "nofollow", true) ) {
   // ④noindex と nofollow を設定
   echo "";
  }
 else { // ⑤カスタムフィールドでnoindex のみを設定した場合
  echo ""; 
  }
 }
// ⑥nofollowのみは処理しません
}
?>

一応説明を。すっ飛ばしてもらって構いません。

  • ① 投稿ページと固定ページだけが対象ですよ、という命令をしています。
  • ② カスタムフィールドで「noindex」が設定されたら、headerのmeta情報も「noindex」が設定されますよ
  • ③ 「noindex」が設定された状態で、カスタムフィールドで「nofollow」と設定したら、headerのmeta情報にも「nofollow」が設定されますよ。
  • ④ そのとき、headerのmeta情報は、「noindex,nofollow」と書きますからね。
  • ⑤ カスタムフィールドで「noindex」のみを設定した場合、followの方は勝手に「follow」にと判断してheaderのmeta情報に「noindex,follow」と書きますよ。
  • ⑥ カスタムフィールドで「nofollow」のみ(indexはするけどnofollow)は、取り扱いませんよ。

みたいな感じです。

コードを貼り付けるのは、header.phpの<head>と</head>の中ならどこでも良いのですが、<title>の上に書くと後で確認しやすいのでオススメです。Stinger5だと20行目です。
header.php

投稿画面にカスタムフィールドを表示させる

はあ?カスタムフィールド?
私はこの設定をするまでカスタムフィールドなんて見たことも聞いたこともありませんでした。
でも、簡単に表示できます。

投稿画面の右上にある「表示オプション」です。
hyoujioption
これをクリックすると、ベロッとメニューが出てくるので、カスタムフィールドにチェックを入れます。

hyoujioption2

そうすると、投稿画面の下の方にカスタムフィールドが現れます。おめでとうございます。
customfield

カスタムフィールドの使い方

customfield1

noindexを設定する場合、名前には「noidex」、値には「1」を入れます。
0だと何もなし、それ以外の文字が値に入力されたら全て「noindex」と判定しますよ、ということです。
入力する文字はなんでも良いのですが、あえて1にしておくとやってる風を味わえます。

0か1か。

いかにもコンピューターやってますって感じがしますね。わざわざ変な言葉を入れるぐらいなら「1」にしておくのが今後のためにも良いでしょう。

これで終わりです。「nofollow」も同じ要領で出来ます。
カスタムフィールドのメニューは、一度設定すると記憶されて次からはプルダウンで出てきます。

設定したら確認を

header.src
設定した記事のページを開いて、右クリックしてページのソースを表示を選んで確認してみて下さい。赤線の部分が自分が設定した通りになっていれば成功です。

私はめんどくさくて雑に書いたコケ日記とか、noindexにしてます。効果があるのかわかりませんけど。

そうなんです。コケ日記の一部をnoindexさせるためだけにプラグインをわざわざ入れるのもどうなのか、と思ったから今回のカスタマイズをやろうと思ったんです。人間、きっかけがないとやらないもんですね。

↓カスタムフィールドを使って、ディスクプションとキーワードを設定する方法はこちら。
プラグインなし!カスタムフィールドを使ってディスクリプションとキーワードを設定する方法。
原理はだいたい一緒です。

カスタムフィールドのいらないメニューを消したい

逆に一度設定してまうと消すのが面倒です。データベースまでいって消すか、プラグインを使って消すかするしかありません。
Delete Custom Fieldsというプラグインを使って消すのが楽です。

普通に選んで消す感じ。プラグインを減らすためにカスタムフィールドを使っているのに、カスタムフィールドのメニューを消すためにはプラグインを使うっていう、変な感じになりますが、まあ仕方がありません。消したらプラグインも停止してもかまいませんし。

ところでnoindexってなんなの

noindexとは

noindexは、ボリュームが少なかったり、明らかに低品質な記事をGoogleに見てくれるなと伝えるため使います。
「このサイトの評価をする上で、この記事は数に入れなくていいからね」ということです。

例えば吹奏楽の大会があったとして、「シンバルのやつは下手くそで調和を乱しているので彼の分は採点の時に加味にしないで下さい。」という感じです。
吹奏楽では絶対に無理ですが、ブログやサイトでは可能なのです。いらないけど、書いちゃった。でも消すのは嫌だ、という記事をnoindexするのです。
演奏は下手だけど、ムードメーカーだからなあ。という存在は、そっとnoindexです。

follow、nofollow

follow、nofollowとは、記事の中に貼ったリンク先を、Googleの検索ロボに巡回してもらうかどうかという話です。

あなたの記事の中に、Aさんのブログのリンクを貼ったとします。そうすると、Googleロボは、あなたの記事を巡回したときにAさんのブログまで辿っていきます。
あなたのサイトの評価が高い場合、Googleロボは,
「ああ、Aさんは高評価なサイトからリンクされているんだな。関連性も高いし、意義がある。評価あげよ」
と判断することになります。

あなた⇨Aさん。という流れでリンクを送っているので、Aさんは被リンクを受けている形です。Aさんのサイトの評価が上がります。

「ちょっと待って。それは嫌よ」

という時にやるのがnofollowです。
「Aさんのサイトまで巡回する必要はないよ。私のサイトを廻ったら帰ってね。」という話です。

やたらめったら外部へのリンクが貼ってあるサイトは評価が落ちると言わていますから、上手く使えば効果があるのでしょう。

でも、私はそんなの貼る前に考えればいいなじゃないの?と思っているので特に設定はしていません。緻密な作戦を立ててサイトを運営する上級テクなのではないでしょうか。

意味わかんね、という人は特にいじる必要はないと思います。

基本的にはnoindexだけ使う

このカスタムフィールドのindex変更機能、基本はクソページにnoindexだけ使っていればそれでOKだと思います。
nofollowっていつ使うでしょうか。いや、あるんでしょうけど、普通にブログを書いている分にはあまり必要ない気がします。

お前のブログからのリンクいらないわ、って怒られたときぐらいでしょうか?

参考にしたサイト:
WordPress の noindex nofollow の制御をページ単位にカスタムフィールドを利用して設定する方法
ものすごくわかりやすく書いてあります。

これでは気に食わない、という人は↓↓↓

アフィンガーのページではfunctions.phpに記述する方法が紹介されています

コケ日記のnoindexもそうなんですが、別なサイトでアフィンガーを使い始めたのがnoindexを意識するきっかけでした。

アフィンガーが最初から投稿画面のサイドバーに「noindex,nofollow」の設定するメニューがあるんですよ。
これいいなあと思っていたら、アフィンガーのページにやり方が載っていました。
自分のWordPressテーマの投稿に「index、noindex」の設定をサクっと追加する方法
これでうまくいく人はこっちが手軽でいいんじゃないでしょうか。楽だし。

でも、私はこれで全く上手くいきませんでした(笑)。なぜかはよくわかりません。Stinger5で試したんですが、エラーばかり。
ちょっとコードを変えたらエラーは回避出来るようになったものの、これで合っているのか自信がありません・・・

一応コードを

//////////////////////////////////
// index操作
//////////////////////////////////

add_action( 'admin_menu', 'st_meta_robots_add_metaboxr' );
add_action( 'save_post', 'st_meta_robots_save_meta_robots' );

function st_meta_robots_add_metaboxr() {
		add_meta_box( 'stmeta', 'index変更', 'st_meta_robots_meta_robots_dropdown_box', 'page', 'side', 'low' );
		add_meta_box( 'stmeta', 'index変更', 'st_meta_robots_meta_robots_dropdown_box', 'post', 'side', 'low' );
}

// 挿入ページ

function st_meta_robots_meta_robots_dropdown_box() {
	global $post;
	wp_nonce_field( wp_create_nonce( __FILE__ ), 'st_meta_robots' );
	$meta_robots = $post->meta_robots;

	?>
	<label for="meta_robots">
		<select id="meta_robots" name="meta_robots">
			<option selected="selected">index, follow</option>
			<option selected="selected">index, nofollow</option>
			<option selected="selected">noindex, follow</option>
			<option selected="selected">noindex, nofollow</option>
		</select>
	</label>
	<?php 
}

// データベース登録

function st_meta_robots_save_meta_robots( $post_id ) {

	$my_nonce = isset( $_POST['st_meta_robots'] ) ? $_POST['st_meta_robots'] : null;
	if ( !wp_verify_nonce( $my_nonce, wp_create_nonce( __FILE__ ) ) ) {
		return $post_id;
	}
	if ( defined( 'DOING_AUTOSAVE' ) & DOING_AUTOSAVE ) {
		return $post_id;
	}
	if ( !current_user_can( 'edit_post', $post_id ) ) {
		return $post_id;
	}

	$data = $_POST['meta_robots'];

	if ( get_post_meta( $post_id, 'meta_robots' ) === "" ) {
		add_post_meta( $post_id, 'meta_robots', $data, true );
	} elseif ( $data !== get_post_meta( $post_id, 'meta_robots', true ) ) {
		update_post_meta( $post_id, 'meta_robots', $data );
	} elseif ( $data === "" ) {
		delete_post_meta( $post_id, 'meta_robots', get_post_meta( $post_id, 'meta_robots', true ) );
	}
}

// 表示

function st_meta_robots_add_meta_robots_tag() {
	global $post;
	if ( is_single() || is_page() ) {
		$meta_robots = ( empty( $post->meta_robots ) ) ? 'index, follow' : $post->meta_robots;
		echo '<meta name="robots" content="' . $meta_robots . '">' . "\n";
	} elseif ( is_tag() || is_archive() ) {
		echo '' . "\n";
	} else {

	}
}

add_action( 'wp_head', 'st_meta_robots_add_meta_robots_tag' );

本家との違い

・27行目(こっちは29行目)、<!– を消した
・37行目(こっちは40行目)、&& を &にした
・61行目(こっちは64行目)、?– を消した
ぐらいです。

エラーだよ、と出てくる行を直しながらやっていたらこうなりました。

これでなんとなく形になるんですが、困ったことが2点。
・「noindex,nofollow」をheaderの<title>上に表示させたい(確認しやすいから)けど、場所が指定できない。
なんか変な位置に出てるんですよ。でも直し方もわからず。

・メニューでindexを変更しても、投稿画面上の表記は最初の状態に戻る。

2015-07-14_16h46_38
http://the-money.net/stinger/post-473/

本来こんな感じに出てくるはずなんですけど、なぜか私の場合は↓↓
index henkou
デフォルトが「noindex,nofollow」になっています。でもソースを見ると「index,follow」に。

indexをいじって設定するとソースは反映される。でも投稿画面上は「noindex,nofollow」に戻っているのです。コードにsaveなんとかっていうのがあったので、原因その辺かなと思いつつ、基礎がわかっていないので手が進まず。

一応、この状態でも使えないことはありません。きちんとindex変更は出来ているし、ソースを見れば場所が変だっていうだけで確認も出来る。

でも・・・ふわふわした状態で使うのも嫌なので一旦諦めました。
そして、結局カスタムフィールドを使ってやるのが一番簡単だという結論に至り(プラグインは?)この記事を書きました。

このファンクション問題は自分の中で少し寝かせてまた挑戦しようと思います。

今回参考にしたページ

WordPress の noindex nofollow の制御をページ単位にカスタムフィールドを利用して設定する方法
主にこのページを参考にカスタマイズしました。仕組みまで解説されていてとてもわかりやすいです。

プラグイン不要!WordPressのnoindexをカスタムフィールドで設定する方法
↑こちらのほうが簡単かもしれません。

functions.phpをいじって実現するパターン↓↓

自分のWordPressテーマの投稿に「index、noindex」の設定をサクっと追加する方法
私はうまくいきませんでしたが、うまくいく人はうまくいくはずです。

WordPressのカスタムフィールドを使用したSEO対策施工の流れ
すごくわかりやすかったけど、やりたいのとちょっと違った・・・。自作のカスタムフィールドを投稿画面に登場させて、設定できるやり方です。
このパターンでやりたい人は多いのではないでしょうか。

【WordPress】カスタムフィールド設置でAll in One SEOも不要に!プラグインなしで
既に色々理解している人には良いかもしれません。初心者には辛かったです。半年後に改めてお世話になりたいです。

まとめ

備忘録とはよく言ったものです。いざ別なサイトでも同じことをしようとすると結構忘れているんですよね。

こういうのってどこのページを参考にしたかすら忘れるので、自分でやったことは書いておいた方が良いです。

【関連記事】
プラグインなし!カスタムフィールドを使ってディスクリプションとキーワードを設定する方法。

エンジニアのためのQ&Aサイト【teratail】

メールアドレスのみで無料登録可能。

teratailではPHP、Ruby、Java、Androidなどのウェブやネイティブアプリに関する質問やSwiftやLaravelといった最新技術に関する質問が投稿されてます。1日に30個程度の質問が投稿されその9割程度に回答がつきます。

独学でプログラミングを勉強したい人におすすめのサービスです。

>>エンジニアのためのQ&Aサイト【teratail】