metaタグのkeywordsとdescriptionをカスタマイズ

googleウェブマスターツールを見ていると、重複するメタデータ(descriptions)がたくさんある(約1,500)とのご指摘が!
ページソースを見てみると、どのページもBLOGのキャッチフレーズが設定されています。
header.phpに、

<meta name="description" content="<?php echo bloginfo('description'); ?>" />

と書かれているので、当たり前です。
このままではSEO的に良くなかろうということで、対応することに。

この手の対応にはSEO対策プラグインを使うのが良さそうです。
候補に上がったのが定番の以下の二つ。

  • All in One SEO Pack
  • HeadSpace2

試してみた結果、細かく設定できるHeadSpace2が良さそうだ。
これをベースにすることにしました。

HeadSpace2の設定の際に参考にさせて頂いたサイト

さて、記事のDescription(説明文)に%%excerpt%%を入れても、空白(description=””)で出力されてしまいます。
どうやら、記事に抜粋を設定しないと出力されないようです。
本家「ネイチャー探索日記」はFC2から引っ越してきたサイトで、記事数は700以上あります。
一つ一つの記事に抜粋を設定するなんて、とてもじゃないけどできません。
記事本文からdescriptionを設定できないかとぐぐってみたところ、下記の記事の対策方法が良さそうです。

「Blog × Play Under World」様
WordPressでエントリーごとにkeywordsとdescriptionを自動で設置する方法

抜粋が設定されている場合は抜粋から、設定されていない場合は本文からdescriptionを設定する方法です。
keywordsの部分はとりあえず後で考えるとして、下記のコードをheader.phpに記載。

<?php if ( is_single() ) { ?>
	<?php if ($post->post_excerpt){
		$summary = strip_tags($post->post_excerpt);
		$summary = ereg_replace("(\r\n|\r|\n)", "", $summary); ?>
		$summary = mb_substr($summary, 0, 120). "..."; ?>
		<meta name="description" content="<? echo $summary; ?>" />
	<?php } else {
		$content_summary = strip_tags($post->post_content);
		$content_summary = ereg_replace("(\r\n|\r|\n)", "", $content_summary);
		$content_summary = mb_substr($content_summary, 0, 120). "..."; ?>
		<meta name="description" content="<?php echo $content_summary; ?>" />
	<?php } ?>
<?php } else { ?>
	<!-- <meta name="description" content="<?php bloginfo('description'); ?>" /> -->
<?php } ?> 

望み通りの結果となりました。

さて、この対応だと投稿記事(singleページ)は望む結果となりますが、
index、アーカイブ、カテゴリ、タグ等のページには同じdescriptionが設定されてしまいます。
前述のコードの14行目はコメントアウトして、keywordも合わせて、Headspace2に任せることにしました。

全共通のセッティング

ページタイトル 設定しない
Description(説明文) 設定しない
タグ 設定しない

ホームページ

ページタイトル 設定しない
Description(説明文) サイトの説明。%%page%%
タグ サイト全体的なタグ

Front Page

ページタイトル 設定しない
Description(説明文) %%sitename%%のトップページ。サイトの説明。
タグ サイト全体的なタグ

アーカイブ

ページタイトル %%date%%に投稿した記事
Description(説明文) %%date%%に投稿した記事 %%page%% | %%sitename%%
タグ 設定しない

カテゴリー

ページタイトル カテゴリ:%%category%%
Description(説明文) カテゴリ:%%category%%に関する記事 %%page%% | %%sitename%%
タグ %%category%%

Posts

ページタイトル %%title%%:%%category%%
Description(説明文) 設定しない
タグ %%category%%,%%tag%%

ページ

ページタイトル
Description(説明文) %%title%% | %%sitename%%
タグ

検索ページ

ページタイトル 検索結果:%%searchphrase%% %%page%%
Description(説明文) %%searchphrase%% で検索された記事 %%page%% | %%sitename%%
タグ %%searchphrase%%

タグページ

ページタイトル タグ:%%tag%%
Description(説明文) タグ:%%tag%%に関する記事 %%page%% | %%sitename%%
タグ %%tag%%

他のページについては、何も設定していません。

さてこれで、仕様上は問題なくなったわけですが、内容上の問題が・・・
抜粋がない場合は、各記事の先頭120文字をdescriptionに出力するようにしましたが、
記事の先頭に前置きを書く癖があり、タイトルに見合ったキーワードが出てこない記事があるのです^^;
抜粋がない場合は、INDEXページと同じ出力にして、google先生にお任せしたほうがいいのかもしれません。
ただ、再び重複するメタデータが大量発生してしまい、当初の目的に反することになってしまいます。
何のために対策したんだか(笑)
まぁ、しばらく様子を見ることにします。

