これはヤバいぞ…Bloggerのバグ?仕様?

ここのところずっとBloggerのテンプレートを作成している。テンプレートの仕様がわかりにくさMAXすぎて、ものすごい時間が溶けてゆく。

そんな中、偶然ヤバいBloggerの仕様らしきものを見つけてしまった。仕様というより、これはもうバグかも知れない。普段の生活では「ヤバい」という単語を使わないようにして暮らしているのだが、これはPVにも影響するし本当にヤバいやつ。

ページャーについて

少し前置きすることになるのだけれど、はじめはページャーについて書かせてください。

ページャーとは、次の投稿に進んだり戻ったりするあれのことだ。デフォルトだと、「新しい投稿」、「ホーム」、「前の投稿」と表示されるが、表記はテンプレートによって違っているかと思う。例えば矢印とか、何らかのボタンになっていたりするかも知れない。

Bloggerのテンプレートには「nextprev」という名前でページャーが内蔵されている。nextprevは3つのテンプレート変数で機能が構成されている。

  • data:newerPageUrl

  • data:olderPageUrl

  • data:blog.homepageUrl

newerPageUrlは、現在開いているページよりも投稿日時が新しいページへのURLを格納している。olderPageUrlは、その逆。

記事ページを開いているときは新しい記事へのリンクになり、リストページを開いているときは新しいリストへのリンクになる。開いているページタイプによって、よしなに機能してくれる。

blog.homepageUrlは、ブログトップページのURL。

ページャーの動作がおかしいことに気がついた

まずは動画を。このブログには全部で26の投稿があり、順番にナンバリングしてある。リストアイテムには各種変数の値が表示される。「メインページに掲載する投稿数の上限」は5に設定してある。

再現動画

トップページから1ページ戻ったとき、いきなり21番が飛んでいる。そのあとは順調に1番まで戻ることができた。そして今度は1番から26番まで進もうとするが、20番から先に進むことができない。

なんだこれは。

10時間悩んだその先に…

テンプレートのコーディングに問題があるのかとめちゃくちゃ悩んだ。1000回ぐらい検索したと思う。なんでGoogleのサービスなのにググって問題が解決しないのか。怒りに打ち震えた。

でも実はこれ、テンプレートが原因ではないのだ。ズバリ、原因は記事の投稿日時である。

ちょっと見づらいかも知れないが、さっきの動画の「timestampISO8601」という行に着目していただきたい。timestampISO8601は、記事の投稿日時をISO 8601という規格で表現した文字列である。

よく見ると、22~26番の値が同じ(21も同じ)なのだ。いやいや、手動で順番に投稿したのにそれはおかしい。秒の数値が00で揃っていることも変だ。

もうなにこれ。

Bloggerの仕様

同じ投稿日時になってしまったのは2つの要因が重なったから。

①Bloggerの投稿日時は秒が切り捨てられて00になる。②00~59秒の間に複数の投稿をした。

これに加え、Bloggerのリスト表示は、同じ投稿日時のアイテムが複数含まれるケースを想定していない、もしくはあえて対応していないものと思われる。

ちょっとややこしい話

たぶん実際の挙動としてはこういうことになっている。

olderPageUrlは、現在開かれているリストのアイテム中、一番古い投稿日時よりも古い投稿日時を指定しようとする。例えば00:01が一番古いなら00:01&max-results=5となり、投稿日時00:00以前の記事から5つ分がリストに表示される。「未満」的な。さっきの画像の21番は、22番と同じ投稿日時だったから飛ばされたわけだ。

一方、newerPageUrlは処理が全然違う。現在開かれているリストのアイテム中、一番新しいアイテムからmax-resultsの値+1つ分リストを辿り、そのアイテムの投稿日時&max-results=5&reverse-paginate=trueと指定してくる。こちらも未満的に機能するため、同じ投稿日時のアイテムが固まっていると先に進めない。

チェックしましょう

今回のように、手動で1分間に複数の投稿をすることは普通ないだろう。でもスケジュール機能を使って、同じ時間に複数の投稿をすることはあり得るのでは。また、下書きに戻す→再投稿でも投稿日時は上書きされてしまうので気をつけたい。

ある記事がリストに表示されなかったり、ユーザーがリストを進めなくなるというのは、せっかく書いた記事が読んでもらえないことにつながる。特にラベルからリストページに飛ぶユーザーが多いブログでは致命的だと思う。

ちょっと面倒だが、とりあえずチェックした方がいいだろう。確認するには、記事の編集画面に表示される「公開日」を見ればいい。

お知らせ

現在お知らせはありません。

最近の投稿

シェア