はじめに
いつものように勉強サイトを開いたら、画面にどーんと「広告ブロックを無効にしてください」の表示。
え、広告ブロックの拡張なんて入れてないんだけど……?
しばらく考えて思い当たりました。そういえば自宅でPi-holeを動かしているんでした。
結論から言うと、原因はPi-holeにありました。
pagead2.googlesyndication.com をexact Allow(例外的に許可)したら表示されなくなりました。この記事では、原因にたどり着くまでの流れと、「これ許可したら広告が出るようになっちゃわない?」という疑問についてまとめます。
環境
- 端末:Chromebook
- DNS:自宅のProxmox上で動かしているPi-hole v6
なぜPi-holeでこの表示が出るのか
Pi-holeは、広告用のドメインへの問い合わせに偽の応答を返して、つながらないようにする仕組みです。ブラウザの拡張ではなく、DNSの段階でブロックしています。
一方、サイト側は「広告用のスクリプトがちゃんと読み込めたか」をチェックしていて、読み込めなければ広告ブロックを使っていると判断します。
つまり、ブラウザに拡張を入れていなくても、ネットワーク側でブロックされていればサイトからは同じように見えるわけです。拡張を切っても表示が消えないのはこれが理由でした。
原因の切り分け
ブラウザ拡張を確認する
まずは念のため、広告ブロック系の拡張が入っていないか確認します。
入っているなら、そのサイトだけ無効にしてリロードしましょう。(※私の場合はそもそも入っていませんでした。)
Pi-holeを一時的に無効化する
次に、Pi-holeの管理画面にある「Disable blocking」で、30秒だけブロックを止めます。その間にサイトをリロードしたところ、表示が消えました。これでPi-holeが原因と確定です。
なお、無効化している間はこのDNSで名前解決してるすべての端末で広告ブロックが止まるので、短い時間で試すのがおすすめです。
ブロックされたドメインを探す
Pi-holeの「Query Log」を開き、検索欄に自分の端末のIPアドレスを入れて絞り込みます。この状態でサイトを開き直すと、ブロックされたドメインが赤く表示されて並びます。
並んでいたのは googlesyndication や doubleclick といったGoogleの広告系ドメイン。
この中で、広告を「呼び出す」役割の pagead2.googlesyndication.com に目をつけました。
exactで許可する
管理画面の「Domains」で pagead2.googlesyndication.com を入力し、完全一致(exact)の許可ドメインとして追加します。
※もしくは「Query Los」から直接許可しても大丈夫です
サイトをリロードすると……表示が消えました!
もし許可しても変わらない場合は、ブラウザ側に名前解決の結果が残っているかもしれません。Chromeで chrome://net-internals/#dns を開き、「Clear host cache」でキャッシュを消してから試してみてください。
あわせて読みたい:ChromebookでDNSを戻しても名前解決できない原因と対処法
なぜexactなのか
正規表現やワイルドカードで googlesyndication.com をまるごと許可すると、広告の中身を配信するドメインまで通してしまいます。開けるのは必要最小限にしたかったので、exactで1つだけ許可しました。
Google AdSense(サイト向けの広告配信サービス)の配信用ドメインです。
広告を表示したいサイトは、ここから adsbygoogle.js というスクリプトを読み込みます。いわば「広告を出すための入口」です。
今回の勉強サイトは、このスクリプトが読み込めたかどうかで広告ブロックを判定していたので、ここだけ許可すればチェックを通れた、というわけですね。
許可したら広告が表示されるようになる?
いちばん気になったのがここです。答えは「ほぼ出ない」でした。
許可したのは広告を呼び出すスクリプトだけで、広告の画像や計測に使われるドメイン(tpc.googlesyndication.com や googleads.g.doubleclick.net など)はブロックされたままです。なので、メッセージは消えても広告枠は空白、ということが多いです。
ただ、ブロックリストに載っていない経路で配信される広告もあるので「絶対に出ない」とまでは言えません。
もう一つ注意したいのが、Pi-holeの許可設定は、何もしなければネットワーク内の全端末に効くことです。家族のスマホでも、このスクリプトは読み込まれるようになります。
特定の端末だけ許可したい場合
Pi-hole v6には「グループ」の機能があり、端末ごとに許可・ブロックを分けられます。端末用のグループを作ってクライアント(IPアドレス)を登録し、許可エントリをそのグループだけに割り当てればOKです。このとき、Defaultグループから外すとブロック自体が効かなくなるので、Defaultには残しておきます。
クライアントはIPアドレスで識別されるので、DHCPで端末のIPを固定しておくのが前提です。私はまだそこまでやっていないので、設定したら追記します。
まとめ
- 拡張を切っても表示が消えないなら、DNS側(Pi-hole)を疑う
- 一時無効化で切り分けて、Query Logで原因のドメインを特定する
pagead2.googlesyndication.comをexactで許可すれば解決- 許可しても広告はほぼ出ないが、全端末に効く点には注意
Pi-holeを入れている人は、同じ表示が出たらまずQuery Logを見てみてください。

コメントを残す