Performance Max เพื่อยอดขายออนไลน์ที่มีฟีดผลิตภัณฑ์ (ค้าปลีก)

Performance Max สำหรับธุรกิจค้าปลีก ช่วยให้คุณขยายการเข้าถึงและเป้าหมายได้โดยมอบโอกาสในการแสดงโฆษณาใน พื้นที่โฆษณาเพิ่มเติม

คุณอาจต้องสร้างชิ้นงานใหม่ เช่น ข้อความ รูปภาพ หรือวิดีโอ เพื่อให้โฆษณาแสดงในรูปแบบและแพลตฟอร์มใหม่ๆ เช่น ข้อความ, Discover, โฆษณาในสตรีมของ YouTube และ Display

หากคุณมีข้อมูลเชิงลึกเฉพาะตัวว่ากลุ่มผู้ใช้ใดมีแนวโน้มที่จะทำ Conversion มากกว่า คุณก็สามารถใช้สัญญาณของกลุ่มเป้าหมายเพื่อแจ้งให้ Google ทราบได้แล้ว

การปรับปรุงอื่นๆ ที่แคมเปญ Performance Max มีเหนือกว่า แคมเปญ Shopping มาตรฐานมีดังนี้

  • การกำหนดภาษาเป้าหมายตามฟีด Merchant Center หรือเกณฑ์แคมเปญ
  • การขยาย URL สุดท้าย
  • ระบบจะกำหนดเป้าหมายร้านค้าทั้งหมดเมื่อเลือกเป้าหมายการเข้าชมร้านค้า
  • ความสามารถในการตั้งเป้าหมาย Conversion ตามลูกค้าแต่ละรายหรือแคมเปญแต่ละรายการ

หากต้องการใช้ Performance Max สำหรับการค้าปลีก บัญชี Google Ads ต้องลิงก์ กับบัญชี Merchant Center ที่มีอยู่ การลิงก์กับ Merchant Center จะช่วยให้ระบบสร้างชิ้นงานสำหรับแคมเปญได้โดยอัตโนมัติ แต่การเข้าถึงและประสิทธิภาพจะถูกจำกัด

เพิ่มกลุ่มชิ้นงาน

การเพิ่มกลุ่มชิ้นงานจะเปิดใช้ช่องทาง Shopping และรีมาร์เก็ตติ้งแบบไดนามิก และการตั้งค่าการขยาย URL จะเปิดใช้โฆษณา Search แบบไดนามิก โดยทั่วไป ยิ่งคุณมีชิ้นงานมาก ระบบก็จะสร้างรูปแบบโฆษณาได้มากตามไปด้วยเพื่อกำหนดเป้าหมายพื้นที่โฆษณาเพิ่มเติม

เราขอแนะนําให้กลุ่มชิ้นงานแต่ละกลุ่มกําหนดเป้าหมายผลิตภัณฑ์ที่แตกต่างกัน โปรดทราบว่ามีขีดจำกัดสำหรับการแสดง กลุ่ม แนวทางปฏิบัติแนะนำคือคุณควรกำหนดเป้าหมายเฉพาะผลิตภัณฑ์บางชุดจากกลุ่มชิ้นงาน เช่น ผลิตภัณฑ์ A-L จะอยู่ในกลุ่มชิ้นงาน 1 และผลิตภัณฑ์ M-Z จะอยู่ในกลุ่มชิ้นงาน 2

หากต้องการปรับแต่งข้อความชิ้นงานตามกลุ่มเป้าหมาย คุณสามารถสร้าง กลุ่มชิ้นงานหลายกลุ่มต่อแคมเปญ ด้วยวิธีนี้ คุณจะสร้างกลุ่มชิ้นงานที่แตกต่างกันสำหรับ URL สุดท้ายเดียวกันได้

ดูเคล็ดลับการเพิ่มประสิทธิภาพเพิ่มเติม เมื่อตั้งค่าแคมเปญ Performance Max

สร้างแคมเปญ Performance Max สำหรับการค้าปลีก

