記事の【日付】と検索結果【日付表示】との関連

先日FC2ブログにもようやく 記事の更新日時 を表示する変数が追加されました。

【ブログ】記事の最終更新日時を表示できるようになりました。

【ブログ】記事の最終更新日時を表示できるようになりました。

平素は、FC2(fc2.com)をご利用いただき、誠にありがとうございます。FC2ブログ(blog.fc2.com)にて記事の最終更新日時を表示できるようになりました!...

記事の「日付」については

  • 閲覧者へ向けて更新があったかどうかをわかりやすくする
  • 検索結果で日付が表示されるようにする

この二つは 分けて考えた方が良い と思います。閲覧者は人間ですが、検索botはロボットです
今回の「更新日時表示」の実装で「更新日時がちゃんと検索結果に載るんだー ヽ(`▽´)/」と思った方は、それほど単純な話しではありません と戒める記事 (´・ω・`)

検索botから見れば人間の言語はただの文字列

htmlが一体何で、何のためにあるのか、というところへ結びつく事柄でもあります。日本語や英語、はたまたフランス語等、あらゆる人間の言語はコンピュータにとってはただの文字や記号の羅列にすぎません。コンピュータが必要とするのは コンピュータが理解できる「意味」「定義」であり、それがhtmlです

例えばこんな文章があるとします。

うちの娘が2歳になりました。色白で可愛らしい子です。

こうあった場合、これを読んだ人間は最低でも

  • 執筆者に子どもがいる
  • その子どもは女の子である
  • 子どもは2歳である
  • 子どもは色が白い
  • 子どもは可愛い

などの情報を瞬時に理解します。ですがコンピュータにとっては、執筆者の家族構成がどうであるとか、子どもがどうであるとか、そういったことは理解しません。ただ単純に「文字が記されている」と受け取るだけです。

では仮に文章が以下のような形で記されていたとします。

<strong>うちの娘が2歳になりました。色白で可愛らしい子です。</strong>

htmlタグのstrongで囲まれています。このhtmlタグは記事内で閲覧者である人間が目にすることはありません。ですがコンピュータは この文字列がページ内で非常に重要な意味を持っている ということを理解します。どこで理解するかというと、strong というhtmlタグの定義によってです。strongというのは「強意」ですから、もしかしたらコンピュータであるところの 検索botはこの文字列をキーワード検索に反映させてくれるかもしれません。ただあくまでもコンピュータは「すっごく重要な内容」というのがわかっているだけで、やはり執筆者がどうこう子どもどうこうといったことは全く意に介しません。理解しません。

えと。ここでいまだに
strognタグ = 太字
と思っている方は誤認識を修正しましょう。
strongタグは強意であって太字にするためのものではありません
文字が太くなくともstrongが用いられていればそれは「強意・強調」です。
見た目など関係ありません
文字を太くするためだけに全文をstrongで囲っている場合、検索botにとってそれは スパムでしかありません。それを何年も続けれていて度が過ぎればGoogleからペナルティ喰らってしまうかもしれませんよ (´・ω・`)

で、日付に関してもそれは同じです。日付であることを伝えるにはそれが日付だと定義するhtmlタグを用いる必要があります。でなければただの文字列です。

Googleの日付アルゴリズムとhtml5のtime要素

html5には <time> というhtmlタグがあります。これはhtml5の新要素ですので html4を含むそれ以下のバージョンでは解釈されません

前章で「日付もbotにとってはただの文字列」と書きましたが、実際にはGoogle botには 経験値 というのがあります。もちろんbotの経験値というよりもbotを整備する人間の経験値と言い換えても良いかもしれませんが。

検索結果に日付が表示されるようになったのはここ数年の動きです。たぶん2〜3年でしょうか。それまでは検索結果には日付がなくて当たり前でした。

検索結果日付表示

日付の付いているのは「ブログの記事」でドラマの感想が記されているページでした。日付の付いていないページは、ひとつは「トップページ」もうひとつは「ファンによるWiki的ページ」でした。つまり両者は日付を特に必要としないページです。いわゆる 固定ページ というやつです。時系列を尊重する必要のないページ。FC2ブログも導入してくださいよぅ (´・ω・`)
それは余談ですが、ともかくブログ的なページに関しては その情報が旬なのかそれとも古いものなのか がとても重要ですので、Googleは積極的に日付を拾おうとしてくれてるんですね。

Googleの日付に対する経験値というのは、例えば
xx/yy/zz
こんな文字列があったらば、それは恐らく日付であろう、だとか。
英語であれば
xx yy, zzzz
これは日付であろう、とか。そういう見抜くアルゴリズムを持っていると思います。「たぶん」ですよ。Googleがアルゴリズム公開しない限り内部でどう処理しているかなど私達は想像するしかありません。

ですがhtml5については これは日付です と明示するtime要素が使えるんですね。Googleのアルゴリズムに頼らずとも日付であることを明示できるんです。ですからbotは即座に「日付発見 ╭( ・ㅂ・)و」となります。botもリソースの無駄遣いを省け、発信者は正しい日付を表示してもらえるwin-winの関係ですね。

