「ディスパッチベース」のロゴ画像

検索エンジンに記事の公開日を正しく認識してもらう方法

はじめに

2020年に入ってからGoogle検索エンジン側で、公開日が優先されたり、更新日が優先されたりと、2~3ヶ月に1回程度、仕様に変動がある事を確認できています。

たとえば私の場合は、公開日と更新日の両方を明記し、公開日を<time>タグで囲むという運用をしていますが、 必ずしも公開日が日付スニペットに表示されるわけではなく、更新日が日付スニペットに表示されてしまう事があります。

これに関してはどう足掻いてもGoogle社の仕様変更に左右されますので、確実に日付スニペットに指定したい日付がある場合は、 <time>タグで囲った日付以外の「日付を連想させる文字列」をすべてコメントアウトする(非表示にする)しかありません。

以下、記事の本文です。2020年6月13日に追記情報を整理しました。

記事の公開日を正しく伝える重要性

公開日を重視するか更新日を重視するかは記事の内容によっても異なりますが いつ誰が最初に公開したのかという情報は、著作権や時事の把握において、とても重要です。

Google検索エンジンだけでなく、Bingでも、ごく一部のサイトは公開日スニペットが表示されていますが現状Bingにはこれといった法則性はありません。

重要事項1:HTTPヘッダはまったく関係ない[ Google, Bing共通 ]

動的なHTML(PHPやCGI等)での出力であってもLast-ModifiedのHTTPヘッダ有無とは関係なしに<time>タグが優先されるのでページの更新日を検索エンジンに知らせたいがためだけにLast-Modifiedヘッダ等を出力するのは避けた方が良いです。

もちろん、ブラウザキャッシュをコントロールする目的でLast-Modifiedヘッダを使うのであれば問題ありません。あくまでも検索エンジンが認識してくれる記事更新日にはHTTPヘッダは影響しないという意味です。

重要事項2:初インデックスされた日以前を公開日とすることはできない

[ Googleのみ ] Bingは検証材料が少ないので不明

2019年11月14日時点のGoogle検索エンジンでは<time>タグで1番最初に出てきたものが記事の更新日として扱われるという結果になりましたが、検索エンジンに初めてインデックスされた日以前を作成日として認識してもらう事はできませんでした。

おそらく改竄や不正の防止策だと思われます。たとえ作成日が本当だとしても公表していなければ証明する術が無いので妥当ですね。 逆に未来の日時を<time>に入れた場合は公開日として認識されず、その未来の日時が過ぎた後に公開日として認識されました。

正直、この記事を公開するにあたり、技術が悪用されてしまう可能性も懸念していたので個人的にはこの仕様に賛成です。

◎公開日が正しく認識される方法  [ 2019年11月時点 Googleのみ ]

HTML内に<time>タグを1つだけ記述する(2019年11月13日 実証済み)

ページ更新日:<time datetime="2019-11-13">2019/11/13</time>

注) <time>タグのdatetime属性が重要という意味です。
2020年に入ってから公開日と更新日のどちらが優先されるかハッキリしない仕様の変動がありますので、 確実に指定の日付を検索エンジンに認識してもらうためには、 <time>タグで囲った日付以外の「日付を連想させる文字列」を削除しなければなりません。

日付形式と時差について

<time>タグ内の文字列はyyyy年n月j日という日本語でも問題ありませんが、海外のITサービスだと時差の影響で日にちが1日ずれることがあります。 日本と米国で「公開日」を合わせたい場合は公開日時を日本時間の18時~23時の間でセットすると良いです。 例:<time datetime="2019-11-15T18:00:00+09:00">
協定世界時のUTCで管理しても問題はないのですが、UTCだと日本では1日前の日付を記入することになるので日本時間のJSTを表す+09:00で管理した方が楽です。 日本の17時にロサンゼルスが午前0時になり日付が合うのですが、サーバーの時計が狂うことも想定して1時間余裕をもたせた18時をお勧めしています。公開日に対して厳密でなくていいのであれば時刻表記なしのyyyy-mm-ddで良いです。

301転送をする場合 [ 2020年4月28日時点 Googleのみ ]

サイトの引っ越しは行っていないので同一ドメイン内でしか検証できておりませんが、URIのpathにスペルミスがあったので、301転送をかけてみたところ、 301転送をかければ新しいURIでもページの公開日を引き継ぐことができる事を確認しました。

301転送で公開日を引き継ぐために必要な手順

  1. 新しいURIを用意する(公開日の<time>タグをコピーするのを忘れずに)
  2. sitemap.xmlを修正する
  3. 古いURIから新しいURIに301リダイレクトをかける
  4. Google Search Consoleで古いURLに対して再クロール依頼をかける
  5. Google検索結果内の対象記事のURLが新しいURLで認識されるまで待つ(5日~2週間程度)
  6. Google検索結果内の対象記事のURLが新しいURLに変わった事を確認してからサイト内の古いURLリンクを新しいURLに貼り替える

順番を間違えると正しく公開日が引き継げない可能性が高くなるので、ご注意ください。特に手順4のGoogle Search Consoleで再クロール依頼をかけるのは古いページに対してです。

