コネヒト開発者ブログ

コネヒト開発者ブログ

Facebook広告で広告費用対効果(ROAS)向上を目指す

こんにちは! @otukutun です。

今回、Facebookで広告費用対効果(ROAS)向上の取り組みをしたのでここで紹介します。

はじめに

インターネット広告では、ユーザーの興味を推定し広告配信しますが、その際に費用対効果などは考慮されていません。例えば、ECショップで広告出稿する際に100円の商品を買う人よりも100万円の商品を買う人に配信した方が売り上げとしては大きいわけですが、現状はそのようになっていません。 Facebook広告では、既に出稿している場合に購入金額の情報をFacebook上に送信することで、例のようなECショップでより高い商品を買う人を機械学習で推定し優先的にターゲティングすることが可能になります(詳しい説明はこちらをご覧ください)

例ではECを出しましたがゲームでも同じようなことができます。スマホゲームで有名なニャンコ大戦争ではROAS対応をすることで、広告費用対効果が前月の2.6倍になるなどの大きな成果が出ています。(下記ページより成果情報を引用)

www.facebook.com

Facebook Conversion APIを導入する

インターネット広告ではコンバージョンイベントを送ることでコンバージョン率を計測できると思います。Facebook広告ではFacebookピクセルでそれが実現できます。FacebookピクセルだけでもROAS向上の対応はできるのですが、サーバー側で処理したかったので今回はFacebookピクセルのコンバージョンイベントとコンバージョンAPIを両方使って対応しました。

設定準備

まずイベントがROAS向上対応(以降バリューへの最適化とします)の条件を満たしているかを確認します。条件はこちらから確認できます。

コンバージョンイベントは「購入イベント」しかバリューへの最適化をオンにできないので注意してください。

また、両者からイベントを送る場合は、イベントが同一であることをfacebookに認識してもらう必要があります。同一の認定ロジックの詳細はこちらをご覧ください。

今回はFacebookピクセルとコンバージョンAPIから同じevent_nameとevent_idを送ることで認識してもらうようにしました。

Facebookピクセルの設定

購入ボタンを押して購入画面が表示されたタイミングなど任意のタイミングで、以下イベントを発火させます。Conversion APIで実際の値段を送るためにここでは0円でデータを送ります。

サーバーからConversion APIにリクエストを送る

まず、グラフAPIエクスプローラから叩いてみるのが簡単に試せるのでオススメです。

developers.facebook.com

上記ページの動画を参考にすると、グラフAPIエクスプローラ上からConversion APIを試しに送れます。その際、test_event_codeを付与することを忘れないでください。そうしないとtestイベントとみなされません。

今回はConversion APIをPHP SDK経由で使うことにしました。各種言語のSDKがあるのでみてみてください。またサービスの利用規約でどのデータを送るかを確認・検討しておくことも重要です。

PHP SDKを使うと以下のように試すことができます。

use FacebookAds\Api;
use FacebookAds\Object\ServerSide\CustomData;
use FacebookAds\Object\ServerSide\Event;
use FacebookAds\Object\ServerSide\EventRequest;
use FacebookAds\Object\ServerSide\UserData;

Api::init(null, null, 'ACCESS_TOKEN');
$client = new EventRequest('PIXEL_ID');

$userData = new UserData();
$userData
    ->setEmail('EMAIL')
    ->setPhone('PHONE_NUMBER')
    // It is recommended to send Client IP and User Agent for Conversions API Events.
    ->setClientIpAddress($_SERVER["REMOTE_ADDR"])
    ->setClientUserAgent($_SERVER['HTTP_USER_AGENT']);

$customData = (new CustomData())
    ->setCurrency('JPY')
    ->setValue(100000);

$event = (new Event())
    ->setEventName('Purchase')
    ->setEventId('event_id') // 任意のevent_idを設定する
    ->setEventTime(time())
    ->setUserData($userData)
    ->setCustomData($customData);


$client->setEvents([$event]);

// debug時はtest_event_codeを設定する
$client->setTestEventCode('TEST_EVENT_CODE');

$client->execute();

こちらで、動かしてみて、test_eventが送信されることに確認できます。また購入情報を0円を送ろうとした場合は、SDK経由だと除外されて不正なリクエストになるので注意してください。(0円の商品を送ることはそもそもないと思いますが念のため)

f:id:azuki_mihomiho:20211210172801p:plain
test_eventの確認

バリューへの最適化をONにする

購入イベントを送るようになってから、任意のタイミングで設定できるようになります。ただし、ある一定条件をクリアしないとバリュー最適化が設定できないため、気をつけてください。実際の設定方法はこちらを参考にしてください。

おわりに

いくつか情報が混在していることと実装上のハマりポイントがありましたが、FacebookからSDKが提供されているので開発自体はシンプルにできるかなと思います。この情報が参考になれば幸いです。