เช่นเดียวกับแคมเปญ Shopping อื่นๆ ให้ตั้งค่าฟิลด์ ShoppingSetting ของแคมเปญ

ต้องระบุ

merchant_id
รหัส Merchant Center ของบัญชีที่มีผลิตภัณฑ์ที่จะโฆษณา

ไม่บังคับ

feed_label

สตริงที่ใช้สำหรับป้ายกำกับฟีดตามที่กำหนดไว้ใน Merchant Center ควรใช้ฟิลด์นี้ในกรณีที่คุณต้องการเลือกผลิตภัณฑ์จากฟีด Merchant Center ที่เฉพาะเจาะจง หากไม่ได้ระบุ แคมเปญจะใช้ฟีดที่มีอยู่ทั้งหมดใน Merchant Center

หากก่อนหน้านี้คุณใช้ sales_country ที่เลิกใช้งานแล้วในรูปแบบรหัสประเทศ 2 ตัวอักษร (XX) คุณควรใช้ feed_label แทน ดูข้อมูลเพิ่มเติมได้ที่บทความสนับสนุนเกี่ยวกับป้ายกำกับฟีด

โปรดทราบว่าการส่งรหัสประเทศใน feed_label ไม่ได้เปิดใช้โฆษณาให้แสดงในประเทศนั้นโดยอัตโนมัติ คุณต้องตั้งค่าการกำหนดเป้าหมายตามสถานที่ตั้งทางภูมิศาสตร์ก่อน

campaign_priority

ลำดับความสำคัญของแคมเปญ Shopping แคมเปญที่มีลำดับความสำคัญสูงกว่า (ตัวเลขสูงกว่า) จะมีความสำคัญมากกว่าแคมเปญที่มีลำดับความสำคัญต่ำกว่า

enable_local

ตัวเลือกในการเปิดใช้โฆษณาสําหรับผลิตภัณฑ์ที่ขายในร้านค้าในพื้นที่สําหรับแคมเปญนี้

ระบบจะเปิดใช้ผลิตภัณฑ์ในร้านโดยค่าเริ่มต้นหากมีสินค้าคงคลัง ซึ่งสามารถ กรองได้โดยใช้กลุ่มรายชื่อ

language

คุณสามารถเลือกหลายภาษาเพื่อแสดงโฆษณาต่อลูกค้าบางกลุ่มได้

เป้าหมาย Conversion

คุณสามารถลบล้างเป้าหมาย Conversion ระดับลูกค้าได้โดยการอัปเดตเป้าหมาย Conversion ระดับแคมเปญตามที่แสดงใน ตัวอย่างนี้

Java

/** Retrieves the list of customer conversion goals. */
private static List<CustomerConversionGoal> getCustomerConversionGoals(
    GoogleAdsClient googleAdsClient, long customerId) {
  String query =
      "SELECT customer_conversion_goal.category, customer_conversion_goal.origin "
          + "FROM customer_conversion_goal";

  List<CustomerConversionGoal> customerConversionGoals = new ArrayList<>();
  try (GoogleAdsServiceClient googleAdsServiceClient =
      googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
    // The number of conversion goals is typically less than 50, so we use
    // GoogleAdsService.search instead of search_stream.
    SearchPagedResponse response =
        googleAdsServiceClient.search(Long.toString(customerId), query);
    for (GoogleAdsRow googleAdsRow : response.iterateAll()) {
      customerConversionGoals.add(googleAdsRow.getCustomerConversionGoal());
    }
  }

  return customerConversionGoals;
}