301転送の記事である事が認識される前に新しいURLがインデックス登録されてしまうと重複ページとして扱われ、冒頭で説明した「重要事項2: 初インデックスされた日以前を公開日とすることはできない」というルールから、 新しいURLの公開日がGoogleインデックスの登録日または記事の最新更新日になってしまう可能性が高いです。(そうなると、いつ公開した記事なのかを証明することができなくなるので、 著作日時を明示しておくべき記事の場合は特に注意が必要です)


以下は2020年4月以前に実証確認した、私的には推奨できない記事の公開日・更新日が認識された方法と認識されなかった方法です。 <time>タグ以外は無意味に近い、という事の証明として公開します。ご参考までに。

△ 構造化データはGoogle社の公式情報だが<time>が優先される

構造化データ JSON-LD (2019年11月15日 実証済み)

詳細については https://developers.google.com/search/docs/data-types/article#non-amp をご確認ください。 非AMPでよければプロパティが少なくて済みます。 AMP対応にしたい場合は必須プロパティが多くなります。今後どうなるかは不明ですが2019年11月15日時点では正しく認識されないという結果でした。

published date の JSON-LD 構造化データ例

△個人的に非推奨ですが自動で認識されていた例  [ Googleのみ ]

HTMLタグ内に、日付を連想させる yyyy/mm/dd や yyyy-mm-dd 表記があった場合

即時での反映はされませんがGoogleの場合はインデックスに登録されてから、ある程度日数が経ったページで反映されていたことが確認できています。

sitemapで<lastmod>を明示していても、HTML内の「更新日」等の近くにある直近のyyyy/mm/dd形式が優先されていました。

詳しい仕様は不明ですが<a>や<small>等のHTMLタグに日付関連の文字列だけが入っていると記事更新日として認識されるようでした。

○日本語サイトで認識されていたもの

<small>ページ更新日:2017/10/10</small>

×日本語サイトで認識されなかったもの

<h3>更新履歴 <small>(2008/03/18)</small></h3>

日付を括弧で括っているからか、「履歴」という文言が「日」として連想できないからか、上記の記述では認識されていませんでした。

○英語サイトで認識されていたもの

<small>Page updated at 2017-06-23 14:17 UTC</small>
<div>Last update: 2019-10-10</div>

×英語サイトで認識されなかったもの

<span title="2014-07-23 09:23:34Z">Jul 23 '14 at 9:23</span>

<span>のタイトル属性に日付が入っていますが、HTMLタグ内の表記がyyyy-mm-dd形式ではない(記事の投稿日時としてatは日付の前につくべき)ので、認識されていませんでした。

○複数ある場合(昇順)

<div>
  <h2>#1 <a href="#1">2019-10-27 23:42:08</a></h2>
  <p>トピック1</p><p>内容1</p>
</div>

<div>
  <h2>#2 <a href="#2">2019-10-28 22:51:19</a></h2>
  <p>返信2</p><p>内容2</p>
</div>

1番上の日付が使われ、古い日付が反映されていました。

○複数ある場合(降順)

<div>
   <p>Comment by A on
   <time datetime="2019-11-12T00:35:39-05:00">
   November 12, 2019</time></p>
   <p>Commnet A</p>
</div>

<div>
   <p>Comment by B on
   <time datetime="2019-10-29T06:04:55-04:00">
   October 29, 2019</time></p>
   <p>Commnet B</p>
</div>

1番上の日付が使われ、直近の日付が反映されていました。

× sitemapの<lastmod>は更新日スニペットには影響しない

2019年11月16日 実証済み  [ Google, Bing共通 ]
<url>
    <loc>http://www.dispatch-base.com/</loc>
    <!-- 2007年6月の時点でlastmodを設定していたが
           2019年11月までの12年間、
        ↓ 公開日スニペットに使われることはなかった -->
    <lastmod>2007-06-10T11:54:34+00:00</lastmod>
</url>

試しに2019年11月14日に<lastmod>を最新の日時にして、Google Search Consoleで再クロール依頼をかけた直後の生ログを見てみましたが、手動でのクロールリクエスト時はsitemapを読み込みに来なかったので、sitemapに細かい情報を付加してもあまり意味がないと感じています。

× <meta property>は認識されない  [ Google, Bing共通 ]

HTML内のmetaタグ (2019年11月12日 実証済み)

<meta property="article:published_time" content="2019-11-12T04:47:58+0000">

Open Graph Protocol というSNS時代に一時 流行ったタグですが、2019年11月現在のGoogleとBingでは認識されませんでした。

そもそも<meta property="article:published_time">自体が認識されない(もしくは無視されている)という結果です。

▲ページ先頭に戻る

Search Engine Optimization

Googleでの更新日の見え方

検索エンジンに記事の公開日・更新日を正しく認識してもらう方法を紹介しています。注:2019年11月~2020年6月までの調査結果です。

公式な仕様ではないので、参考程度にご覧ください。

-
記事公開日:
記事更新日:2020年06月13日