記事下のテキスト広告が記事を破壊する

記事下のテキスト広告が記事を破壊する

FC2ブログのあれこれ
2020/05/16
0
vanillaice (Akira)
vanillaice (Akira)
トラブル対処

FC2ブログの記事の下に挿入される テキスト広告 についてです。『アカマイ広告』と言えば通りが良いかもしれません。
* 実際にはアカマイ社が広告を出しているわけではないのでこの表現は誤りです

「記事を破壊」なんて大げさなことを言っていますが、フツーにブログを書いてるという人が該当することはまずありません。記事内にJavaScriptを記載することがある かつ スピード対策を行っている 方はもしかすると、という感じです。

記事下広告とは

赤く囲った部分がFC2が表示させている広告です。『アカマイ広告』の通り名と実際は違うよ、という説明は以下の記事で。

FC2ブログの【アカマイ】画像表示高速化の仕組み

FC2ブログの【アカマイ】画像表示高速化の仕組み

超いまさらで多くの方はご存知かとは思うのですが。 「アカマイ」って何なの?から始まって仕組みまでを、私のわかる範囲で記そうと思います。 間違ってるところがあればご指摘頂けると助かります ^^;...

この広告は 非表示化が許可されている ので、表示させていない方も多いかと思います。ただし非表示に代償がありますので、その注意点なども上記記事で確認してください。

本件は当該広告非表示の方には起こりません。

広告掲載の仕方が変更になっている

現在の仕様なんですが、なんかコロコロ変わっている気がするな (´・ω・`)
それとも広告種によって違うのかもしれない。head要素内に差し込まれたかと思えば、今確認したところそうはなっていない。調整中なのかどうかも不明なんですが、ともかく以前のような document.write による単純な書き出しでなくなっているのは確かです。

そして async, defer属性 が付いているのでJSの発火はページ内容が表示されたり色々やって、その一番最後、という形です。まぁ要するに表示スピード対策ですよね。ただしページの上部や中程にあるものが「表示は後回し」となると、スクロール位置がズレたり画面がガクガクっと上下したり、という弊害はあります。

で、「広告表示は一番最後」という仕組みではあれど、ブログ管理人がその思惑とは別でスピード対策を行っていることがあります。

例えば「シンタックスハイライター(ソースコードを見易くする)」「画像拡大スクリプト(画面を遷移させずその場で画像を拡大)」など。これらはページのローディングと同時に動作させる必要はありませんし、全ての記事に適用する必要もありませんよね。「使いたい記事でだけ使う」を実現しようと思えばそのscriptは 記事内に書く ことになります。

そして当然の流れとして、ページスピードの害を及ぼさないようasync属性をつけたり、あるいはユーザーによる任意スクロールが発生するまで発火させない、という処理を行うことになります。言ってみれば「スキルを要する書き方」ということです。

それらを鑑みるとJSはファイル化してあることが望ましいんですね。async属性はインラインJSには効果がありませんし。

ユーザーによる任意掲載スクリプトが勝手に変更される

例えば以下のような内容。スクロールが始まってからファイル情報を取得しに行く、というものです。

<script>
〜省略〜
window.addEventListener('scroll',t,!1)}catchScript('https://xxx.js');
</script>

これはraw html(生のhtml, 直打ちされているhtml)です。この内容がテキスト広告のJSに巻き込まれ以下のような形に変わってしまいます。

<script>
〜省略〜
window.addEventListener("scroll",t,!1)}catchScript('<a href="https://xxx.js" target="_blank">https://xxx.js</a>');</script>

勝手にa要素に変えられる(笑)
当然この内容では html構文エラー + JS構文エラー ですからJSは正しく動作しません。

で、構文エラーについて一応説明しますと、W3C validatorなどの検証ツールはraw htmlで行われます。つまり JS実行前 の状態での検証です。ところがブラウザというのはJSがあればそれらを実際に実行しなければいけませんので、実行前の状態(ただの文字列の状態)をどうこう、ということはできないんですね。それをやるのはvalidatorです。ブラウザはあくまで全ての内容を総合的に解釈し、最終的にどうなるかが表示結果に繋がります。

つまりJSによるhtml変更というのはvalidatorでは検証できません。ですから原因を見つけるのが非常に困難です。JSの影響を見るためにはブラウザの 要素検証 を行う必要があります。

まとめ

不具合対象範囲(該当範囲)がとても狭いと思いますので、今すぐどうこうというのは無いかもしれませんね。上級者さんで記事内で色々やってる、という方は対象になると思います(笑)

FC2的には公式に準備している様々な機能やエディターのツール内容で吐き出される内容など、総括的にシステムを組んでいるはずです。記事内でJSを利用する、というのは完全にユーザーの自己責任ですし、こういった特殊な某を行っている人間をサポートするなんてのは至難の業。つまりこれはユーザー側でなんとかする性質と考えます。すごく面倒で嫌だけど(笑)

というわけで本件は運営に報告しませんので、自分でなんとかする というのをおすすめします。テキスト下広告を非表示にする だけで解消できるわけですし。

なんかたぶん「普段使わないJSファイルは〜記事内でlazyで〜」とかやり方紹介した気がするんですよね。でも自分のしたことが思い出せない orz

もし書いてたとして、それを実行されており、かつ、広告表示状態という方はゴリゴリに不具合が出ているわけでして ^^;
私自身が広告非表示なので気づくのが遅れてしまいました。いつからこんなことになっているのか。とはいえ本件不具合のご相談が届かないのを見るとやってる人は居ない、と思って良いのだろうか(笑)
いやもちろん広告非表示で該当してない、という場合もあります。

最後にアカマイCDNの威力がどのぐらいあるか、なんですが、「無いことは無いがめちゃくちゃ有るとも言えない」という感じでかなり微妙なんですね。現在のFC2はHTTP/2通信可能ですし、サーバー環境も悪くありませんので、CDN利用の有無による格差というのは小さくなっているように思います。

テキスト下広告については代償があるのでFC2検索バーと違い迂闊に「非表示にしましょう」と言えない事情がありましたが、今言えるとしたら 非表示おすすめ! という感じです(笑)

Related post

Comments  0

コメントに関する注意事項
  • テンプレートに関するご質問は各テンプレート専用記事でのみ受付致します。また、よくある質問をまとめているページも事前にご参照ください。
  • 専門的なご質問の場合、記事内容と明らかに関連の無い内容はお控えください(雑談の場合はその限りではありません)
  • 第三者が不快と感じる内容や論調でのコメントはお控えください(性的,高圧的,暴力的など)