/** Creates a list of MutateOperations that override customer conversion goals. */
private static List<MutateOperation> createConversionGoalOperations(
    long customerId, List<CustomerConversionGoal> customerConversionGoals) {
  List<MutateOperation> mutateOperations = new ArrayList<>();
  // To override the customer conversion goals, we will change the
  // biddability of each of the customer conversion goals so that only
  // the desired conversion goal is biddable in this campaign.
  for (CustomerConversionGoal customerConversionGoal : customerConversionGoals) {
    ConversionActionCategory category = customerConversionGoal.getCategory();
    ConversionOrigin origin = customerConversionGoal.getOrigin();
    String campaignConversionGoalResourceName =
        ResourceNames.campaignConversionGoal(
            customerId, PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID, category, origin);
    CampaignConversionGoal.Builder campaignConversionGoalBuilder =
        CampaignConversionGoal.newBuilder().setResourceName(campaignConversionGoalResourceName);
    // Change the biddability for the campaign conversion goal.
    // Set biddability to True for the desired (category, origin).
    // Set biddability to False for all other conversion goals.
    // Note:
    //  1- It is assumed that this Conversion Action
    //     (category=PURCHASE, origin=WEBSITE) exists in this account.
    //  2- More than one goal can be biddable if desired. This example
    //     shows only one.
    if (category == ConversionActionCategory.PURCHASE && origin == ConversionOrigin.WEBSITE) {
      campaignConversionGoalBuilder.setBiddable(true);
    } else {
      campaignConversionGoalBuilder.setBiddable(false);
    }
    CampaignConversionGoal campaignConversionGoal = campaignConversionGoalBuilder.build();
    CampaignConversionGoalOperation campaignConversionGoalOperation =
        CampaignConversionGoalOperation.newBuilder()
            .setUpdate(campaignConversionGoal)
            .setUpdateMask(FieldMasks.allSetFieldsOf(campaignConversionGoal))
            .build();
    mutateOperations.add(
        MutateOperation.newBuilder()
            .setCampaignConversionGoalOperation(campaignConversionGoalOperation)
            .build());
  }
  return mutateOperations;
}

      

C#

/// <summary>
/// Creates a MutateOperation that links an asset to an asset group.
/// </summary>
/// <param name="fieldType">The field type of the asset to be linked.</param>
/// <param name="linkedEntityResourceName">The resource name of the entity (asset group or
/// campaign) to link the asset to.</param>
/// <param name="assetResourceName">The resource name of the text asset to be
/// linked.</param>
/// <param name="brandGuidelinesEnabled">Whether or not to enable brand guidelines.</param>
/// <returns>A MutateOperation that links an asset to an asset group.</returns>
private MutateOperation CreateLinkAssetOperation(
    AssetFieldType fieldType,
    string linkedEntityResourceName,
    string assetResourceName,
    bool brandGuidelinesEnabled = false)
{ if (brandGuidelinesEnabled)
    {
        return new MutateOperation()
        {
            CampaignAssetOperation = new CampaignAssetOperation()
            {
                Create = new CampaignAsset()
                {
                    FieldType = fieldType,
                    Campaign = linkedEntityResourceName,
                    Asset = assetResourceName
                }
            }
        };
    } else
    {   return new MutateOperation()
        {
            AssetGroupAssetOperation = new AssetGroupAssetOperation()
            {
                Create = new AssetGroupAsset()
                {
                    FieldType = fieldType,
                    AssetGroup = linkedEntityResourceName,
                    Asset = assetResourceName
                }
            }
        };
    }
}

      

PHP

private static function getCustomerConversionGoals(
    GoogleAdsClient $googleAdsClient,
    int $customerId
): array {
    $customerConversionGoals = [];
    $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
    // Creates a query that retrieves all customer conversion goals.
    $query = 'SELECT customer_conversion_goal.category, customer_conversion_goal.origin ' .
        'FROM customer_conversion_goal';
    // The number of conversion goals is typically less than 50 so we use a search request
    // instead of search stream.
    $response =
        $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query));

    // Iterates over all rows in all pages and builds the list of conversion goals.
    foreach ($response->iterateAllElements() as $googleAdsRow) {
        /** @var GoogleAdsRow $googleAdsRow */
        $customerConversionGoals[] = [
            'category' => $googleAdsRow->getCustomerConversionGoal()->getCategory(),
            'origin' => $googleAdsRow->getCustomerConversionGoal()->getOrigin()
        ];
    }

    return $customerConversionGoals;
}

