Googleの検索結果の日付を最終更新日にする為にやってみたこと。

少し前になるのだけども、各投稿のmeta情報部分の”公開日”にnewマークを付けた。


その後、ふとしたことからGoogleの検索結果に最終更新日を表示できるようにすると例えばGoogle検索のオプションの日付指定検索で更新日を基準に検索結果が表示されるとの記事を読み
>>WordPress 記事の見直しと最終更新日の表記。それを Google に伝える

「おー!それは良いではないか!」と

むかしむかしの記事数が結構な数になるねこもりやは
WordPressで<time>タグを使って最終更新日を自動的に表示する方法でウエブシュフさんも推奨されているので、さっそく”更新日”を表示することにした。

それだけで、一応人間には公開日と更新日とが目で見てわかる様になったので良いのだけど、(ボットの巡回&更新を)待てど暮らせど、検索結果には公開日しか反映されません。

で、この暮れも押し迫った時期に、おもーい腰を上げてもう一度ソースを見直し&手直しをしてみたのでその経緯を記します。

追記 2014/6/17
本投稿の対処だけでは、検索結果に反映されないので、またまた追加で投稿しています。

当初施したこと

functions.phpに追加記述

まずは、以下をfunctions.phpに記述します。

予約投稿にも対応させるため↓のコメントアウトにあるように更新日が公開日より古い場合は公開日を返すようになっています。

/*
  get_the_modified_time()の結果がget_the_time()より古い場合はget_the_time()を返す。
  同じ場合はnullをかえす。
  それ以外はget_the_modified_time()をかえす。
*/

function get_mtime($format) {
    $mtime = get_the_modified_time('Ymd');
    $ptime = get_the_time('Ymd');
    if ($ptime > $mtime) {
        return get_the_time($format);
    } elseif ($ptime === $mtime) {
        return null;
    } else {
        return get_the_modified_time($format);
    }
}

表示させたい部分に記述(改良前)

以下をテンプレート、single.phpやアーカイブテンプレートなどの表示したい部分に記述します。

ねこもりやは、META部分は別ファイルにしてテンプレートに読み込んでいます。
別ファイルにして読みこむようにすると、テンプレートを訂正修正するときに、ひとつのファイルだけ手をくわえればいいのでメンテナンス性が向上しますね♪
(後述)