【WordPress】アーカイブページの表示形式を変えてみる

本家「ネイチャー探索日記」では、トップページでの記事は全文表示にしておりますが、
カテゴリーやタグ、日付のアーカイブページでは、抜粋表示にして、表示件数を増やそうと思いました。
アイキャッチ画像も表示できるといいな。

使用しているテンプレートのarchive.phpを開く。
まずコンテンツを表示させているコード、

<?php the_content('Read more'); ?>
<?php wp_link_pages(); ?>

これを下記のように修正。

<?php the_post_thumbnail('thumbnail'); ?>
<??php the_excerpt(); ?>

次に表示件数の変更。
wordpressの1ページに表示する最大投稿数の設定では5件にしておりますが、15件くらいにしてみるか。

<?php while ( have_posts() ) : the_post(); ?>

の上に表示件数を制御するコードを追加

<?php query_posts($query_string.'&posts_per_page=15'); ?>
<?php while ( have_posts() ) : the_post(); ?>

これでとりあえず、当初の目的は達成出来ましたが、アイキャッチ画像の下に抜粋記事が表示されています。
archive画面 before

アイキャッチ画像の右横に本文を持ってくるように、CSSで整形。
ページソースを見てみると、アイキャッチはattachment-thumbnailクラスが指定されていたので、

.attachment-thumbnail {float:left;margin-right:2em;}

archive画面 after

更に、抜粋記事の最後の[...]を”続きを読む”に変更して、本文へリンクを貼る。
functions.phpに次のコードを追加。

function new_excerpt_more($post) {
    return ' <a href="'. esc_url( get_permalink() ) . '">' . '... 続きを読む...' . '</a>';	
}	
add_filter('excerpt_more', 'new_excerpt_more');

望み通りの表示になりました。
めでたしめでたし。

参考記事
・WordPress de SEO をやろう!様
  アーカイブやカテゴリーの1ページあたりの表示件数をプラグインを使わずに変更する方法(query_posts関数)
・Web担当者の豆知識 様
  WordPress [続きを読む]の設定 投稿時に自動的に記事を抜粋表示する

結果はこんな感じです。
ネイチャー探索日記 – ヤンマ科

【WordPress】WordPress Popular Postsをカスタマイズ

閲覧数の多い記事をランキング表示してくれるプラグイン「WordPress Popular Posts」を使用していますが、導入してしばらく様子を見てみると、カウント数がどうもおかしい。
こんなに過去記事にアクセスが有るわけがない。
ブラウザやRSSリーダーからの閲覧だけではなく、botなどのプログラムからのアクセスもカウントしているのではないかとの疑問を持ちました。

ぐぐってみると、下記の記事を発見。

参考記事
試行錯誤ライフハック様
[試] WordPress Popular Postsで読者からのアクセスのみカウントさせる方法

どうやら予想は当たったようだ。
記事の紹介に従って、「WordPress Popular Posts」をカスタマイズ&初期化してみた。

これでしばらく様子見しようと思う。

【WordPress】特定カテゴリの目次を作ってみる

※現在は使用しておりませぬ。

本家サイトでカスタマイズネタを書いていた時、
カスタマイズに関連する記事のみの目次ページを作ってみようと思った。
具体的には”カスタマイズ”カテゴリに分類した記事の一覧だ。

固定ページに作ることにしたが
記事のリンクリストを手書きで並べるのも面倒くさいし、追加忘れもあり得ると思い、
自動でリンクリストが出来る方法がないかと調べた結果、下記の記事を見つけた。

参考記事
WP SEOブログ様 - 「WordPressの固定ページを目次ページとして使う方法

投稿画面でPHPを使えるようにするプラグイン「Exec-PHP」を使って記事内に下記コードを記述すればいいらしい。

<ul>
<?php $posts = get_posts('numberposts=10&cat=21'); global $post;?>
<?php foreach($posts as $post): ?>
<li><?php the_time('m月d日'); ?>・・・<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

しかし、「Exec-PHP」はセキュリティ上の問題もあるらしい。
回避方法として、functions.phpにショートコードとして定義する方法もあるが、
functions.phpはなるべくいじりたくない。
開発中のコードにエラーが有った場合、最悪ダッシュボードにもアクセスできなくなるからだ。

