«بیشینه‌سازی عملکرد» برای فروش‌های آنلاین با فید محصول (خرده‌فروشی)

«عملکرد بیشینه» برای خرده‌فروشی به شما کمک می‌کند با ارائه فرصت برای نمایش در فضای آگهی اضافی، دسترسی و اهدافتان را گسترش دهید.

ممکن است لازم باشد دارایی‌های جدیدی—مثل نوشتار، تصویر، یا ویدیو —ایجاد کنید تا آگهی‌ها بتوانند در قالب‌ها و سطوح جدید—مثل نوشتار، «یافته‌ها»، جاری‌سازی در YouTube، و «شبکه تبلیغات»—ارائه شوند.

اگر اطلاعات آماری منحصربه‌فردی درباره اینکه کدام بخش از کاربران شما احتمال بیشتری دارد که تبدیل شوند دارید، اکنون می‌توانید از نشان‌های مخاطبان نیز استفاده کنید تا به Google اطلاع دهید.

در اینجا چند بهبود دیگر که پویش‌های «عملکرد بیشینه» نسبت به پویش‌های استاندارد Shopping ارائه می‌دهند آورده شده است:

  • هدف‌یابی زبانی براساس فید Merchant Center یا معیارهای پویش
  • «ازهم باز کردن نشانی وب نهایی»
  • وقتی هدف «بازدید فروشگاهی» انتخاب شود، همه فروشگاه‌ها هدف‌یابی می‌شوند
  • امکان تنظیم اهداف تبدیل براساس هر مشتری یا هر پویش

برای استفاده از «کمپین عملکرد بیشینه» برای خرده‌فروشی، حساب Google Ads باید به حساب Merchant Center موجود پیوند داده شود. با پیوند دادن به Merchant Center، دارایی‌ها می‌توانند به‌طور خودکار برای پویش تولید شوند، اما دسترسی و عملکرد محدود خواهد بود.

افزودن گروه‌های دارایی

افزودن گروه دارایی کانال‌های Shopping و بازاریابی مجدد پویا را فعال می‌کند، و تنظیم بسط نشانی وب «آگهی‌های پویای جستجو» را فعال می‌کند. به‌طورکلی، هرچه دارایی‌های بیشتری ارائه کنید، سیستم می‌تواند قالب‌های آگهی بیشتری برای هدف‌یابی فضای آگهی اضافی ایجاد کند.

توصیه می‌کنیم هر گروه دارایی محصولات متفاوتی را هدف‌یابی کند. توجه داشته باشید که برای فهرست کردن گروه‌ها محدودیت‌هایی وجود دارد. به‌عنوان روالی مطلوب، فقط باید مجموعه خاصی از محصولات را از گروه دارایی هدف‌یابی کنید — برای مثال، محصولات A-L در «گروه دارایی ۱» و محصولات M-Z در «گروه دارایی ۲» قرار می‌گیرند.

اگر می‌خواهید پیام‌رسانی دارایی‌تان را براساس مخاطب سفارشی‌سازی کنید، می‌توانید چند گروه دارایی برای هر پویش ایجاد کنید. به‌این‌ترتیب، می‌توانید برای نشانی وب نهایی یکسان، گروه‌های دارایی مختلفی ایجاد کنید.

هنگام راه‌اندازی پویش «عملکرد بیشینه»، نکات بهینه‌سازی بیشتری ببینید.

ایجاد پویش خرده‌فروشی «عملکرد بیشینه»

مانند دیگر پویش‌های آماده خرید، فیلدهای ShoppingSetting پویش را تنظیم کنید.

الزامی

merchant_id
شناسه Merchant Center حسابی که حاوی محصولات برای تبلیغ است.

اختیاری

feed_label

رشته‌ای که برای برچسب فید استفاده می‌شود، همان‌طور که در Merchant Center شما تعریف شده است. این فیلد باید درصورتی استفاده شود که نیاز دارید محصولات را از یک فید Merchant Center خاص انتخاب کنید. اگر مشخص نشده باشد، پویش از همه فیدهای دردسترس در Merchant Center استفاده می‌کند.

اگر قبلاً از sales_country منسوخ‌شده در قالب کد کشور دوحرفی (XX) استفاده می‌کردید، باید به‌جای آن از feed_label استفاده کنید. برای اطلاعات بیشتر، مقاله پشتیبانی برچسب فید را ببینید.

توجه داشته باشید که ارسال کد کشور در feed_label به‌طور خودکار آگهی‌ها را برای نمایش در آن کشور فعال نمی‌کند؛ ابتدا باید هدف‌یابی مکان جغرافیایی را راه‌اندازی کنید.

