RailsでGoogle AdsenseのJavaScriptがエラーを吐く (adsbygoogle.push() error: All ins elements in the DOM with class=adsbygoogle already have ads in them.)

Railsで作っているプロジェクトにGoogle Adsenseのタグを埋め込んでいました. 新しく作ったリンクへページ遷移をすると,次のエラーが出ました.

"adsbygoogle.push() error: All ins elements in the DOM with class=adsbygoogle already have ads in them."

f:id:shiba6v:20171112000718p:plain

adsbygoogle.push()で,新しい広告を<ins>に追加しようとしたけど,もう既に広告あるじゃん!っていう意味です.

Railsの機能のturbolinksが邪魔しているだろうなと思ったので,次のサイトを参考にturbolinksをオフにしたらエラーが出なくなりました.

qiita.com

turbolinksをオフにしてページの読み込みが遅くなるのが嫌だったので,turbolinksをオンに戻してどうにかできないか探しました.

次の記事によると,<script><body>内に書くとturbolinksとは共存しないらしいことが分かりました.

qiita.com

また,Google Adsense turbolinksで調べてたら,turbolinksの対応方法が出てきました.

Turbolinks Compatibility with Google AdSense

う〜んわからん・・・ でもturbolinks切りたくない・・・

もしかして,既に広告があるのが悪いなら,リロードの度に消せば良い・・・?

改変前Google Adsenseコード

    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <ins class="adsbygoogle"
         style="display:block"
         data-ad-client="ca-pub-xxxxxxxxxxxx"
         data-ad-slot="xxxxxxxxxxx"
         data-ad-format="auto"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

改変後Google Adsenseコード

    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <ins class="adsbygoogle"
         style="display:block"
         data-ad-client="ca-pub-xxxxxxxxxxxx"
         data-ad-slot="xxxxxxxxxxx"
         data-ad-format="auto"></ins>
    <script>
    var element = document.getElementsByClassName("adsbygoogle")[0];
    while (element.firstChild) element.removeChild(element.firstChild);
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

<ins>の子要素をエラーの原因になった(adsbygoogle = window.adsbygoogle || []).push({});の前に毎回消すようにしました. やってみると,エラーは出たままですが(謎)リロードの度に広告が表示されるようになりました. よかった〜!