ブラウザの広告ブロックを検出してサイトのコンテンツをブロックするJavaScriptプログラム 結城永人 -2024年6月7日 今年の二月からアドセンスの収益化の方式がサイト広告のクリック課金からインプレッション課金に変更された。これにより、広告ブロックのブラウザが多くのサイトで、直接、減益を齎すようになっている。つまり サイト広告を表示しないことはアドセンスを始めとしたインプレッション課金の収益化を妨害していることに他ならない。 理想的にいえば社会はベーシックインカムへ移行するべきだし、そうやって皆の生活費が保障されればサイト広告も本当に必要ではなくなるけれども政治が非常に遅れている。日本は不労生活の実験すらもせず、一体、何をやっているのだろう。いつかサイト広告を付けたい人と消したい人がどちらも何の不利益もなく、共存できるビーバーの湿地帯のような素晴らしい社会が実現されるまではサイトの収益化に纏わる問題を面倒でも避けることはできない。 昨今、僕のブログの減収は酷いもので、最大の原因はGoogleの個人サイト潰しによるアクセス減少以外の何物でもないけど、しかしアドセンスの仕様変更で広告ブロックのブラウザの影響も多少は出て来るに違いないから何とかしなくては行けないと思う。 調べてみたらJavaScriptで広告ブロックを検出する方法が見付かったので、それを使ってコンテンツをブロックする方法も併せて紹介する。 fetch()メソッドでブラウザの広告ブロックを検出することができる ブラウザの広告ブロックはどのようなものか。色んな方法があるかも知れないけれどもサイト広告のURLを読み込まないことによって消していることが多い。アドセンスもそうだけれどもscriptタグのsrc属性の値を無効化されるとサイト広告は出ない。 なのでブラウザがサイト広告のURLを読み込んでいるかどうかをチェックすることによって広告ブロックが行われているかとうかを知ることができる。 JavaScriptではURLに対してfetch()メソッドを使うと読み込みの成否を判別できる。 URLの読み込みで広告ブロックを検出するソースコード JavaScript (async function() { await fetch("サイト広告のURL", { method: "HEAD"}).catch(err => { 広告ブロックへの対応プログラム}); })(); 帯文字のところにサイト広告のURLを入れる。 普通、サイト広告のURLはサイト広告のソースコードのsrc属性の値になっている。 アドセンスの場合 <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-十六桁の数字" crossorigin="anonymous"></script> 太字の部分がアドセンスのサイト広告のURLになる。昔は「https」から「.js」までしかなかった。その後のパラメーターは利用者によって異なる。 ブラウザの広告ブロックを検出するだけならばパラメーターは必要なく、ドメインだけで事足りるので、パラメーターは省略しても構わない。 サイトで広告ブロックの検出のソースコードを使うときはHTML編集でscriptタグに入れて記載する。 HTML <script> 広告ブロックの検出のソースコード </script> 記載する場所はサイトの表示速度などのパフォーマンスを考えれば一番最後のbodyの閉じタグの直前で良いかも知れないし、広告ブロックへの対応プログラムでサイト内容を変更する場合はその後に記載しないと動かない可能性がある。 コンテンツのブロックの遅れが気がかりな場合はサイトのソースコードの上の方に記載すればそれだけ速く動作することになるから調節して良いと思う。 全ての広告ブロックを検出できるかどうかは不明だけど、しかし幾つか試すと抜けるものは一つもない。たった数行の軽めのプログラムで、巷の広告ブロックの大半へ対処できるのは有り難いかぎりだ。 広告のソースコードがサイト内にしかない場合、広告ブロックはそのidやclassのコンテンツを消すらしいけど、様々な方法が可能だし、一般的に検出するにはやはりfetch()メソッドの同じ方法を使うのが良いと思う。つまり自分でサイト広告を表示するためのjsファイルなどを外部サイトに用意してサイト内でそのURLに対してブラウザが読み込んだかどうかをチェックすると検出し易い。 サイト内のサイト広告へのブラウザの広告ブロックをサイト内だけで一般的に検出する方法は見当たらない。 fetch()メソッドでなければライブラリやWebサービスを使う方が確実性が高いだろう。 参考サイトHow to detect AdBlockers using JavaScript [Simple Examples]ブロックを高精度で検出する手法AdBlockなどの広告ブロッカーを使用しているか判定する方法 広告ブロックのブラウザにコンテンツをブロックするにはどうするか 広告ブロックの検出プログラムでサイト広告を表示しないブラウザが分かった場合、コンテンツをブロックして警告文か何かの代わりのものに目立たせる必要が出て来る。 コンテンツをぼかして警告文を表示するサンプル JavaScript document.head.insertAdjacentHTML("beforeend", `<style>#alertb {background-color:#fff;colore:#000;padding:1em}#alertb::backdrop{backdrop-filter:blur(10px)}a, button, input {pointer-events:none}</style>`); document.body.insertAdjacentHTML("beforeend", `<div id="alertb" popover="manual"><p>ブラウザの広告ブロックを解除してから再読み込みして下さい\u3002</p></div>`); alertb.showPopover(); 画面の中央に警告文を出して通常のコンテンツを全てぼかしている。 二つのinsertAdjacentHTML()メソッドがあって警告文のデザインと表示に対応している。 警告文のデザインdocument.head.insertAdjacentHTML("beforeend", `<style>警告文のCSSのソースコード</style>`)警告文の表示document.body.insertAdjacentHTML("beforeend", `警告文のHTMLのソースコード`) 警告文のCSSとHTMLのソースコードを編集してカスタマイズすることができる。 サンプルでは画面の中央に警告文を出すためにHTMLよpopover属性を使ってそれを自動的に開くために三行目にalertb.showPopover()を入れているので、その他の方法を使うならば削除して構わない。 コンテンツの一部を消してその他を出すサンプル JavaScript const blockct = document.querySelector("消したいコンテンツのセレクター"); blockct.style.display = "none"; CCSで{display:none}などの非表示を記載したclassがあれば; const blockct = document.querySelector("消したいコンテンツのセレクター"); blockct.classList.add("CSSで非表示を記載したclass"); 入力項目の消したいコンテンツのセレクターはCSSの指定先になる。 そしてCSSで非表示を記載したclassは名前だけで、セレクターのように名前の前に半角ドットを付ける必要はない。 残りの部分はstyle.displayで非表示のstyleかclassList.add()で非表示のclassを追加する。 僕はブロクのメインコンテンツを消すだけにしてその周りのヘッダーやフッターやサイドバーを出すようにしている。 どんなサイトなのかを少しても分かるようにすることでコンテンツをブロックしつつも好印象を幾らかは残せることを期待したい。 広告ブロックへのコンテンツブロックの留意点 広告ブロックに対してコンテンツをブロックすると二度と来ないという人も現れるだろうし、それによってアクセスダウンを強いられる恐れがあって嫌われるほどに酷い。 どんな訪問者でもサイトを誰かに教えたり、他のサイトにリンクを貼るかも知れないわけで、広告ブロックで訪問自体が収益にならなくても間接的に好影響を与える機会を失うことは減益に繋がる。 何もしない方が良いという可能性も十分にあるので、広告ブロックへのコンテンツブロックはアクセスダウンに必要以上に向かわないことを調べながらやるのが良いと思う。 コメント 新しい投稿 前の投稿
エドガー・アラン・ポーの黒猫の原文と注解 アメリカの英語の小説、 エドガー・アラン・ポーの 黒猫 を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC730点くらいを越える...
ナサニエル・ホーソーンの若いグッドマン・ブラウンの原文と注解 アメリカの英語の小説、 ナサニエル・ホーソーンの 若いグッドマン・ブラウン を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC7...
ナサニエル・ホーソーンの若いグッドマン・ブラウンの日本語訳 十九世紀のアメリカの作家、小説家の ナサニエル・ホーソーン の小説の 若いグッドマン・ブラウン (1835)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
三浦春馬のたぶん本当の死因 三浦春馬は自殺した。その後、 芦名星と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではないと...
アドセンスの個人のアメリカの税務情報/W-8BEN納税フォームの書き方 アドセンスに利用者の税務情報が必要となり、2021年6月1日以降、YouTubeのサイト広告などで収益を得る場合には税務情報を提出しないとアドセンスの支払いからアメリカの源泉所得税が米国内国歳入法の第三章により、控除される。 Google は、YouTube パートナー プロ...
芦名星のたぶん本当の死因 芦名星は自殺した。その前後、 三浦春馬と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではない...
苫米地英人のマインドフルネスに役立つ機能音源 認知科学者の 苫米地英人のコーチング を自己流で始めてさらに良いかも知れないと新しく始めたのが機能音源なんだ。聴くと周波数などの仕組みで脳に影響を与えて様々な効果を発揮するために作られているといわれる。調べるとCDの数十枚のセットで何万円もするので、驚かされるけれども教材として売...
ヘンリー・ローソンの家畜追いの妻の日本語訳 十九から二十世紀のオーストラリアの作家、詩人で小説家の ヘンリー・ローソン の小説の 家畜追いの妻 (1892)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる...
ヘンリー・ローソンの家畜追いの妻の原文と注解 オーストラリアの英語の小説、 ヘンリー・ローソンの 家畜追いの妻 を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC730点...
佐藤義則のヨシボールの握り方や投げ方 佐藤義則の基本情報 佐藤義則/阪急ブレーブス| フジテレビ 1954年9月11日生まれ、北海道奥尻郡奥尻町出身、函館有斗高等学校を進学して1977年に日本大学からドラフト一位で阪急ブレーブス(1989年からオリックスブレーブス、1991年からオリックスブルーウェーブ)に入...
コメント