<span class="new">
<?php
$days = 3; //Newを表示させたい期間の日数
$today = date_i18n('U');
$entry = get_the_time('U');
$kiji = date('U',($today - $entry)) / 86400 ;
if( $days > $kiji ){
echo '<img src="';
bloginfo('template_directory');
echo '/img/new.png" width="30" height="15" alt="new" />';
}
?>
公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time>
</span>
<br />
<?php if (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?>
<span class="new">
<?php
$days=3; //UPをつける日数
$today=date_i18n('U');
$entry=get_the_modified_date('U');
$sa=date('U',($today - $entry))/86400;
if( $days > $sa ){
echo '<img src="';
bloginfo('template_directory');
echo '/img/up.png" width="30" height="15" alt="up" />';

}
?>
<?php if ($mtime = get_mtime('Y年m月d日 l')) echo '最終更新日: ', $mtime; ?>
</span> 
<?php endif; ?>

公開日から3日間はnewアイコンを、更新日から3日間はupアイコンを表示するようにしています。

>>WordPressで最終更新日を表示する方法(予約投稿にも対応) | WP SEOブログ

ここでのミソは、13行目の

公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time>

目的のGoogleボットなどのコンピュータに日付データを拾ってもらう(理解してもらう)ために、”timeタグ”を使っているところ。
>><time>-HTML5タグリファレンス

このタグがないと人間には日付に見える部分もコンピュータにはただの文字列。

meta部分の公開日と更新日

結果~更新日は検索結果に表示される?

こちらのサイトで加筆修正を行った記事「自分のサイトがツイッターにスパム認定されてしまった時の対策」を Google で検索し、期間指定をしてみた所しっかりと検索結果にあらわれたので、「トライアスロンオンライン」さっそく試させて頂く事にした。

引用:WordPress 記事の見直しと最終更新日の表記。それを Google に伝える

と、あるので、

さー!これでOK!!

とばかりに、喜んでおりましたが・・・

 

待てど暮らせど(しつこい)、検索結果に更新日が表示されません。

タグの見直し

こんな時に、盲目的にコピペで乗り切ろうとする根性ナシが仇となりまする。

よーく考えれば、わかることですがね。

そりゃー、<time>で括ってるのは公開日だけなんですから公開日しか拾わないよねー

リンク先の検証結果では、「ちゃんと期間指定した検索結果に出てきた」とあるけども、今一度そのものずばりのタイトル名(自分のサイトがツイッターにスパム認定されてしまった時の対策)で期間指定して検索してみたけど出てきませんでした┌|゚□゚;|┐ガーン!!

しごく、当たり前の結果に納得。

なので、改めて自分なりにやってみることに。

表示したい場所に記述(改良版)

<?php if (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?>
<span class="new">
<?php
$days=3; //UPをつける日数
$today=date_i18n('U');
$entry=get_the_modified_date('U');
$sa=date('U',($today - $entry))/86400;
if( $days > $sa ){
echo '<img src="';
bloginfo('template_directory');
echo '/img/up.png" width="30" height="15" alt="up" />';
}
?>
<time class="entry-date" datetime="<?php the_modified_time('c') ?>"><?php if ($mtime = get_mtime('Y年m月d日 l')) echo '最終更新日: ', $mtime; ?></time>
</span> 
<?php endif; ?>
<br /> 
<span class="new">
<?php
$days = 3; //Newを表示させたい期間の日数
$today = date_i18n('U');
$entry = get_the_time('U');
$kiji = date('U',($today - $entry)) / 86400 ;
if( $days > $kiji ){
echo '<img src="';
bloginfo('template_directory');
echo '/img/new.png" width="30" height="15" alt="new" />';
}
?>
<?php if (get_the_modified_date('Y/n/j') == get_the_time('Y/n/j')) : ?>
公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time>
<?php elseif (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?>
公開日:<?php the_time('Y年m月d日 l') ?>
<?php endif; ?>
</span>

改良版meta部分の公開日と更新日

解説すると、

公開日と更新日が同じ場合は、公開日を<time>で括り、公開日と更新日が違う場合は<time>タグで括らない。

公開日と更新日が違う場合は、更新日を表示するようにしているので、その更新日は常に<time>タグで括るように。
演算子はこちらを参考に。
>>条件分岐 | PHP Labo

あ、ついでに当初は更新日を公開日より下に表示してたけど逆にしました。

META部分を別ファイルに

ねこもりやのこのMETA部分は意外に長く、おまけにあちこちで使ってるのと、いずれ違う場所でも使うこともあることを踏まえ、別ファイルにしています。

<p class="meta">
<?php if (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?>
<span class="new">
<?php
$days=3; //UPをつける日数
$today=date_i18n('U');
$entry=get_the_modified_date('U');
$sa=date('U',($today - $entry))/86400;
if( $days > $sa ){
echo '<img src="';
bloginfo('template_directory');
echo '/img/up.png" width="30" height="15" alt="up" />';

}
?>
<time class="entry-date" datetime="<?php the_modified_time('c') ?>"><?php if ($mtime = get_mtime('Y年m月d日 l')) echo '最終更新日: ', $mtime; ?></time>
</span> 
<?php endif; ?>
<br /> 
<span class="new">
<?php
$days = 3; //Newを表示させたい期間の日数
$today = date_i18n('U');
$entry = get_the_time('U');
$kiji = date('U',($today - $entry)) / 86400 ;
if( $days > $kiji ){
echo '<img src="';
bloginfo('template_directory');
echo '/img/new.png" width="30" height="15" alt="new" />';

}
?>
<?php if (get_the_modified_date('Y/n/j') == get_the_time('Y/n/j')) : ?>
公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time>
<?php elseif (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?>
公開日:<?php the_time('Y年m月d日 l') ?>
<?php endif; ?>
</span> 
<span><a href="<?php bloginfo('home'); ?>/?monthnum=<?php the_time('m') ?>&amp;day=<?php the_time('d') ?>" class="olddays">〇年前のこの日、何してた?</a></span>				
<br /> 
				<?php if ( count( get_the_category() ) ) : ?>
					<?php printf( __( 'Categories: %2$s' ), 'entry-utility-prep entry-utility-prep-cat-links', get_the_category_list( ', ' ) ); ?>
					|
				<?php endif; ?>
				<?php
					$tags_list = get_the_tag_list( '', ', ' );
					if ( $tags_list ):
				?>
					<?php printf( __( 'Tags: %2$s' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list ); ?>
					|
				<?php endif; ?>
				閲覧数:<?php if ( function_exists ( 'wpp_get_views' ) ) { echo wpp_get_views ( get_the_ID() ); } ?>
					|				
				<?php comments_popup_link( __( 'Leave a comment' ), __( '1 comment', 'ari' ), __( '% comments' ) ); ?>
				<?php edit_post_link( __( 'Edit' ), '| ', '' ); ?></p>

上記がねこもりやのmeta.phpです。

これを、読み込むために表示したい箇所に以下の様に記述します。

<?php get_template_part('meta'); ?>

参考サイト

条件分岐 | PHP Labo
WordPress 記事の見直しと最終更新日の表記。それを Google に伝える
HTML5タグリファレンス
WordPressで最終更新日を表示する方法(予約投稿にも対応) | WP SEOブログ

WordPressで<time>タグを使って最終更新日を自動的に表示する方法|ウェブシュフ

後記

毎度反省することではありますが、ちゃんと自分の頭で考え、やってみることが一番の近道。

盲目的にコピペで乗り切るのは限界があります。

ただ、この改良はまだ実装したばかりで、結果がでるにはしばらく時間が掛かるかもしれません。

最終的な更新日を基準に期間指定した検索結果に反映されるようになれば、昔書いた記事でも更新して手直ししていれば甦らせることができるのでありがたいし、検索する側の身になって考えても、とても良いことだと思うのです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA