Google AdSenseとHTML妥当性

CSSコミュニティスレの693(と、以前に552でも)で、StrictなHTMLでGoogle AdSenseを使うことの問題が指摘されており、自分も以前から疑問に思っていた点だったので言及してみます。

Google AdSenseでは、スクリプトにより以下のようなHTMLソースを挿入していることで、広告表示を実現しています(...は省略部分)。

<iframe
 name="google_ads_frame"
 src="..."
 marginwidth="0"
 marginheight="0"
 vspace="0"
 hspace="0"
 allowtransparency="true"
 frameborder="0"
 height="..."
 scrolling="no"
 width="...">&lt;img&gt;</iframe>

一方、HTML 4.01仕様には以下の記述があります。

HTML文書は、どのSCRIPT要素の処理前も処理後も、HTML DTDに適合するよう制約される。

両者を考え合わせると、以下のことが言えます。

  1. スクリプト適用後にiframe要素が挿入されるため、HTML 4.01 Strict、XHTML 1.0 Strict、XHTML 1.1としては妥当でない文書となる。
  2. また、そのiframe要素では仕様にない属性(vspace, hspace, allowtransparency)が使われているため、HTML 4.01 Transitional、XHTML 1.0 Transitionalでも妥当でない文書となる。

要は、Google AdSenseを使うと妥当なHTML文書とはならない、ということになります。

* * *

「CSSコミュニティ 19th」の698より。

698 :名無し草 :05/01/03 03:10:52
>>695
XML 的には然るべき所をいじればヨサゲ

然るべきところをいじるということで言えば、属性を幾つか除いたりiframe要素をobject要素に置き換えたりすればよいので、そのあたりはXML(XHTML)でもHTMLでも同じかと思うのですが、XML 的ということで言うと、Google AdSenseでは document.write() を使って要素を挿入しているので、そもそもXML(text/xmlとかapplication/xmlとかapplication/xhtml+xmlとか)ではAdSenseが使えないという問題もあったりします。

Google AdSenseを表示するスクリプト(show_ads.js)は固定のようなので、対処するのであれば、これをダウンロードして適当に改造したものを使うしかなさそうです。それをGoogleが認めてくれるとよいのですが。

「show_ads.jsとは別に、iframeをobjectに変換するようなスクリプトを自前で用意する」という案も浮かびましたが、仕様書の「どのSCRIPT要素の処理前も処理後も」(原文: both before and after processing any SCRIPT elements)という部分を考えると、show_ads.jsの処理が終了した時点で文書が妥当とならない時点が存在することになるので、これも適切な対処とは言えない気がします(そこまで仕様にこだわるのかという意見もありましょうが、それはまた別の話ということで)。