ads.txtを調べてみた

iabからads.txtと呼ばれるRTB取引の透明性を高めるための施策について仕様が固まったらしく、
Specificationが発表されていた。

IAB Tech Lab Ads.txt Specification Version 1.0

ads.txtとは何か?

昨今のRTB取引はものすごく複雑になっており、問題なく配信が行われているのか、どのような過程を経て広告が配信されているか、意図したサイトや意図した広告フォーマットで配信されているのか完全に把握できていないことが多い。また、その複雑性が原因で、ドメインを偽りBuyerを騙す事業者やサイトが増加している。

これらの問題を解決するため、RTB取引における透明性を高めるための施策の一つとして、ads.txtをiabが発表しました。

ads.txtの中身

具体的には、媒体社が、ads.txtという名前のtextファイルを自分達のサイトドメイン上に設置する。
ads.txtの中身には、自分達のサイトを取り扱うことができるアドエクスチェンジ(主にSSP)とそのアドエクスチェンジから発行されている媒体社識別子等を記載しておく。
以下はiabサイトに載っていたサンプルです。

http://example.com/ads.txt:

ads.txtの使い方

ads.txtをBuyer側がクロールしてデータとして保存、bidリクエストの中身とads.txtの整合性を確認して、レスポンスを返すような感じで使われるみたいです。

事業者毎に何をやるのか?

結局、それぞれの事業者毎になにをやらなければならないかまとめました。

  • 媒体社

  • → アドエクスチェンジに自分のPublisherIDとドメインを確認してads.txtを作成し設置する

  • アドエクスチェンジ

  • → 媒体社にPublisherIDとドメインを教える

  • Buyer

  • → ads.txtのクローリングとデータの保存、配信ロジックへの組み込み

こんな感じかと思います。
※間違っていたらごめんなさい。

まとめと疑問点

市場が多くなってきたからこそ、悪いことをする人が増え、それを規制するための方法を考えるという流れで、
至極真っ当な対応なのではないかと思いました。

後、ads.txtについて疑問に思ったこと

  • OpenRTB以外の場合はどうするのか?例えば、ADNWで広告を購入する場合など

  • → ADNWはRTBよりも透明性が高いため気にしなくていいのか

  • RTBのフィラーとしてADNWを表示する場合は、OpenRTBの領域ではなくなるため、関係ないのか

  • → フィルが低いとほぼ、ADNWが表示されたりするけど、それは上記内容と同じことなのか

  • ads.txtのクロールタイミングは?

  • → ads.txtがないところには配信しないのか?確認できたところから配信するとかかな

  • ads.txtがないサイトはどうするか?

  • → 中にはads.txtを作成しないサイトも出てくると思うが、そういうサイトはBuyerから敬遠される?

  • ドメインの価値

  • → そもそもわけのわからないサイトにもads.txtが存在し、bidリクエストに載ってくれば配信するのか?わけのわからないサイトを参画させているアドエクスチェンジの問題?

参照

https://iabtechlab.com/ads-txt/
https://iabtechlab.com/how-to-ads-txt/
https://iabtechlab.com/ads-txt-about/

stringをDOMに変換してappendする方法

どうしても string からDOMを生成して、 document.write せずに appned する場合の対応です。
本来であればこうなる前になんらかの手を打ちましょう。

console上に exec script! が表示されればうまく動いています。

処理を順々に見てみましょう。

parserparseFromString されたで取得できるDOMは以下の感じです。

勝手に head に追加されるみたいです。

head に追加された script を取得して、そこから src を抜き出して、
作成して scriptsrc に追加して、 appned するとうまく動きます。

documet.createElementしたDOMをdocument.writeする時に便利な方法

背景

本当は document.write したくないですが、さまざまな事情で document.write しなければならない状況で、
大量のDOMをdocument.writeしたい時に、何かいい方法がないか調べました。

やったこと

document.write する時に、レンダリングしたいDOMを string で書くのが辛かったので、いい方法がないか調べた結果、
document.createElement した後に、その中のhtmlを取得して、 document.write することにしました。

コード

document.createElement した要素の outerHTMLdocument.write してます。

速度比較

DOMをstringで書いて、 document.write する処理と比較してみました。

結果的には、素直にDOMを書いた方法が早いです。

方法 速度
1 4.8ms
2 0.8ms

検証環境は、macOS Sierra(10.12.4)のChrome59.0.3071.109です。

まとめ

素直にDOMを書いた方が早いですが、エスケープとか間違うので、大量にDOMを扱いたい場合は、ありかもです。
ただ、実行速度が遅くなるので、どうしてもやりたい場合のみおすすめです。