/**
 * Creates a list of MutateOperations that override customer conversion goals.
 *
 * @param int $customerId the customer ID
 * @param array $customerConversionGoals the list of customer conversion goals that will be
 *      overridden
 * @return MutateOperation[] a list of MutateOperations that update campaign conversion goals
 */
private static function createConversionGoalOperations(
    int $customerId,
    array $customerConversionGoals
): array {
    $operations = [];

    // To override the customer conversion goals, we will change the biddability of each of the
    // customer conversion goals so that only the desired conversion goal is biddable in this
    // campaign.
    foreach ($customerConversionGoals as $customerConversionGoal) {
        $campaignConversionGoal = new CampaignConversionGoal([
            'resource_name' => ResourceNames::forCampaignConversionGoal(
                $customerId,
                self::PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                ConversionActionCategory::name($customerConversionGoal['category']),
                ConversionOrigin::name($customerConversionGoal['origin'])
            )
        ]);
        // Changes the biddability for the campaign conversion goal.
        // Sets biddability to true for the desired (category, origin).
        // Sets biddability to false for all other conversion goals.
        // Note:
        //  1- It is assumed that this Conversion Action
        //     (category=PURCHASE, origin=WEBSITE) exists in this account.
        //  2- More than one goal can be biddable if desired. This example
        //     shows only one.
        if (
            $customerConversionGoal["category"] === ConversionActionCategory::PURCHASE
            && $customerConversionGoal["origin"] === ConversionOrigin::WEBSITE
        ) {
            $campaignConversionGoal->setBiddable(true);
        } else {
            $campaignConversionGoal->setBiddable(false);
        }

        $operations[] = new MutateOperation([
            'campaign_conversion_goal_operation' => new CampaignConversionGoalOperation([
                'update' => $campaignConversionGoal,
                // Sets the update mask on the operation. Here the update mask will be a list
                // of all the fields that were set on the update object.
                'update_mask' => FieldMasks::allSetFieldsOf($campaignConversionGoal)
            ])
        ]);
    }

    return $operations;
}
      

Python

def get_customer_conversion_goals(client, customer_id):
    """Retrieves the list of customer conversion goals.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.

    Returns:
        a list of dicts containing the category and origin of customer
        conversion goals.
    """
    ga_service = client.get_service("GoogleAdsService")
    customer_conversion_goals = []
    query = """
            SELECT
              customer_conversion_goal.category,
              customer_conversion_goal.origin
            FROM customer_conversion_goal
            """
    # The number of conversion goals is typically less than 50 so we use
    # GoogleAdsService.search instead of search_stream.
    search_request = client.get_type("SearchGoogleAdsRequest")
    search_request.customer_id = customer_id
    search_request.query = query
    results = ga_service.search(request=search_request)

    # Iterate over the results and build the list of conversion goals.
    for row in results:
        customer_conversion_goals.append(
            {
                "category": row.customer_conversion_goal.category,
                "origin": row.customer_conversion_goal.origin,
            }
        )
    return customer_conversion_goals