Googleのアルゴリズムも完璧ではありませんので、「検索結果の日付が投稿日と違う (;ωq`) なんの数字かわからない (;ωq`)」なんてこともザラにありますが、html5のtime要素ならば的確に伝えることができます。time要素の使い方についてはグレゴリオ暦のルールやらなんやら色々ありますので今回は割愛。とりま自分のテンプレがhtml5なのかどうか、そしてtime要素があるかどうかぐらいは確認できるかと思います。

Google botに正しい日付を伝えたければtime要素を使うべし

くれぐれもhtml4テンプレの方とかはダメですよ (´・ω・`)
ちゅーかもうなんぼなんでもhtm5にしなはれや ( ̄∀ ̄;)

記事投稿日と記事更新日の区別

time要素が使えるにしても、現在のところ 投稿日と更新日を明示するhtmlタグはありません。もしかしたら今後の草案で出てくることもあるかと思いますが、今のところはナシ。

time要素もルールがあります。pubtime という属性がhtml5草案時にはありましたが、勧告後の現在では 削除 されています。つまり日の目を見ぬまま 廃止。pubdate = publication date 投稿日
そのものズバリ、記事あるいはページの発行日を示す属性です。これを利用する場合には、一つの記事(article要素)内で複数回使えないという縛りがありましたが、廃止ですので詳細は省きます。

ここで問題となってくるのが

  • 投稿日をtimeでマークアップするのか
  • 投稿日ではなく更新日をtimeでマークアップするのか
  • 投稿日・更新日双方をtimeでマークアップするのか

そして
各々の場合の 検索結果への反映はどうなるのか

記事投稿日と記事更新日いずれもtime要素でマークアップされた場合

Googleがどちらを表記してくれるかですよね。ちょっとサンプル取れませんでしたが、日付が2つ掲載されているページも稀にあるんですよ。たぶんですが、Googleが取得した日付以外に記事内にもtimeマークアップの日付があり、それが横並びになっただけ、というだけの気もします(笑)
ここが未知ですよねぇ (´・ω・`)

wordpressではphpを利用して「更新があった時はtime要素に更新日を渡す(投稿日から書き換える)」ということができます。time要素を更新日の為に使うというパターン。投稿日をdivに格下げ(?)します。でもそれはFC2ではできない (´・ω・`)

今できることは… どうだろう。私の最終的な判断ですが、投稿日・更新日双方をtime要素としてマークアップしておこうかと。現時点で「更新があったかなかったか」を区別する変数がありませんので、更新がおこなれていない場合には投稿日が表記される ことになってしまいますが。

例) 3月3日投稿、5月5日更新

投稿日 3/3
更新日 5/5

例2) 3月3日投稿、更新なし

投稿日 3/3 更新日 3/3

うーん。システム上致し方あるまい。

構造化データマークアップへの期待

htmlタグに「投稿日」「更新日」を明示するものはありませんが、構造化マークアップでは指定ができます

itemprop="datePublished" --- 投稿日 itemprop="dateModified" --- 更新日

こうしてちゃんと分かれてます。ただし現時点で構造化マークアップの日付に関しては検索結果に考慮されていないということをGoogleのスタッフが明言しています。なので今後に期待、というところでしょうかね。Googleも意味の無いことはさせませんし推奨もしません。構造化を推奨するということは、いずれ…。

まとめ

閲覧者に対してわかりやすいように、という観点と、検索結果に表示されて流入云々を、という観点では対策や考え方が異なります。結局今のところ検索結果の日付表示をコントロールする術はない ということになりますが、少なくとも知っていれば運営ブログに押しかけて「検索に反映されないじゃないかこのやろう!」などと書き込む愚行は避けられるかと思います(笑)

追記あんどオマケ

いっこ忘れてた (´・ω・`) 新規実装独自変数に <%topentry_modified_month:short> というのがあります。月の略式英語表記 です。

Jan. Feb. Mar. Apr. May June July Aug. Sept. Nov. Dec.

グラマー上正しい表記を遵守しているかどうかはわかりません(まだ試してない)が、通常なら上記の通り。で、記事の投稿日の「月」を英語表記する際、これまでは変数がありませんでしたので、クラス名を用いた裏技っぽいアレだったり、JSを用いた書き換えだったりをしていましたが、<%topentry_month:short> も追加されていますので今後は通常のマークアップでちゃんと表記できるようになりました。これも歓迎ですね (´・ω・`)
ただし略式のみ。

hige
2017/09/14 (Thu) 18:02

なるほど

判りやすい説明ありがとうございます。
これで心の準備が出来ました。

で、矢継ぎ早にあたらしいインフォメーションが!・・・・・
robots.txt が編集できるようになりました。
って、どういうこと?

優しいAkira氏の解説を、待ってまーす。

と、他力本願でした。

Akira
2017/09/15 (Fri) 08:03

To higeさん

私も今見てびっくりしましたー。
robots.txtですか。
なるべくわかりやすく説明できると良いんだけど ^^;

コメントに関する注意事項
  • テンプレートに関するご質問は各テンプレート専用記事でのみ受付致します。また、よくある質問をまとめているページも事前にご参照ください。
  • 専門的なご質問の場合、記事内容と明らかに関連の無い内容はお控えください(雑談の場合はその限りではありません)
  • 第三者が不快と感じる内容や論調でのコメントはお控えください(性的,高圧的,暴力的など)