campaign_priority

اولویت پویش Shopping. پویش‌هایی که اولویت عددی بالاتری دارند بر پویش‌هایی که اولویت پایین‌تری دارند ارجحیت دارند.

enable_local

گزینه فعال کردن آگهی برای محصولاتی که در فروشگاه‌های محلی برای این پویش فروخته می‌شوند.

اگر موجودی وجود داشته باشد، محصولات محلی به‌طور پیش‌فرض روشن است. بااستفاده از گروه‌های فهرستگان می‌توان این را فیلتر کرد.

language

می‌توانید چند زبان را انتخاب کنید تا آگهی‌هایتان را به مجموعه‌های خاصی از مشتریان نشان دهید.

اهداف تبدیل

می‌توانید اهداف تبدیل سطح مشتری را با به‌روزرسانی اهداف تبدیل سطح پویش لغو کنید، همان‌طور که در این مثال نشان داده شده است:

جاوا

/** 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: GoogleAdsClient, customer_id: str
) -> List[
    Dict[
        str,
        Union[
            ConversionActionCategoryEnum.ConversionActionCategory,
            ConversionOriginEnum.ConversionOrigin,
        ],
    ]
]:
    """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: GoogleAdsServiceClient = client.get_service("GoogleAdsService")
    customer_conversion_goals: List[
        Dict[
            str,
            Union[
                ConversionActionCategoryEnum.ConversionActionCategory,
                ConversionOriginEnum.ConversionOrigin,
            ],
        ]
    ] = []
    query: str = """
            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: SearchGoogleAdsRequest = client.get_type(
        "SearchGoogleAdsRequest"
    )
    search_request.customer_id = customer_id
    search_request.query = query
    results: SearchGoogleAdsResponse = 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: GoogleAdsClient,
    customer_id: str,
    customer_conversion_goals: List[
        Dict[
            str,
            Union[
                ConversionActionCategoryEnum.ConversionActionCategory,
                ConversionOriginEnum.ConversionOrigin,
            ],
        ]
    ],
) -> List[MutateOperation]:
    """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: CampaignConversionGoalServiceClient = (
        client.get_service("CampaignConversionGoalService")
    )
    operations: List[MutateOperation] = []

    # 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_goal_dict in customer_conversion_goals:
        mutate_operation: MutateOperation = client.get_type("MutateOperation")
        campaign_conversion_goal: CampaignConversionGoal = (
            mutate_operation.campaign_conversion_goal_operation.update
        )

        category_enum_value: (
            ConversionActionCategoryEnum.ConversionActionCategory
        ) = customer_goal_dict["category"]
        origin_enum_value: ConversionOriginEnum.ConversionOrigin = (
            customer_goal_dict["origin"]
        )

        campaign_conversion_goal.resource_name = (
            campaign_conversion_goal_service.campaign_conversion_goal_path(
                customer_id,
                _PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                category_enum_value.name,
                origin_enum_value.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 (
            category_enum_value
            == client.enums.ConversionActionCategoryEnum.PURCHASE
            and origin_enum_value == 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
      

پرل

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::V26::Resources::CampaignConversionGoal->new({
        resourceName =>
          Google::Ads::GoogleAds::V26::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::V26::Services::GoogleAdsService::MutateOperation
      ->new({
        campaignConversionGoalOperation =>
          Google::Ads::GoogleAds::V26::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.search_budget_lost_impression_share,
  metrics.search_rank_lost_impression_share,
  metrics.search_budget_lost_absolute_top_impression_share,
  metrics.search_rank_lost_absolute_top_impression_share,
  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 برای بازیابی سنجه‌هایی مثل کلیک‌ها، تبدیل‌ها، و ظهورهای گروه فهرستگان منسوب به این گروه دارایی استفاده کنید.

آگهی‌های خودرو

تبلیغ‌کنندگان می‌توانند از آگهی‌های خودرو برای تبلیغ فهرست موجودی خودرو خود استفاده کنند. برای این کار، باید فید داده‌های خودرو را در Merchant Center بارگذاری کنند و سپس از پویش‌های «عملکرد بیشینه» با فیدهای خودرو برای مدیریت آگهی‌ها استفاده کنند.

برای ایجاد پویش «عملکرد بیشینه» با فید وسایل نقلیه بااستفاده از Google Ads API، ایجاد پویش فروشگاه را دنبال کنید و listing_type پویش را روی VEHICLES تنظیم کنید.