def create_conversion_goal_operations(
    client,
    customer_id,
    customer_conversion_goals,
):
    """Creates a list of MutateOperations that override customer conversion goals.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.
        customer_conversion_goals: the list of customer conversion goals that
          will be overridden.

    Returns:
        MutateOperations that update campaign conversion goals.
    """
    campaign_conversion_goal_service = client.get_service(
        "CampaignConversionGoalService"
    )
    operations = []

    # To override the customer conversion goals, we will change the
    # biddability of each of the customer conversion goals so that only
    # the desired conversion goal is biddable in this campaign.
    for customer_conversion_goal in customer_conversion_goals:
        mutate_operation = client.get_type("MutateOperation")
        campaign_conversion_goal = (
            mutate_operation.campaign_conversion_goal_operation.update
        )

        campaign_conversion_goal.resource_name = (
            campaign_conversion_goal_service.campaign_conversion_goal_path(
                customer_id,
                _PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                customer_conversion_goal["category"].name,
                customer_conversion_goal["origin"].name,
            )
        )
        # Change the biddability for the campaign conversion goal.
        # Set biddability to True for the desired (category, origin).
        # Set biddability to False for all other conversion goals.
        # Note:
        #  1- It is assumed that this Conversion Action
        #     (category=PURCHASE, origin=WEBSITE) exists in this account.
        #  2- More than one goal can be biddable if desired. This example
        #     shows only one.
        if (
            customer_conversion_goal["category"]
            == client.enums.ConversionActionCategoryEnum.PURCHASE
            and customer_conversion_goal["origin"]
            == client.enums.ConversionOriginEnum.WEBSITE
        ):
            biddable = True
        else:
            biddable = False
        campaign_conversion_goal.biddable = biddable
        field_mask = protobuf_helpers.field_mask(
            None, campaign_conversion_goal._pb
        )
        client.copy_from(
            mutate_operation.campaign_conversion_goal_operation.update_mask,
            field_mask,
        )
        operations.append(mutate_operation)

    return operations
      

Ruby

def _get_customer_conversion_goals(client, customer_id)
  query = <<~EOD
    SELECT
        customer_conversion_goal.category,
        customer_conversion_goal.origin
    FROM customer_conversion_goal
  EOD

  customer_conversion_goals = []

  ga_service = client.service.google_ads
  # The number of conversion goals is typically less than 50 so we use
  # GoogleAdsService.search instead of search_stream.
  response = ga_service.search(
      customer_id: customer_id,
      query: query,
  )

  # Iterate over the results and build the list of conversion goals.
  response.each do |row|
    customer_conversion_goals << {
        "category" => row.customer_conversion_goal.category,
        "origin" => row.customer_conversion_goal.origin
    }
  end

  customer_conversion_goals
end

def create_conversion_goal_operations(client, customer_id, customer_conversion_goals)
  campaign_conversion_goal_service = client.service.campaign_conversion_goal

  operations = []

  # To override the customer conversion goals, we will change the
  # biddability of each of the customer conversion goals so that only
  # the desired conversion goal is biddable in this campaign.
  customer_conversion_goals.each do |customer_conversion_goal|
    operations << client.operation.mutate do |m|
        m.campaign_conversion_goal_operation = client.operation.campaign_conversion_goal do |op|
          op.update = client.resource.campaign_conversion_goal do |ccg|
              ccg.resource_name = client.path.campaign_conversion_goal(
                  customer_id,
                  PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                  customer_conversion_goal["category"].to_s,
                  customer_conversion_goal["origin"].to_s)
              # Change the biddability for the campaign conversion goal.
              # Set biddability to True for the desired (category, origin).
              # Set biddability to False for all other conversion goals.
              # Note:
              #  1- It is assumed that this Conversion Action
              #     (category=PURCHASE, origin=WEBSITE) exists in this account.
              #  2- More than one goal can be biddable if desired. This example
              #     shows only one.
              ccg.biddable = (customer_conversion_goal["category"] == :PURCHASE &&
                  customer_conversion_goal["origin"] == :WEBSITE)
          end
          op.update_mask = Google::Ads::GoogleAds::FieldMaskUtil.all_set_fields_of(op.update)
        end
    end
  end

  operations
end
      

Perl

sub get_customer_conversion_goals {
  my ($api_client, $customer_id) = @_;

  my $customer_conversion_goals = [];
  # Create a query that retrieves all customer conversion goals.
  my $query =
    "SELECT customer_conversion_goal.category, customer_conversion_goal.origin "
    . "FROM customer_conversion_goal";
  # The number of conversion goals is typically less than 50 so we use
  # GoogleAdsService->search() method instead of search_stream().
  my $search_response = $api_client->GoogleAdsService()->search({
    customerId => $customer_id,
    query      => $query
  });

  # Iterate over the results and build the list of conversion goals.
  foreach my $google_ads_row (@{$search_response->{results}}) {
    push @$customer_conversion_goals,
      {
      category => $google_ads_row->{customerConversionGoal}{category},
      origin   => $google_ads_row->{customerConversionGoal}{origin}};
  }

  return $customer_conversion_goals;
}

