Google AdSense 自動広告の画面上部から出てくる広告がページ全体を押し下げる件

Google AdSense が、ページを解析して自動的に最適な広告を表示する「自動広告」を始めた。

この中で「テキスト広告とディスプレイ広告」を有効にしてスマホでページを見ると、ページ上部からビッグバナーがスワイプして出てくるようになる。

コレがちょっと厄介で、ページ全体を押し下げるように広告が挿入され、ページの本来のヘッダの上部に、バナー分の余白が開いてしまうのだ。この気持ち悪さが凄いので、バナー広告がヘッダに被ってしまってもいいので、ページ上部に余白が開かないようにしたい

よくよく見ると、body 要素を起点に position: absolute で配置した子要素が、このバナー広告が押し下げた空白の領域に留まっていることが分かった。

ということは、ページ全体を囲むラッパー要素を用意し、コイツを絶対配置にしてしまえば良さそうだ。

<body>
  <div id="wrapper">
    <!-- 全てのコンテンツをこの中に入れる -->
  </div>
</body>
/* body 要素を起点に画面全体に配置する */
#wrapper {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
}

コレで、ページ全体の要素を絶対配置 = フロー状態にできたので、画面上部にバナーが表示されてもコンテンツが押し下げられなくなった。

…というか、このような修正を行ったあと、画面上部からバナー広告が表示されることがなくなった。代わりに画面下部からスワイプ表示されるようなバリエーションのみ。どうも HTML コンテンツの表示のされ方も細かく見ているみたい。

いずれにしても、ページ全体を position: absolute する気持ち悪さは残るし、他に不具合が出そうなので、既存のスタイル・HTML をそのままに適用して良いかは、それぞれの環境で検証してほしい。

2018-03-28 追記 : この記事で紹介したやり方だと、「アンカー広告」との相性が悪いことが分かった。より良い対策は以下の記事で紹介しているので、コチラを参照してほしい。