2007/05/21

コンテンツ連動型広告の仕掛けについて考える〜その壱

以前 Blogger に自分のブログをホスティングしていたんだけど(Blogger が Google に買収されたちょっと後)、しばらくぶりに使ってみると、けっこういろんなところがバージョンアップされてる。AdSense の導入なんかもとても簡単になってるし、Google アカウントともちゃんと連動している。管理画面なんかの日本語化もずいぶん進んできた。意外に快適。

ついでに Amazon Affiliate Program も導入しちゃおうと思って、Amazon に行ってみたら知らない間に「Amazon おまかせリンク」なんていうプログラムが1年弱前にリリースされていたのを知った(遅…)。面白そうなので、さっそく導入してみた。これは、Amazon 版の AdSense といったところのプログラム。ブログの記事の内容に合致した Amazon の取り扱い商品を成功報酬型の広告として配信するというもの。さっそく導入してみる。最初はブログと何の関係もないものが表示されていたけど、しばらくリロードしているうちに、『鈴井貴之編集長 大泉洋』が表示された。Pipes の記事を書いたときに「大泉洋」をサンプルクエリにしたので、それに連動してピックアップされたんだろう(スクリーンショットを見ればわかるけど、ブログ記事の本文に何回も「大泉洋」というキーワードが出現している)。

「コンテンツ連動型広告は、記事中のテキストを解析して、その内容にマッチした広告を掲出する」とさらりと解説されていることが多いけど、もうちょっと詳しくコンテンツ連動型広告の仕掛けについて考えてみよう。Amazon のヘルプページや drk7.jp の Amazon Search のページあたりを参考に想像を交えながら。

導入から広告配信までの作業の流れを追ってみよう。

  1. Amazon Affiliate Program に参加(アソシエイト ID が発行される)
  2. 配信したい広告を指定(広告の形態や表示商品の指定など)して、広告配信用のスクリプト(JavaScript)を入手する
  3. スクリプトを自分のサイトに埋め込む(ページの HTML に 2 のスクリプトのコードをコピー&ペーストする)
  4. 最初は、コンテンツに連動していない商品情報が配信される
  5. しばらくすると、コンテンツに連動した商品情報が配信されるようになる
大雑把に言えばこんなところだろう。すこし細かく見ていく(推論増量中)。

  1. 2 で広告配信用のスクリプトが発行された時点で、そのスクリプトにはアソシエイト ID が埋め込まれている。
  2. 3 で埋め込まれたコードが 4 で初めて Amazon のサーバと情報をやりとりする(そのコードが埋め込まれたページの URL をURL 格納サーバに保存し、クローラ※にその URL を伝える)
  3. クローラは、その URL のコンテンツ(テキストデータ)を取得する
  4. クローラが取得したコンテンツは、解析サーバにより解析される
  5. その解析結果は、先に取得した URL とひもづけられて、URL 格納サーバに保存される
  6. 指定された URL からスクリプトが呼び出されると、URL 格納サーバはそのページの解析結果を商品引き当てサーバに渡す
  7. 商品引き当てサーバは、解析結果に基づき、妥当な商品を商品データベースから検索し、オススメ商品データを返す
  8. 広告配信サーバは、その商品データをスクリプトが呼び出された URL に広告データとしてを返す
基本的にはこんな流れだろう。

まず、C の部分がどういう処理をしているのかが気になる。というのも、特にカスタマイズしていないクローラの場合、ページ内のテキストをすべてそのまま取得してきてしまう。特にブログにおいて顕著な傾向だけど、ページ内にブログ内の記事へのリンクテキスト(記事のタイトルとか)が多数設置されている。そのテキストからキーワードを多く取得してしまうと、ページのコンテンツとの齟齬が発生してしまう可能性があるわけだ。例えば、海外旅行の感想を記事として投稿したとしても、リンクテキストに「最近読んだ本のタイトル」や「昨日のランチ」が並んでたりすると、下手をするとその日の投稿には記述されていない「最近読んだ本」や「料理本」がオススメ商品になってしまうことだってありうる……ということ。

こんな工夫って実装されている(ないしは予定されている)のかな? こういうのがあると、コンテンツ解析の精度が上がるよね。
  • スクリプトを呼び出したページがブログだった場合は、その RSS(ないしは Atom などのフィード)※※を解析する:
    このメリットは、ページコンテンツだけを取得できるという点。ただし、ブログ ASP によって出力する RSS のテキスト量がかなり違うようなので、テキスト量が少ない ASP(楽天ブログとか)の場合は、あまりよい精度での商品引き当てができなくなるリスクもありうる。
  • HTML の構造解析をおこない、構造のパターン分析をし、ページコンテンツと直結したテキストだけを取得する:
    例えば、このブログであれば、左カラムにメニュー、右側のメインカラムにコンテンツ……というような構造になっている。であれば、HTML を解析して、左カラムの部分だけを取得すればいい……ということになる。とはいえ、これは相当大変。ブログは簡単に見た目を変えることができちゃうから、ページの HTML コードがころころ変わっちゃう。
  • Google AdSense で導入しているようなセクションターゲットの利用(あるいは、それをそのまま利用):
    Google AdSense では、セクションターゲットという特別なタグを用意している。そのタグは、「このページは、ここからここまでがページコンテンツだよ。ここの内容にあった広告を配信してね」というブロガーの主張を伝えることができるというもの。ブラウザでそのページを閲覧しても、そのタグはブラウザに表示されたりすることはないんだけど、クローラには読める。クローラが取得したコンテンツデータを解析するときに、「あ、ここから、ここまでですね」と理解してもらえる。無関係なコンテンツデータは入り込まない可能性が高くなるので、広告の関連度も高くなるだろう……というもの。
まだ、ページコンテンツの取得の話しか書いてないのに長くなってしまった……。続きは次回。コンテンツ解析から商品引き当てのところまで行けたらいいな。

※クローラ:ウェブページにアクセスして、そのページ内容を取得する計算機。ロボットとも呼ばれる。ページに含まれたリンク(クモの糸)をたどって、ウェブ(クモの巣)を徘徊することから、スパイダーと呼ぶことも。クローラが取得したデータが加工されて、検索エンジンの索引データのもとになる。有名なクローラとしては、Google の Googlebot、Yahoo! inc. の Slurp などがある。

※※RSS:ブログの見出しや本文(ないしはその抜粋)などのデータを一定の形式でページの更新時などに出力したもの。それを RSS リーダーと呼ばれるソフトに登録しておくと、更新情報が自動的に収集できるので、便利。RSS リーダーが普及するまでは、そのページが更新されたかを確認するには、そのページに行ってみる……などの原始的な手段しかなかった。