何かいい方法はないかと調べたところ、「Shortcode Exec PHP」というプラグインを見つけた。
プラグイン内でPHPコードを定義し、それを記事内でショートコードとして呼び出せるものです。
エラーになっても、記事内でエラーが発生するだけなので、気持ち的にも安心。

とりあえず実験すべく、上記のコードをショートコード化してみた。

echo '<ul>';
$posts = get_posts('numberposts=-1&cat=584'); global $post;
foreach($posts as $post) {
	echo '<li>'. PHP_EOL;
	echo '<a href="',the_permalink(),'">',the_title(),'</a>&nbsp;(',the_time('Y年n月j日'),')'.PHP_EOL;
	echo '</li>'. PHP_EOL;
}
echo '</ul>';

2行目のcat=584はカテゴリ番号。
このコードを”customize_category_index”と名付け、固定記事内で下記コードを記載。

[customize_category_index]

とりあえず、こんなページができました。
カスタマイズ記事一覧

【WordPress】プラグイン Whisper Comment

FC2ブログやExciteブログに実装されている管理人だけに見れるささやきコメント。
FC2時代でも使われる頻度は少なかったが、たまにささやかれることもあったので、
Wordpressでも実装できないか探して見ると、「Whisper Comment」なるプラグインを見つけた。

インストールして有効化。
コメント機能に管理者のみに投稿する為のチェックボックスが追加された。
管理者だけに表示

コメント一覧でもささやきコメントである表示もされた。

【WordPress】プラグイン Advanced Category Excluder

※現在は使用しておりませぬ。

本家サイトでWordpressのカスタマイズネタを記載していましたが、
写真BLOGなので、通常の写真ネタの中にカスタマイズ記事を表示させたくなかった。
特定のカテゴリのみトップページに表示させない方法はないかと調べたところ、
Advanced Category Excluder」というプラグインを見つけた。

参考記事
ワードプレステーマTCD 様
特定のカテゴリ・ページを非表示にするプラグイン「Advanced Category Excluder」

HOME画面でのみカスタマイズカテゴリーの記事を表示させないように設定した。
また、サイドバーのアーカイブリストにも該当カテゴリの記事数をカウントさせないよう、
WP-dTree Archiveウェジットの設定で、Exclude catsの設定(カスタマイズネタのカテゴリ番号を指定)を行った。

但し、HOME画面からカスタマイズ記事への飛び先がないのは嫌なので、カテゴリリストから飛べるようにしてある。

【wordpress】プラグイン wp-dtree

ブログを長くやっていると、サイドバーの月別アーカイブ、カテゴリリストがずらずらと長くなってしまう。
標準のウェジットではドロップダウン表示ができるが、いまいち気に入らなかった。
折りたたみ表示できるWP-dTreeというプラグインを導入してみた。

アーカイブリストやカテゴリリストをツリー表示してくれるプラグインです。
標準設定では最下位の階層に投稿記事リストが表示されるので、これは余計ということで、「List posts」のチェックを外す。

また、ピョンと表示されるのはつまらないので、「General Settings」でアニメーション効果のチェックをON。
効果時間を300ミリ秒に設定してみた。

サイドバーがコンパクトになりました^^

dtree_category

WordPress スマホでの表示

スマホでの表示を最適化する定番プラグイン「WPtouch Mobile Plugin」。
デフォルトでインストールされていたので、有効化してみた。
早速、愛機「Softbank 203SH」で確認確認してみると、標準ブラウザでは正常に表示されていません><

WPtouch Mobile Plugin適用

原因を調べてみると、Android 4.1(Jelly Bean)に問題があるようだ。
ありがたいことに対応プラグインがあるようなので早速インストール。

WPtouch for JB(Jelly Bean)
WPtouch for JB適用

直った^^

WordPressでコメントのエラー表示をカスタマイズ(Comment Validation)

コメント投稿時、必須項目を入力しないと、別ページに遷移してからメッセージを出すのは少々使いにくい。
コメントエラー

その場でエラー表示させる方法は無いもんかと探してみたら、Comment Validationというプラグインを見つけた。

参考記事
「ミニミニ大作戦」様-WordPressでコメントのエラー表示をカスタマイズする「Comment Validation」

参考記事にしたがって、エラーメッセージを日本語化。

いざ、テストしてみると、入力必須から外しているメールアドレスに対してもエラーを吐き出してしまいますので、
comment-validation.jsの8行目、emailの必須チェックをtrueからfalseに変更してみた。

email: {
required: false,
email: true
},

でけた^^

WP AJAX Edit Comments

コメントを編集できるよう、WP AJAX Edit Commentsを導入。