# Creates a list of MutateOperations that override customer conversion goals.
sub create_conversion_goal_operations {
  my ($customer_id, $customer_conversion_goals) = @_;

  my $operations = [];
  # To override the customer conversion goals, we will change the biddability of
  # each of the customer conversion goals so that only the desired conversion goal
  # is biddable in this campaign.
  foreach my $customer_conversion_goal (@$customer_conversion_goals) {
    my $campaign_conversion_goal =
      Google::Ads::GoogleAds::V20::Resources::CampaignConversionGoal->new({
        resourceName =>
          Google::Ads::GoogleAds::V20::Utils::ResourceNames::campaign_conversion_goal(
          $customer_id,
          PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
          $customer_conversion_goal->{category},
          $customer_conversion_goal->{origin})});
    # Change the biddability for the campaign conversion goal.
    # Set biddability to true for the desired (category, origin).
    # Set biddability to false for all other conversion goals.
    # Note:
    #  1- It is assumed that this Conversion Action
    #     (category=PURCHASE, origin=WEBSITE) exists in this account.
    #  2- More than one goal can be biddable if desired. This example
    #     shows only one.
    if ( $customer_conversion_goal->{category} eq PURCHASE
      && $customer_conversion_goal->{origin} eq WEBSITE)
    {
      $campaign_conversion_goal->{biddable} = "true";
    } else {
      $campaign_conversion_goal->{biddable} = "false";
    }

    push @$operations,
      Google::Ads::GoogleAds::V20::Services::GoogleAdsService::MutateOperation
      ->new({
        campaignConversionGoalOperation =>
          Google::Ads::GoogleAds::V20::Services::CampaignConversionGoalService::CampaignConversionGoalOperation
          ->new({
            update => $campaign_conversion_goal,
            # Set the update mask on the operation. Here the update mask will be
            # a list of all the fields that were set on the update object.
            updateMask => all_set_fields_of($campaign_conversion_goal)})});
  }

  return $operations;
}
      

รายงาน Shopping

ใช้ shopping_performance_view เพื่อ เรียกข้อมูลเมตริกที่สรุปตามกลุ่มผลิตภัณฑ์ เช่น segments.product_item_id

SELECT
  segments.product_item_id,
  metrics.clicks,
  metrics.cost_micros,
  metrics.impressions,
  metrics.conversions,
  metrics.all_conversions,
  campaign.advertising_channel_type
FROM shopping_performance_view
WHERE
  campaign.advertising_channel_type = 'PERFORMANCE_MAX'
  AND segments.date DURING LAST_30_DAYS
  AND metrics.clicks > 0
ORDER BY
  metrics.all_conversions DESC,
  metrics.conversions DESC,
  metrics.clicks DESC,
  metrics.cost_micros DESC,
  metrics.impressions DESC

ใช้ asset_group_product_group_view เพื่อดึงข้อมูลเมตริก เช่น การคลิก, Conversion และการแสดงผลของกลุ่มข้อมูลที่เชื่อมโยงกับกลุ่มชิ้นงานนี้

โฆษณายานพาหนะ

ผู้ลงโฆษณาสามารถใช้โฆษณายานพาหนะ เพื่อโปรโมตพื้นที่โฆษณายานพาหนะโดยอัปโหลดฟีดข้อมูลยานพาหนะไปยัง Merchant Center จากนั้นใช้ แคมเปญ Performance Max ที่มีฟีดยานพาหนะ เพื่อจัดการโฆษณา

หากต้องการสร้างแคมเปญ Performance Max ที่มีฟีดยานพาหนะโดยใช้ Google Ads API ให้ ทำตามสร้างแคมเปญค้าปลีก และตั้งค่า listing_type ของแคมเปญเป็น VEHICLES