2017-11-28

Blogger 「自分のビューを追跡しない」が機能しない(保存されない)原因と対策

このブログに自分がアクセスしたときのページビューをカウントしますか?

Blogger の管理画面から 統計 -> 概要 ->自分のページビューの追跡を管理をクリックし、このブログの自分のビューを追跡しないをチェックすると自分がアクセスしたときのページビューをカウントから除外することができる「はず」なのですが、カウントされることがあります。また、チェックはブラウザを起動するたびに外れてしまいます。

原因

「このブログの自分のビューを追跡しない」をチェックすると、以下のJavaScript が動き、Cookie を設定します。

var COOKIE_NAME = '_ns';
var COOKIE_SET_VALUE = '2';
document.cookie = COOKIE_NAME + '=' + COOKIE_SET_VALUE;

しかし、以下の点で不完全なようです。

・domain 属性

domain を指定していませんので、今接続しているサブドメイン blogname.blogspot.com が設定されます。日本からの接続は blogname.blogspot.jp にリダイレクトされますのでドメイン違いでクッキーが送信されずビューがカウントされます。(国別リダイレクトは廃止されました。Official Blogger Blog: It’s spring cleaning time for Blogger

注: domain 属性は、あるドメインに属するサブドメイン全体を Cookie の対象にする場合に指定するものですので、今回のように特定のサブドメインを対象にする場合は指定すべきではありません。また、現在接続しているドメイン以外を指定することはできません。

・path 属性

path を指定していませんので、path には現在のページのパス /b がセットされてしまいます。これだと原則として *blogname*.blogspot.jp/b/ blogname.blogspot.com/b/以外はクッキーが送信されません。

・expires 属性

expires を指定していませんので、ブラウザが閉じるとクッキーは削除されます。

対策

以上の問題を修正したスクリプトは以下のようになります。

document.cookie = "_ns=2; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
  • expires を無期限にすることはできませんので、2038年問題の上限日時(2038年1月19日3時14分7秒)を指定しています。
    max-age 属性は IE11 が非対応とのことなので今回使用しませんでした。

このスクリプトを、設定したい 自分の *blogname*.blogspot.jp blogname.blogspot.comにアクセスしたうえで、 Chrome なら F12 キーを押してデベロッパー ツール を起動して Console に貼り付けて実行すればOKです。

Chrome デベロッパー ツール

デベロッパー ツールでは、Application -> Cookies で登録されているクッキーの内容を直接編集することもできます。

また、ブログ管理画面(blogname.blogspot.com)でも、スクリプトを実行するとブラウザを終了しても このブログの自分のビューを追跡しない のチェックが外れなくなります。


expires の日付を分かりやすくしたバージョンも置いておきます。

var d = new Date("2038-01-19"); document.cookie = "_ns=2; expires=" + d.toGMTString() + "; path=/";

"2038-01-19" の箇所をお好みで(”2038-01-19”を超えない範囲で)修正してください。
過去の日付にすれば、Cookie を削除できます。

スマホでも設定したい。

スマホなどデベロッパー ツールが使えない場合は、設定したいページにアクセスしたうえで、アドレスバーに javascript: と入力した後に、上のスクリプトを貼付けすることで実行できます。

アドレスバーに javascript:document.cookie; (最後のセミコロンはなくてもたぶん大丈夫)と入力することで、そのページの Cookie が表示されます。_ns=2 が表示されれば、設定されています。

3 comments: