2011/04/19

AmazonおまかせリンクWidgetでサムネイルが表示されない理由

2012/09/22追記: 
本件解消していることを確認しました。詳細は、AmazonおまかせリンクWidgetでサムネイルが表示されるようになった件を御覧ください。

Amazonアソシエイトは、Amazonの提供するアフィリエイトプログラムです。このブログでも参加しており、恐らくこの記事の右横にAmazon広告が表示されていると思います。

Amazonアソシエイトでは数多くのWidgetが用意されており、その多彩さはAmazonアソシエイトの特徴のひとつと言えるでしょう。何れも簡単なJavaScriptコードをコピーペーストするだけで、広告を表示させることが出来ます。

このWidget群の一つに「Amazonおまかせリンク」があります。「Webサイトの内容に沿った商品を自動的に表示する」ことが特徴で、このブログで使用しているのも、このWidgetです。

「Amazonおまかせリンク」Widgetは大変便利なのですが、残念ながらChromeでアクセスすると、次の画像のように、広告のサムネイルが表示されません。


Chrome以外のブラウザ、例えば、Safari、Firefox、Operaなどでアクセスした場合には、サムネイルが表示されます。


この問題は、AmazonとChromeとの両者に原因があり、その複合によって生じています。

「Amazonおまかせリンク」Widgetは1行のscriptタグから始まります。このスクリプトは他のスクリプを幾つか呼び出し、最終的にiframeを作成した後、上記で示したような広告HTMLを読み込みます。

この広告HTMLへはサムネイルがimgエレメントとして埋めこまれています。但し初期状態は、CSSで「visibility:hidden」と設定され画像は表示されません。

このiframeで読み込む広告HTMLへもスクリプトが埋め込まれており、loadイベントを契機に実行が開始されます。このスクリプトはサムネイルサイズの調整などを行ない、最後にCSSのvisibilityをvisibleへと設定します。つまり、サムネイル画像を表示させるためには、広告HTMLを適切に読み込み、その中のスクリプトを正しく発動させなければなりません。

この一連の流れに於いて、Amazonサーバからは広告HTMLファイルを取得することになるのですが、実はこのAmazonのサーバには、広告HTMLを正しく送出してこない、という問題があります。

例えばある伝送に於いては、広告HTMLファイルよりも大きなサイズを、HTTPのContent-Length:ヘッダへと付加します。その上で、広告HTMLコンテンツの送出が終了した時点でTCPセッションをcloseします。即ち、ブラウザにとっては、伝送が途中で途切れてしまったかのように見えてしまいます。何度か実験を行いましたが、正しいContent-Lengthを送ってくることは一度もありませんでした。また、実コンテンツサイズとContent-Lengthのサイズ差も一定ではありませんでした。

一方Chromeへは、Content-Length分のコンテンツが送られてこなかった場合、loadイベントを発火しない、という問題(または仕様)があります。Content-Length分読み込む前にコネクションが切断された場合、もしChromeの取得したコンテンツサイズが256バイト以上であれば、レンダリングは行うものの、loadイベントを発火しません。一方、コンテンツサイズが256バイト未満の場合には、レンダリングを行うことなく「Error 100(net::ERR_CONNECTION_CLOSED)」エラーを表示します。

この「不正なコンテンツサイズをHTTPのContent-Lengthへ付加する」Amazonサーバと、「Content-Length値分のコンテンツを読み込まない限りloadイベントを発火しない」Chromが結びつくことで、「Amazonおまかせリンク」Widgetがサムネイルを表示しない、という事象を引き起こすことになります。

問題の本質はAmazonサーバです。正しいContent-Lengthを付加してくれれば問題ありません。そもそもこのサーバは、場合によっては、広告HTMLファイルの送出を、途中でうち切ってしまうことさえあります。この場合には、ブラウザを問わず広告は適切に表示されません。

一方でChromも、既にレンダリングを行ってしまっている以上、他ブラウザのように、loadイベントを発火してくれる寛容さがあってもよいのでは、とも思います。

上記問題をAmazonへ報告したところ「担当部署に申し伝えさせていただき、今後のよりよいサービス向上に向けて参考とさせていただきます」との回答が返ってきました。

Chromeの挙動に関しては、Chromium開発チームへバグレポートを送りましたが、仕様の解釈的にはサーバ側の問題であり、ブラウザとしての対応をどうするかは意見を集めたい、という状態になっています。

最近ではChromeのブラウザシェアも伸びていると聞いています。アフェリエイト収入へ頼っている方は、「Amazonおまかせリンク」Widgetの利用には十分留意したほうが良いかもしれません。

3 件のコメント:

  1. 検証お疲れ様です。まだなおらないんですよねこれ。

    返信削除
  2. コメントありがとうございます。仰る通り、残念ながら、Chrome、Amazonとも現状維持ですね。大手さんもこのWidgetを使っているところを見かけますので、困っていると思うのですが...。

    返信削除
  3. 検索してみると、やはり表示されてない所がおおいですね…
    chromeのシェアーが多くなっているのでライブリンクの仕様をやめました^^;

    返信削除