インプレッション シェア重視の入札 - 単一アカウント

入札アイコン

広告主の中には、広告費用に関係なく、できるだけ頻繁に検索結果に表示させたいと思っている人もいます。また、費用は安くても広告の十分な視認性が確保される、やや控えめなインプレッション シェアを選択するケースも見られます。

インプレッション シェア重視の入札スクリプトを使用すると、インプレッション シェアの目標を段階的に達成できます。このスクリプトがキーワードを調べ、最も調整が必要なキーワードを見つけて、入札単価の引き上げや引き下げを行い、検索結果に表示する頻度を調整します。

スケジュール設定中

スクリプトは、過去 7 日間の統計情報に基づいて処理を実行します。毎週実行されるようスケジュール設定します。

仕組み

このスクリプトは、次の 2 つの処理を行います。

  • まず、インプレッション シェアが低すぎるキーワードを特定し、入札単価を引き上げます。
  • 次に、クリック率が 1% を上回り、インプレッション シェアが高すぎるキーワードをすべて特定して、入札単価を引き下げます。

1 つのイテレータで取得できるキーワード数は 50,000 個までです。その結果、スクリプトの実行ごとに最大 50,000 件の入札が引き上げられ、50,000 件の入札単価が引き下げられます。

入札単価の調整は、アカウントの状況に応じて慎重に行ってください。キーワードの入札単価を調整する際は、Ctr 以外の要素も考慮してください。

パラメータ

スクリプトでは、次のパラメータを変更します。

  • TARGET_IMPRESSION_SHARE には、達成を目指すインプレッション シェアを指定します。
  • キーワードのインプレッション シェアが TARGET_IMPRESSION_SHARETOLERANCE 以内になると、入札単価は更新されなくなります。インプレッション シェアが 49 対 51 なので、キーワードの入札単価を頻繁に変動させたくないと考えています。
  • BID_ADJUSTMENT_COEFFICIENT には、キーワードの入札単価を調整する際に使用する調整因子を指定します。調整比が大きいほど、入札単価も大きく変動します。

設定

  • 下記のソースコードを使って新しいスクリプトを作成します。
  • 以下のコードの TARGET_IMPRESSION_SHARETOLERANCEBID_ADJUSTMENT_COEFFICIENT を必ず更新してください。
  • キーワードを取得するための条件をよく確認します。
  • スクリプトが毎週実行されるようスケジュール設定します。

ソースコード

// Copyright 2015, Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/**
 * @name Bid To Impression Share
 *
 * @overview The Bid To Impression Share script adjusts your bids and allows you
 *     to steer ads in an advertiser account into a desired impression share in
 *     the search results. See
 *     https://developers.google.com/google-ads/scripts/docs/solutions/bid-to-impression-share
 *     for more details.
 *
 * @author Google Ads Scripts Team [adwords-scripts@googlegroups.com]
 *
 * @version 3.0
 *
 * @changelog
 * - version 3.0
 *   - Updated to use new Google Ads Scripts features.
 * - version 2.0.1
 *   - Fixed logic when determining which keywords to raise and lower.
 * - version 2.0.0
 *   - Refactored to target impression share rather than position.
 * - version 1.0.1
 *   - Refactored to improve readability. Added documentation.
 * - version 1.0
 *   - Released initial version.
 */

// Ad impression share you are trying to achieve, representated as a percentage.
const TARGET_IMPRESSION_SHARE = 0.5;

// Once the keywords fall within TOLERANCE of TARGET_IMPRESSION_SHARE,
// their bids will no longer be adjusted. Represented as a percentage.
const TOLERANCE = 0.05;

// How much to adjust the bids.
const BID_ADJUSTMENT_COEFFICIENT = 1.05;

/**
 * Main function that lowers and raises keywords' CPC to move closer to
 * target impression share.
 */
function main() {
  raiseKeywordBids();
  lowerKeywordBids();
}

/**
 * Increases the CPC of keywords that are below the target impression share.
 */
function raiseKeywordBids() {
  const keywordsToRaise = getKeywordsToRaise();
  for (const keyword of keywordsToRaise) {
    keyword.bidding().setCpc(getIncreasedCpc(keyword.bidding().getCpc()));
  }
 }

/**
 * Decreases the CPC of keywords that are above the target impression share.
 */
function lowerKeywordBids() {
 const keywordsToLower = getKeywordsToLower();
 for (const keyword of keywordsToLower) {
   keyword.bidding().setCpc(getDecreasedCpc(keyword.bidding().getCpc()));
 }
}

/**
 * Increases a given CPC using the bid adjustment coefficient.
 * @param {number} cpc - the CPC to increase
 * @return {number} the new CPC
 */
function getIncreasedCpc(cpc) {
  return cpc * BID_ADJUSTMENT_COEFFICIENT;
}

/**
 * Decreases a given CPC using the bid adjustment coefficient.
 * @param {number} cpc - the CPC to decrease
 * @return {number} the new CPC
 */
function getDecreasedCpc(cpc) {
  return cpc / BID_ADJUSTMENT_COEFFICIENT;
}

/**
 * Gets an iterator of the keywords that need to have their CPC raised.
 * @return {!Iterator} an iterator of the keywords
 */
function getKeywordsToRaise() {
  // Condition to raise bid: Average impression share is worse (less) than
  // target - tolerance
  return AdsApp.keywords()
      .withCondition(`ad_group_criterion.status = ENABLED`)
      .withCondition(
          `metrics.search_impression_share < ${TARGET_IMPRESSION_SHARE - TOLERANCE}`)
      .orderBy(`metrics.search_impression_share ASC`)
      .forDateRange(`LAST_7_DAYS`)
      .get();
}

/**
 * Gets an iterator of the keywords that need to have their CPC lowered.
 * @return {!Iterator} an iterator of the keywords
 */
function getKeywordsToLower() {
  // Conditions to lower bid: Ctr greater than 1% AND
  // average impression share better (greater) than target + tolerance
  return AdsApp.keywords()
      .withCondition(`metrics.ctr > 0.01`)
      .withCondition(
          `metrics.search_impression_share > ${TARGET_IMPRESSION_SHARE + TOLERANCE}`)
      .withCondition(`ad_group_criterion.status = ENABLED`)
      .orderBy(`metrics.search_impression_share DESC`)
      .forDateRange(`LAST_7_DAYS`)
      .get();
}